继承的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
继承自 A
,T
继承自 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 实例缺少此内容。
我有这个 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
继承自 A
,T
继承自 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 实例缺少此内容。