UML之集合类型

无论何时当我们要使用一个多值对象时,我们必须要清楚两个问题,一是这些值的顺序重要吗?二是允许重复值的存在吗?在编程语言中还会有其他的明确的信息,在UML中,只需明确这两个问题的答案即可确定对应的集合类型。

1.Set

Set是一个不允许存在重复值且未排序的集合。

例如一个骑行活动中,有许多骑手参加。每个骑手在一个骑行活动中只可能出现一次,即任一个特定的骑手在骑行活动中不可能重复出现;每个参与骑行活动的骑手之间没有什么特定或要求的顺序,他们是平等的。所以参与一个骑行活动的骑手不重复且无序,这些骑手就构成了一个Set。在类图中可表示如下:

在UML中,Set并没有专有的表示符号,它通过在多重性后添加表示不允许重复只能唯一的约束"{unique}"来表达。"unique"用于对集合中元素的唯一性进行约束,"{unique}"还有等价形式"{isunique=true}"。

2.Ordered Set

Ordered Set是一个不允许存在重复值且排序的集合。

例如一本书的作者可能有多人,而每位作者对一本书的贡献是不同的,所以书籍在出版时,一方面不会将一个作者列出来两次,另一方面作者的排序是非常重要的,即一本书的作者是不重复且有序的集合,他们构成了一个Ordered Set。以下类图中的属性author表达了这种特性。

在UML中,Ordered Set没有专有的表示符号,它通过在多重性后添加表示不允许重复并排序的的约束"{ordered, unique}"来表达。其中"ordered"表示集合是有序的,"{order}"也有一个等价形式"{isorder=true}"。

3.Bag

Bag是一个允许存在重复值且未排序的集合。

例如一个购物车中的商品,同一件商品可能会有多个,并且这些商品之间没有顺序可言,这些商品构成了一个Bag。

在UML中,Bag也没有专有的表示符号,它通过在多重性后添加表示允许重复(不唯一)、无序(不排序)的约束"{nonUnique, unordered}"来表达。在一些UML工具中,通常只支持添加"{unique}"和"{order}"约束,而缺省情况下,即未添加相关约束则表示相反的情况。故对于一个多重性条目,如果它是Bag,则不添加"{unique}"和"{order}"约束即可。

以下类图中属性items体现了它是一个Bag。

4.Sequence

Sequence是一个允许存在重复值且排序的集合,又称为Ordered Bag。

例如一个骑行活动的线路规划由多个点构成,而线路并不排斥两次甚至多次经过同一地点,但在线路上这些地点是有严格顺序的,所以骑行线路上的这些点构成了一个Sequence。在以下类图中属性itinerary描述了骑行线路。

在UML中,Sequence也没有专有的表示符号,它通过在多重性后添加表示不唯一且有序的约束来表达,如前所述,不标明唯一约束则表示不唯一,故仅使用约束"{ordered}"即可。或者,也可直接使用约束"{sequence}"或"{seq}",在某些情况下,"{stream}"表达了相似的含义。

可以看到,在UML中集合类型的两个关键特性就是唯一性与有序性,这两个特性的不同组合对应了不同的集合类型。我们可以归纳如下表:

相关推荐
roman_日积跬步-终至千里2 天前
AI 能让一个人成为团队吗?从数据中台到 OPC,重新理解软件工程能力
大数据·人工智能·软件工程
金銀銅鐵2 天前
从一个类名到一张类图:用反射自动生成 PlantUML
java·后端·uml
陈工大模型5 天前
2026年11月最新免费解压软件横评:7-Zip 、 Win解压缩名列前茅
windows·软件工程·7-zip·压缩软件
深圳行云创新6 天前
智能体架构之争:单Agent加Skills,还是多加几个Agent
人工智能·架构·软件工程
长不大的杨瑞杰6 天前
OpenCode v2 配置工程实战:Config 优先级、JSONC、变量替换与多环境治理
人工智能·安全·云计算·软件工程·devops
国际学术会议-杨老师6 天前
2027年软件工程、机电一体化与智能控制国际会议(SEMIC 2027)
软件工程·机电一体化·智能控制
Warren2Lynch7 天前
C4 模型详解:利用 Visual Paradigm 可视化软件架构的综合指南
开发语言·uml
樱花落木兰7 天前
Redis 消息队列的可靠性演进:从 List、Pub/Sub 到 Stream 消费者组,以及 8.x 版本改变了什么
java·开发语言·经验分享·redis·分布式·python·软件工程
lifallen8 天前
ub-mode skill:软件工程原则
人工智能·学习·ai·软件工程·ai编程
rolt8 天前
[鉴赏]02 DHH-摇身一变鼓吹软件工程
人工智能·软件工程·uml