首页 > 其他分享 >UML之集合类型

UML之集合类型

时间:2024-12-28 11:53:04浏览次数:8  
标签:Set 重复 Bag 类型 集合 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中集合类型的两个关键特性就是唯一性与有序性,这两个特性的不同组合对应了不同的集合类型。我们可以归纳如下表:
image

标签:Set,重复,Bag,类型,集合,UML,骑行
From: https://www.cnblogs.com/gtyan/p/18637336

相关文章

  • IPv6的地址类型
    IPv6地址总长度为128bit,被分为8组,每组为4个十六进制数,用冒号分隔:例如:FC00:0123:4567:8901:ABFD:0987:0000:0023可缩写为:FC00:0123:4567:8901:ABFD:0987::23IPv6中取消了v4中的广播,新增了任意播......
  • java面试题-集合篇
    Collection1.Collection有哪些类?Java集合框架中的Collection接口是所有集合类的基础接口,定义了一些基本的集合操作,如添加元素、删除元素、判断是否包含某个元素等。常见的集合类包括List、Set和Queue。ListList接口定义了按照索引访问和操作元素的方法。它允许元素重复,......
  • 《c和指针》第17章 经典抽象数据类型
    第17章经典抽象数据类型17.1内存分配在实现抽象数据类型(ADT)时,内存分配是一个关键问题。对于复杂的数据结构,如堆栈、队列和树,需要动态分配内存来存储数据元素。在C语言中,通常使用malloc、calloc和realloc函数来进行动态内存分配。malloc函数用于分配指定字节数的内......
  • uml类图总结
    类图用于描述系统的静态结构,通过展示类、接口及其之间的关系,以便理解和设计系统类图的基本元素1.类(Class):类通常使用矩形框表示,其中包含三部分:类名、属性和方法。示例: 2.接口(Interface):表示方法类似类,但是会在矩形框顶部加上<<interface>>标识示例: 3.......
  • uml上机实验 4
    一实验目的 理解顺序图、协作图、活动图、状态机图的概念及其在系统分析设计中的作用; 了解和掌握软件工程中用例逻辑时序的分析方法; 掌握两种交互图(顺序图和协作图)的差别; 掌握描述一个操作执行过程中所完成工作(动作)的方法; 掌握描述对象内部工作的具体步骤; 掌握使用Rational......
  • uml上级实验 5
    一实验目的 了解系统物理体系结构模型和表示方法; 了解部署图的概念及其在系统设计中的作用; 掌握使用RationalRose绘制部署图的方法;二实验环境及实验准备 所需硬件环境为微机; 所需软件环境为RationalRose、MiscrosoftWord等; 熟悉RationalRose下部署图模型建模的方法和......
  • JAVA-Day 03:数据类型
    数据类型Java的数据类型分为两大类,分别是基本类型(primitivetype)和引用类型(referencetype)。基本数据类型(PrimitiveType)分为数值类型和boolean(布尔)类型数值类型整数类型byte型占1个字节范围:-128~127如图所示:short型占2个字节范围:-32768~32767如图所示:......
  • Redis-十大数据类型
    Reids数据类型指的是value的类型,key都是字符串redis-server:启动redis服务redis-cli:进入redis交互式终端常用的key的操作redis的命令和参数不区分大小写,key和value区分1、查看当前库所有的keykeys*2、判断某个key是否存在existskey3、查看key是什么类型......
  • java 多线程处理list集合数据的实例应用
    众所周知创建线程的三种方式:继承Thread,重写run方法实现Runnable接口,重新run方法实现Callable接口,重写call方法下面使用Callable,来说一下为什么使用1.Thread类和Runnable接口都不允许声明检查型异常,也不能定义返回值。没有返回值这点稍微有点麻烦。不能声明抛出检查型异常则......
  • UML之属性与参数的多重性
    在UML中,多重性是指一个条目潜在的数量范围。多重性可被用于属性、操作参数、关联关系。UML元模型也使用多重性对元模型元素之间的关系进行约束。多重性总是包含基数值,它是相关条目在现实世界中的确切数量。本文将说明类属性和类操作参数的多重性。一、属性的多重性假设我们需要......