无论何时当我们要使用一个多值对象时,我们必须要清楚两个问题,一是这些值的顺序重要吗?二是允许重复值的存在吗?在编程语言中还会有其他的明确的信息,在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之集合类型的更多相关文章

  1. JAVA集合类型详解

    一.前言 作为java面试的常客[集合类型]是永恒的话题:在开发中,主要了解具体的使用,没有太多的去关注具体的理论说明,掌握那几种常用的集合类型貌似也就够使用了:导致这一些集合类型的理论有可能经常的忘 ...

  2. C#集合类型大盘点

    C#集体类型( Collections in C#) 集合是.NET FCL(Framework Class Library)中很重要的一部分,也是我们开发当中最常用到的功能之一,几乎是无处不在.俗话 ...

  3. Python学习笔记——集合类型

    集合类型有两种不同的类型——可变集合(set)和不可变集合(frozenset) 可变集合不是可哈希的,不能用作字典的键,也不能用做其他集合中的元素 不可变集合是有哈希值的,能被用做字典的键或者是作为 ...

  4. Spring中集合类型属性注入

    我们都知道如何去注入普通属性的值,非常简单,那么我们如何去注入开发中常见的集合类型的属性了,别急,往下看. 这里将介绍如何给Map list set Array Properties 这些属性注入值. ...

  5. Redis常用命令入门5:有序集合类型

    有序集合类型 上节我们一起学习了集合类型,感受到了redis的强大.现在我们接着学Redis的最后一个类型——有序集合类型. 有序集合类型,大家从名字上应该就可以知道,实际上就是在集合类型上加了个有序 ...

  6. Redis常用命令入门4:集合类型

    集合类型 之前我们已经介绍过了最基本的字符串类型.散列类型.列表类型,下面我们一起学习一下集合类型. 集合类型也是体现redis一个比较高价值的一个类型了.因为Redis的集合类型,所以我们可以很容易 ...

  7. Redis从基础命令到实战之有序集合类型(SortedSet)

    有序集合类型是Redis五种数据类型中最高级的.也是最复杂的类型.有序集合具有集合类型的特性,在其基础上给每个元素关联了一个分值,或称为权重,操作时既可以在添加元素时指定分值,也可以单独修改集合中某一 ...

  8. Redis从基础命令到实战之集合类型(Set)

    Redis集合类型的基础功能也是存储字符串列表,和列表类型的区别是字符串不能重复且没有顺序.当然,存储元素唯一性也可以通过应用程序保证,单从这一点上并没有体现出对比列表类型的特点. 其实,集合类型的一 ...

  9. 浅谈Swift集合类型

    Swift 的集合表现形式由数组和字典组成.它可以完美的存储任何呢想存储的东西. 数组是一个同类型的序列化列表集合,它用来存储相同类型的不同值.字典也是一个数组,但它的存值方式类似于Map,通过一对一 ...

  10. 【Swift学习】Swift编程之旅---集合类型之数组(六)

    swift提供了3种主要的集合类型,array,set,dictionary.本节介绍array. 数组是存储有序的相同类型的集合,相同的值可以多次出现在不同的位置. 注意: swift的Array类 ...

随机推荐

  1. ARM 版 OpenEuler 22.03 部署 KubeSphere v3.4.0 不完全指南

    作者:运维有术 前言 知识点 定级:入门级 KubeKey 安装部署 ARM 版 KubeSphere 和 Kubernetes ARM 版 KubeSphere 和 Kubernetes 常见问题 ...

  2. .NET 开源扁平化、美观的 C/S 控件库

    前言 给大家推荐一个优秀的控件集,它基于 .NET Framework 4.0,采用纯原生开发,不包含任何第三方插件或类库. 该控件集涵盖了常用的窗体和控件,同时还包括工业工具和类 Web 控件.使用 ...

  3. CSS动画(登录页面)

    1.整体效果 https://mmbiz.qpic.cn/sz_mmbiz_gif/EGZdlrTDJa6Pfop3IiakrZOtiaiaKniaxeH2Gs407DmkXPsMo8AFKdsYib ...

  4. SpringBoot学习 _02 _配置单数据源(1)

    SpringBoot学习 _02 _配置单数据源(1) 1.通过IDEA创建SpringBoot项目 直接到选择依赖这一步,选择如图所示的 五个依赖即可 2.配置文件的编写 此处说明一下,这个数据库连 ...

  5. Python获取jenkins job信息

    pip install Python-jenkins  如果只是想获取到jenkins的全局变量(比如job url),使用jenkins全局变量就能做到. https://www.jb51.net/ ...

  6. 0基础读顶会论文—Kappa:一种用于无服务器计算的编程框架

    原文链接 代码:快速使用kappa 首先的首先,可以先去了解一下lambda架构 Abstract 在本文中提出了Kappa,一个简化无服务器开发的框架.它使用检查点来处理lambda函数超时,并提供 ...

  7. mysql skip-name-resolve 的解释

    PHP交流群  717902309 为PHP广大爱好者提供技术交流,有问必答,相互学习相互进步! mysql连接很慢,登陆到服务器上查看mysql日志:IP address 'XX.XX.XX.XX' ...

  8. 2023NOIP A层联测22 T2 差后队列

    2023NOIP A层联测22 差后队列 挺有意思的期望题,题解做法应该是 DP,但是我又双叒写出奇怪的做法-- 思路 除去最大值外的元素个数的倒数就是这一轮取到某个数的概率,而最大值是特殊的情况,在 ...

  9. ElementUI ---- dialog点击取消后蒙遮层不消失

    场景: 页面A打开了 dialog, 然后点击 页面A dialog 的按钮 跳转到 页面B,并且打开页面B的 dialog 但是页面B的 dialog 关闭后,蒙遮层并没消失(已经设置了 :appe ...

  10. LinkedHashMap源码分析(基于JDK1.6)

    LinkedHashMap类似于HashMap,但是迭代遍历它时,取得"键值对"的顺序是插入次序,或者是最近最少使用(LRU)的次序.只比HashMap慢一点:而在迭代访问时反而更 ...