UML class 图关联属性 {subsets < Association end > } | {联合} | {重新定义}

UML class diagram association properties {subsets < Association end > } | {union} | {redefines}

关于UML中class图之间的关联,我不太明白{subset}代表什么。我在第 4 页找到了讨论它的 PDF:https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.138.5537&rep=rep1&type=pdf。 这是您还可以在第 4 页找到的图表和文字:

我读过这篇文章,但我不是 100% 了解 {subsets < class > } 的内容。 它表示“表示 d 的槽将是表示 b 的槽的子集。类型 B 的元素可以插入槽 b,类型 D 的元素可以插入槽 b 和 d。” 那么,{subset} 是某种多态性吗?我认为thorugh“slot”它们的意思就像是B类型方法的参数。并且因为D子集b这意味着D就像b的sub-class所以它可以被传递为“ b" 在参数中,因为多态性。

所以问题是: {subsets < class > } 到底是什么,它代表子 class 吗?

除此之外,我还有其他问题: 什么是 {union}、{redefines < class > }、{nonunique} 和 {sequence}。代表什么?

代码中的一些例子会更容易理解。

So the question is : What is {subsets < class > } exactly, is it representing a sub class ?

它不是 {subsets < class >} 而是 {subsets < 属性 name >}

在给定的图表中 D 是唯一可见的 class 特化 B,如果它们没有其他 classes 特化 B 然后 B 的所有实例都是 D 的实例 然后 {子集 b} 等于 b.

但至少有:

B 的所有实例都不是 D 的必要实例(包括 classes 特化 D), 这就是为什么 d 只涉及 B 实例的子集 b .

在你的图表和我的图表中,子集 并不是很有用,但是在重新定义的情况下,例如{子集 a,重新定义 a} {子集 b,重新定义 b}


What are {union}, {redefines < class > }, {nonunique} & {sequence}

参考 formal/2017-12-05 §9.5.4 第 113 和 114 页:

  • union 表示 属性 是其子集的派生联合。

  • nonunique:表示多值属性中可能存在重复项。这与 unique 相反,意味着没有可能重复。例如假设 b{nonunique} 那么 B 的某些实例可以在 b。如果 属性 由 std::set 在 C++ 中实现,则它是 {unique}.

  • sequence表示属性表示一个有序包,这是{nonunique, ordered}[的快捷方式=83=]。 C++中的std::vectorstd::list就是这种情况。

  • {重新定义<属性-name>}(不是{重新定义}) 表示 属性 重新定义了由 < 属性-name > 标识的继承 属性。如果在你的图表中 {subsets b} 被替换为 {redefines b} 那么 classes C 只有插槽(例如 C++ 中的属性等)d。这不像 b 是私有的,因此无法从 C 访问,这实际上意味着 d 是一个重新定义b.