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