您如何在 UML 中将集合(arrayList、vector 等)编写为属性(Class 图)?

How you write collections (arrayList, vector, etc) as attribute in UML (Class Diagram)?

我想问一下如何在class图中将集合(arrayList,vector)写成属性?

因为当你想添加变量作为属性时你可以写成“+ name: string”,但它如何与向量一起使用?谢谢

与其他类型相同,例如 + name: Vector<String> 因为可以将类型指定为自由文本

参见 this tutorial 关于 UML 图中的“多重性”和“多重性元素”。

基数

属性名称和类型后跟方括号中的一个或两个数字间隔,由 2 个点连接。

只有一个:

goalKeeper : Player [1..1]

…或:

goalKeeper : Player [1]

对于倍数,二到三:

forwards : Player [2..3]

使用星号表示开放式。

  • 零个或多个:[0..*]
  • 一个或多个:[1..*]

必须为零:[0..0][0]

集合属性

遵循具有以下特征的多重性范围:

  • orderedunordered(表示已排序)
  • uniquenonunique(意思不同)

将这些值嵌套在花括号中,用逗号分隔。

Java

你说:

I write collections (arrayList, vector)

顺便说一下,永远不要使用 Vector. That legacy class was supplanted many years ago by ArrayList, as noted in the Javadoc

让我们看看 Java Collections Framework 如何符合这些属性。

A Java Set would be { unordered, unique }. A Java SortedSet or NavigableSet would be { ordered, unique }. A Java List would be { ordered , nonunique }. As to the last combination { unordered , nonunique }, no such interface nor implementation is bundled with Java; see the 3rd-party solution, Multiset in Guava.

例子

回到你的一些实体有名字的例子,说一个或多个名字按优先顺序列出:

+ names: string [1..*] { ordered , unique }

您的属性名称应该是复数,例如此处的 names 而不是单数 name.

是正确的,切中要害。这个答案只是对他的答案的补充。

当你想描绘一个名字时,你想到的只是一个名字是一串字符,所以你没有在class图中提到它是StringBuilder还是StringBufferCharSequence 等。您只是提到 String 并不意味着 String class.

另一个例子是birthDate,您只需提及Date;不是 LocalDateZonedDateTimeOffsetDateTime 等。这里,Date 并不意味着臭名昭著的 java.util.Date class;它只是表示日期类型的对象。

总结一下,当你提到一个集合时,你需要提到的只是基数,而不是确切的实现class(比如ListSetVector等)例如

history: History[0..*]

表示属性,history 是集合类型,元素将是类型,History