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

Java 如何在UML(类图)中将集合(arrayList、vector等)编写为属性?,java,uml,class-diagram,Java,Uml,Class Diagram,我想问一下如何在类图中将集合(arrayList、vector)作为属性编写 因为当您想将变量添加为属性时,您可以像“+name:string”那样编写它,但它如何与vector一起工作呢?谢谢。与您处理其他类型的方式相同,例如+name:Vector,因为该类型可以指定为自由文本请参见UML图中的“多重性”和“多重性元素” 基数 在属性名称后面键入一个或两个数字,间隔在方括号中,并用两个点连接 就一个: goalKeeper : Player [1..1] …或: goalKeeper :

我想问一下如何在类图中将集合(arrayList、vector)作为属性编写


因为当您想将变量添加为属性时,您可以像“+name:string”那样编写它,但它如何与vector一起工作呢?谢谢。

与您处理其他类型的方式相同,例如
+name:Vector
,因为该类型可以指定为自由文本

请参见UML图中的“多重性”和“多重性元素”

基数 在属性名称后面键入一个或两个数字,间隔在方括号中,并用两个点连接

就一个:

goalKeeper : Player [1..1]
…或:

goalKeeper : Player [1]
对于倍数,二到三:

forwards : Player [2..3]
使用星号表示开放式

  • 零或更多:
    [0..*]
  • 一个或多个:
    [1..*]
必须为零:
[0..0]
[0]

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

  • 有序
    无序
    (表示已排序)
  • 唯一
    非唯一
    (意思不同)
将这些值嵌套在大括号中,用逗号分隔

JAVA 你说:

我编写集合(arrayList、vector)

顺便说一句,永远不要使用。正如在文章中所指出的,这个遗留类在许多年前被取代

让我们看看这些属性是如何匹配的

Java应该是
{无序的,唯一的}
。Java或将是
{有序的,唯一的}
。Java将是
{有序的,非唯一的}
。至于最后一个组合
{unordered,ununique}
,没有这样的接口或实现与Java捆绑在一起;请参阅中的第三方解决方案

例子 回到您的一些实体的名称示例,说一个或多个按优先顺序列出的名称:

+ names: string [1..*] { ordered , unique }
属性名称应该是复数,例如这里的
名称
,而不是单数
名称

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

当您想要描述一个名称时,您所想到的只是一个名称是一个字符串,因此,您在类图中没有提到它是
StringBuilder
还是
StringBuffer
CharSequence
等等。您只提到
string
,这并不意味着类

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

总而言之,当你提到一个集合时,你需要提到的只是基数,而不是确切的实现类(比如
List
Set
Vector
等等),例如


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

很好的解释@阿文德库马拉维纳什,谢谢。请把这个问题投赞成票,因为它得到了不应有的反对票。我不喜欢看到新的投稿人问一个完全正确的问题时发生这种情况。@BasilBourque-投票结果也一样。我100%同意你的观点。在你的最后一个例子中,最好是编写
String
而不是
String
,参见UML规范2.5版第21章“基本类型”。@mtirtapradja ok,但值得一提的是,这意味着隐式或显式配置文件向(很少的)标准数据类型添加新的数据类型,因为UML规范第9.5.4节说类型必须是分类器的名称,而不是自由文本。我不理解投票结束,因为“需要细节或清晰”。对我来说似乎很清楚:如何在UML实体上编写一个属性来表示一组值,比如Java中的
ArrayList
history: History[0..*]