如何*真正*编写 UML 基数?

Posted

技术标签:

【中文标题】如何*真正*编写 UML 基数?【英文标题】:How to *really* write UML cardinalities? 【发布时间】:2013-07-17 12:10:45 【问题描述】:

我想一劳永逸地知道如何编写 UML 基数,因为我经常不得不就它们进行辩论(因此非常欢迎提供证明和来源:)

如果我想解释一个Mother可以有多个Children,但一个Child只有一个Mother,我应该写:

Mother * ---------- 1 Child

或者

Mother 1 ---------- * Child

?

【问题讨论】:

如果您已经熟悉 Merise 表示法,那么 UML 对基数正好相反。因此,您的第一个示例在 Merise 图中是正确的。 【参考方案1】:

当然红胡子是对的,正确答案是第二个。

至于记住这一点的提示,我建议用英语思考:你说“A child has ONE mom”,在这句话中就像在 UML 中一样,ONE 写在妈妈旁边。相当简单。

【讨论】:

记住这一点的好方法:+1:【参考方案2】:

很多人在开始使用 UML 时都会有这个问题,尤其是当他们来自另一种表示法时,无论他们在行的哪一端,名称总是按顺时针方向读取。这真的令人困惑!

Red Beard 是正确的,尽管 UML 规范没有明确说明关联端信息(即名称和多重性)的写入位置,但它在多个地方暗示了这一点。例如,图 7.11(显示属性)和 7.12(显示单向关联,箭头旁边的关联端)是等效的属性符号;因此,多重性确实与属性的类型相邻。

我学会记住哪一端具有哪一种多重性的一种方法是想象一个单向实例图,并在指向目标的箭头旁边写下数字。

顺便说一句,您应该使用描述性关联结束名称。这些通常会变成 Java 中的属性名称、XSD 中的元素名称等等。例如,在 Java 中,Mother 类可能具有“Set”类型的“children”属性。如果您不命名它们,您通常会得到不受欢迎的默认名称。

【讨论】:

【参考方案3】:

第二个 母亲 1 ----------------- 1..* 孩子

您会在UML specification 中找到许多与抽象语法相关的图的示例...

【讨论】:

以上是关于如何*真正*编写 UML 基数?的主要内容,如果未能解决你的问题,请参考以下文章

《UML大战需求分析》阅读笔记02

注释@JsonIgnore的真正用途是啥

02《火球——UML大战需求分析》阅读笔记之二

UML 图中的聚合基数

Microsoft Office Visio 2010如何 创建 UML 用例图

Thread.sleep 是如何真正工作的?