我有这个类/对象图:
根据给定的类图,我不明白为什么该对象图无效。
在对象图中,一个C对象有两个带有两个T对象的链接,一个与T对象的alpha关系和与另一个T的beta关系。所以我不认为它违反了多重性约束。
请您解释一下为什么对象图无效?
答案 0 :(得分:1)
你的问题是我在很长一段时间里见过的最有趣的问题。这很棘手!
您的实例不正确的简单原因是,T
类型的每个实例都必须与一个C
相关联。图表中类型T
的顶级实例违反了关联beta
中的约束。 (关联左端的多重性。)
答案 1 :(得分:0)
在下面留下我之前的答案,但是想了两次,答案是你的班级图是不完整的。
两个alpha和beta关联没有关联端名称。它们具有不同的多重性这一事实导致了它们必须是不同的关联的结论。使用名称看起来像这样:
扩展继承将使这个:
基于这个假设,我原来的答案是这样的:
原因是:C
对另一个:T
对象有两个关联alpha和beta。不是一个alpha到一个beta而是一个beta到另一个。因此,您需要在alpha中添加beta,反之亦然。
编辑是的,JimL。是正确的。有两个alpha链接违反了类图中的约束。实际上,您只能将一个T
链接到C
。这再次使得班级模型非常奇怪。
C
类与T
具有beta关联。 C
继承自A
,T
继承自S
。由于存在来自A
t0 S
的alpha关联,因此这也是继承的。所以你有:
答案 2 :(得分:0)
对象图中有两个错误。
对象图中只有一个正式的错误,实例之间的对象图中的行是链接,即类中显示的关联的实例图。由于链接是实例,因此实例命名的相同规则适用于类实例。因此,将 alpha 更改为:alpha 并为其加下划线,这是正确的。同样适用于beta。
此外,链接不正确,因为最上面的T实例缺少beta链接。 A的每个对象,并且作为C是A的特化,C(和B)对象也需要到S实例的 alpha 链接。由于S是广义T,因此需要A(或其特化之一)与S(或其特化之一)之间的α链接。此外,每个S(或T)可能具有到A对象的任意alpha链接。 每个C对象需要与T实例具有零个或一个beta链接。在另一个方向上,每个T实例通过beta链接只需要一个C实例。最上面的T实例缺少这个。