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中集合类型的两个关键特性就是唯一性与有序性,这两个特性的不同组合对应了不同的集合类型。我们可以归纳如下表:

相关推荐
okjohn16 小时前
浅谈需求分析与管理
java·架构·系统架构·软件工程·产品经理·需求分析·规格说明书
雾江流2 天前
DaVinci4.2.3 | 无限次AI图片生成,可以预制多种风格,提示限制清理数据重新进即可
软件工程
静心观复3 天前
drawio画java的uml的类图时,class和interface的区别是什么
java·uml·draw.io
郝学胜-神的一滴3 天前
使用Linux系统函数递归遍历指定目录
linux·运维·服务器·开发语言·c++·软件工程
逐步前行3 天前
C语言--数据类型
软件工程
王嘉俊9253 天前
软件工程原则:构建高质量软件的基石
软件工程
rengang663 天前
软件工程新纪元:AI协同编程架构师的修养与使命
人工智能·软件工程·ai编程·ai协同编程架构师
workflower3 天前
软件工程与计算机科学的关系
开发语言·软件工程·团队开发·需求分析·个人开发·结对编程
爱学习的uu3 天前
CURSOR最新使用指南及使用思路
人工智能·笔记·python·软件工程
雾江流4 天前
Olib 2.4.2 | 一款开源电子书下载软件,可以免梯免登录下载ZLibrary上的书籍
软件工程