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

UML之集合类型的更多相关文章
- JAVA集合类型详解
		一.前言 作为java面试的常客[集合类型]是永恒的话题:在开发中,主要了解具体的使用,没有太多的去关注具体的理论说明,掌握那几种常用的集合类型貌似也就够使用了:导致这一些集合类型的理论有可能经常的忘 ... 
- C#集合类型大盘点
		C#集体类型( Collections in C#) 集合是.NET FCL(Framework Class Library)中很重要的一部分,也是我们开发当中最常用到的功能之一,几乎是无处不在.俗话 ... 
- Python学习笔记——集合类型
		集合类型有两种不同的类型——可变集合(set)和不可变集合(frozenset) 可变集合不是可哈希的,不能用作字典的键,也不能用做其他集合中的元素 不可变集合是有哈希值的,能被用做字典的键或者是作为 ... 
- Spring中集合类型属性注入
		我们都知道如何去注入普通属性的值,非常简单,那么我们如何去注入开发中常见的集合类型的属性了,别急,往下看. 这里将介绍如何给Map list set Array Properties 这些属性注入值. ... 
- Redis常用命令入门5:有序集合类型
		有序集合类型 上节我们一起学习了集合类型,感受到了redis的强大.现在我们接着学Redis的最后一个类型——有序集合类型. 有序集合类型,大家从名字上应该就可以知道,实际上就是在集合类型上加了个有序 ... 
- Redis常用命令入门4:集合类型
		集合类型 之前我们已经介绍过了最基本的字符串类型.散列类型.列表类型,下面我们一起学习一下集合类型. 集合类型也是体现redis一个比较高价值的一个类型了.因为Redis的集合类型,所以我们可以很容易 ... 
- Redis从基础命令到实战之有序集合类型(SortedSet)
		有序集合类型是Redis五种数据类型中最高级的.也是最复杂的类型.有序集合具有集合类型的特性,在其基础上给每个元素关联了一个分值,或称为权重,操作时既可以在添加元素时指定分值,也可以单独修改集合中某一 ... 
- Redis从基础命令到实战之集合类型(Set)
		Redis集合类型的基础功能也是存储字符串列表,和列表类型的区别是字符串不能重复且没有顺序.当然,存储元素唯一性也可以通过应用程序保证,单从这一点上并没有体现出对比列表类型的特点. 其实,集合类型的一 ... 
- 浅谈Swift集合类型
		Swift 的集合表现形式由数组和字典组成.它可以完美的存储任何呢想存储的东西. 数组是一个同类型的序列化列表集合,它用来存储相同类型的不同值.字典也是一个数组,但它的存值方式类似于Map,通过一对一 ... 
- 【Swift学习】Swift编程之旅---集合类型之数组(六)
		swift提供了3种主要的集合类型,array,set,dictionary.本节介绍array. 数组是存储有序的相同类型的集合,相同的值可以多次出现在不同的位置. 注意: swift的Array类 ... 
随机推荐
- 6.19 成都站云原生 Meetup,KubeSphere 和 APISIX 等你来!
			以容器技术和容器编排为基础的云原生应用,被越来越多的企业用户接受和使用,并且在生产环境中使用容器技术的比例逐年增加.KubeSphere 作为一款面向应用的开源容器混合云,经过 3 年的发展和 10 ... 
- 云原生周刊:使用 ChatGPT 提高安全性
			虽然 ChatGPT 最近因网络犯罪分子使用该技术加强攻击而成为负面新闻,但它也可以成为网络防御的强大资产,帮助公司最大限度地提高安全态势,同时弥合其员工的技能差距. 云安全联盟 (CSA) 最近发布 ... 
- C语言模拟算法
			文章目录 1.数据结构 1.1基于数组 1.2 基于字符串 1.3基于链表 1.4基于矩阵 2.算法技巧 2.1.排序 2.2.递归 2.3.迭代 3.实战 3.1 力扣面试题16.01 交换数字 3 ... 
- 经验总结之 _DEBUGGER _01 _Invalid coercion null-node{} as xsstring _20210909
			经验总结之 _DEBUGGER _01 _Invalid coercion null-node{} as xsstring _20210909 今天喜提一个bug,报错情况如下: 该项目使用的是 sp ... 
- Computersystemsicherheit学习笔记
			1.Verlässliche System 1.1 Security和Safety的区别 1.2 Fault,Error和Failure的区别 举例如下: 1.3 Verfügbarkeit 例题: ... 
- "(UE4Editor.exe中)处有未经处理的异常:0xC0000005:读取位置0x0000000000000000时发生访问冲突"报错情况+解决方法+原因分析
			报错情况:使用ue4.27 Slate编写Widget时想通过获取Worl(通过本地PlayerController获取)来实现"设置定时任务为在音乐结束后自动触发函数"的功能 p ... 
- 干货分享:Air780E软件指南:字符串处理
			一.Lua字符串介绍 关于字符串,Lua提供了一些灵活且强大的功能,一些入门知识如下: 1.1 字符串定义 在Lua中,字符串可以用单引号'或双引号"来定义.例如: localstr1='H ... 
- 想要硬件设计不用愁?首先要搞懂这三类GPIO!
			合宙低功耗4G模组经典型号Air780E,支持两种软件开发方式: 一种是传统的AT指令:一种是基于模组做Open开发. 传统AT指令的开发方式,合宙模组与行业内其它模组品牌在软件上区别不大,在硬件功耗 ... 
- 只有ip地址没有域名怎么申请https证书
			只有IP地址没有域名,如何申请HTTPS证书? 在日常生活中,我们通常会为网站的域名申请HTTPS证书,以保护用户的数据安全.然而,有时候你可能需要为一个只有IP地址的服务或设备申请HTTPS证书. ... 
- 推荐手绘工具神器Excalidraw素描草图风格白板,支持AI-开源免费
			推荐手绘工具神器Excalidraw素描草图风格白板,支持AI-开源免费 原创 IT软件部落 IT软件部落 Excalidraw 一个开源的虚拟手绘风格的白板,是一个很好的素描工具.它真的很容易使用, ... 
