问题描述
当谈到 UML 中类图之间的关联时,我不太明白 {subset} 代表什么。我在第 4 页找到了这个 PDF:https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.138.5537&rep=rep1&type=pdf。 以下是您也可以在第 4 页上找到的图表和文本:
我读了这篇文章,但我并不是 100% 了解 {subsets } 是关于什么的。 它说“表示 d 的槽将是表示 b 的槽的子集。类型 B 的元素可以插入槽 b 中,类型 D 的元素可以插入槽 b 和 d 中。” 那么,{subset} 是某种多态性吗?我认为通过“槽”,它们的意思就像 B 类型方法的参数。因为 D 子集 b 这意味着 D 就像 b 的子类,所以它可以在参数中作为“b”传递因为多态。
所以问题是: 什么是 {subsets } ,它代表一个子类吗?
除此之外,我还有其他问题: 什么是 {union}、{redefines }、{nonunique} 和 {sequence}。代表什么?
代码中的一些示例会更容易理解。
解决方法
所以问题是:{subsets } 到底是什么,它代表一个子类吗?
不是{subsets }而是{subsets }
在给定的图中,D 是唯一一个专门用于 B 的可见类,如果它们不是专门用于 B 的其他类,那么所有实例B 是 D 的实例,然后 {subset b} 等于 b。
但至少有:
B 的所有实例都不是 D 的必要实例(包括专用于 D 的类),这就是为什么 d 只涉及 b 所关注的 B 实例的一个子集。
在你的图表和我的图表中,子集并不是很有用,但是例如在重新定义的情况下,例如{子集a,重新定义a} {子集b,重新定义b}
什么是{union},{redefines },{nonunique} & {sequence}
参考 formal/2017-12-05 §9.5.4 第 113 和 114 页:
-
union 表示该属性是其子集的派生并集。
-
nonunique:表示多值属性中可能存在重复项。这与 unique 相反,意味着没有可能的重复。例如,假设 b 是 {nonunique} 那么一些 B 的实例可以在 b 中出现多次。如果该属性在 C++ 中由
std::set
实现,则它是 {unique}。 -
sequence 表示该属性代表一个有序包,这是{nonunique,ordered}的快捷方式。 C++ 中的
std::vector
和std::list
就是这种情况。 -
{redefines }(不是{redefines })表示该属性重新定义了由标识的继承属性。如果在您的图表中 {subsets b} 被替换为 {redefines b} 那么类 C 只有插槽(例如 C++ 中的属性等)d。这不像有 b 私有所以不能从 C 访问,这真的意味着 d 是对 b 的重新定义.