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

相关推荐
Da_秀11 小时前
软件工程中耦合度
开发语言·后端·架构·软件工程
天若有情6731 天前
01_软件卓越之道:功能性与需求满足
c++·软件工程·软件
加密狗复制模拟1 天前
坚石ET ARM加密狗复制模拟介绍
安全·软件工程·个人开发
2501_916589451 天前
Excel 批量处理BatchXLS批量替换一键更新,告别逐个修改
电脑·软件工程·开源软件
2501_916589452 天前
棱光 PDF 工具箱:水印管理 + 格式转换 + 批量处理提升效率
电脑·软件工程·开源软件
文哥工具箱22 天前
免费文件管理 智能转换GC-Prevue:PDF 转 Word 多种格式 一键完成
电脑·软件工程·开源软件
张较瘦_2 天前
[论文阅读] 人工智能 + 软件工程 | 软件架构中自然问题主动辅助研究:从挑战到解决方案
论文阅读·人工智能·软件工程
世冠科技3 天前
第2期汽车模型数字工程沙龙,世冠科技分享汽车控制系统开发国产应用
科技·汽车·软件工程·工业软件·仿真系统
雾江流3 天前
LinkAndroid 0.6.0 | 支持多部手机同时连接的全能手机投屏工具
智能手机·软件工程
Clair-Sean3 天前
【软件工程】软件复刻项目的完整流程指南
软件工程