我想一劳永逸地知道如何编写 UML 基数,因为我经常不得不争论它们(所以非常欢迎证明和来源:)
如果我想解释 a
Mother
可以有多个 Child
ren 但 a Child
有且只有一个 Mother
,我应该写:
Mother * ---------- 1 Child
或者
Mother 1 ---------- * Child
?
第二个 母亲 1 ----------------- 1..* 孩子
您会在UML规范中找到许多与抽象语法相关的图形的示例...
红胡子当然是对的,正确答案是第二个。
至于记住这一点的技巧,我建议用英语思考:你说“一个孩子有ONE母亲”,在这个句子中,就像在UML中一样,ONE写在母亲旁边。相当简单。
许多人在开始使用 UML 时都会有这个问题,尤其是当他们来自另一种表示法时,其中名称总是顺时针读取,无论它们位于行的哪一端。这真是令人困惑!
红胡子是正确的,尽管 UML 规范没有明确说明关联端信息(即名称和多重性)写入何处,但它在多个地方暗示了这一点。例如,图 7.11(显示属性)和 7.12(显示箭头旁边的关联末端的单向关联)是等效的属性表示法;因此,多重性确实与属性的类型相邻。我学会记住哪一端具有多重性的一种方法是想象一个实例的单向图,并在指向目标的箭头旁边写下数字。
顺便说一句,您应该使用描述性关联结束名称。它们通常会变成 Java 中的属性名称、XSD 中的元素名称等等。例如,在 Java 中,Mother 类可能具有“Set
”类型的“children”属性。如果您不命名它们,您通常会得到不需要的默认名称。