继承的arity可以被覆盖吗?

Can inherited arity be overriden?

我有这个 class/object 图:

我不明白为什么根据给定的 class 图该对象图无效。

在对象图中,一个 C 对象与两个 T 对象有两个链接,与一个 T 对象的 alpha 关系和与另一个 T 的 beta 关系。所以我认为它不违反多重性约束。

你能解释一下为什么对象图无效吗?

下面保留我之前的回答,但三思而后行,答案是您的 class 图不完整。

两个 alpha 和 beta 关联没有关联结束名称。它们具有不同的多重性这一事实导致它们必须是不同的关联的结论。名字看起来像这样:

扩展继承将使:

基于这个假设,我的原答案是这样的:

原因是 :C 有两个关联 alpha 和 beta,每个关联到另一个 :T 对象。不是一个单一的 alpha 和一个单一的 beta 对另一个。所以你需要在 alpha 中添加 beta,反之亦然。

编辑 是的,JimL。是正确的。有两个 alpha 链接违反了 class 图中的约束。所以实际上你只能将一个 T 链接到 C。这又使 class 模型非常奇怪。

C class 与 T 有 beta 关联。 C 继承自 AT 继承自 S。由于存在来自 A t0 S 的 alpha 关联,这也是继承的。所以你有:

你的问题是我很长时间以来在这里看到的最有趣的问题。这非常棘手!

您的实例不正确的简单原因是类型 T 的每个实例都必须与一个 C 相关联。图表中类型 T 的顶级实例违反了关联 beta 中的约束。 (关联左端的多重性。)

对象图中有两个错误。

对象图中只有形式上的错误,实例之间的对象图中的线是links,即[=的实例class 图中显示了 16=] 关联 。由于 link 是实例,因此实例命名的相同规则适用于 class 实例。所以把alpha改成:alpha加下划线,就对了。测试版也一样。

此外 link 不正确,因为最上面的 T 实例中缺少一个 beta link。 A 的每个对象,并且由于 C 是 A 的特化,因此 C(和 B)对象也需要 alpha link 到 S 实例。由于 S 是广义 T,因此需要 A(或其特化之一)和 S(或其特化之一)之间的 alpha link。此外,每个 S(或 T)可能对 A 对象具有任意 alpha links。 每个 C 对象需要有零个或一个到 T 实例的 beta links。另一方面,每个 T 实例通过 beta link 恰好需要一个 C 实例。最上面的 T 实例缺少此内容。