显示继承子 class 与继承之外的子 class 之间的多重性

Showing multiplicity between subclasses of an inheritance and another class out of inheritance

考虑以下 class 图。

我的模型需要满足两个条件:

1-Node 只能有 1 个 cutted Line,但它可以有 0 个或多个 Line 个实例。

2- 一个节点来自 cutted LineLine但不是两者

我首先绘制波纹管域模型。但后来我决定通过继承 Edge.

来降低复杂性

好像第一个解决方案覆盖了第二个需求,但是没有覆盖多重性。不幸的是,第二个解决方案涵盖了多重性,但没有涵盖第二个条件。 我怎样才能画出它来满足这两个条件? 更新: 我终于想出了这个解决方案:

但是不知道是不是真的?

我认为您应该简单地使用第二张图片,因为它按预期描述了模型。您仍然可以添加 Edge class 作为 LineCuttedLine 的一般形式。只是它没有 Node.

的连接器

或者,您可以使用第一个并添加解释不同多重性的约束。

这种情况称为派生联合

A Node comes from either a CuttedLine, or a Line (but not both)

LineNode(或CuttedLine)之间的关联子集关联在 EdgeNode 之间,因为如果 Node 来自 Line(或 CuttedLine),则:

  • 它来自 Edge
  • Edge 的类型是 Line(或 CuttedLine

此外,EdgeNode之间的关联是由[=12]之间的关联派生 =] 和 Node 以及 CuttedLineNode 之间,因为如果 Node 来自 Edge,那么它来自 CuttedLine 或来自Line。 UML 将派生联合定义为 "as the union of all of the Properties that are constrained to subset it."

由于 Node 来自单个 Edge(基数为 1)并且泛化为 不相交 ,因此 Node 来自 来自 LineCuttedLine,但不是两者。 (如果其中一个集合为空而另一个集合只有一个元素,则两个不同集合的并集只有一个元素。)