UML之关联
关联指两个类之间的各种联系。UML使用各种单实线表示关联,这个单实线可以是直线(垂直的、水平的或者倾斜的)、折线甚至曲线。
事实上,关联也是展示类的属性的另一外的一种形式。例如在下图中,我们通过一条实线连接类Book和类Person,表示它们之间存在关联。在关联的末端,标出多重性[*]和关联端名称(通常称为“角色名称”)author。

从上图中我们可以看到关联端名称(角色名称)author是类Book的一个属性。
在上图中,类Book的属性author在类Book的属性描述中和关联的角色名称中同时出现了。一般情况下,我们不会同时使用这两种形式,它可能会带来混淆并且带来了冗余,故可将上图中类Book的属性author删除掉,以下图的形式表示即可。

上图有两种解读方法:
一本书(Book)有多位作为作者(author)的人(Person)。
或
一本书(Book)有一组由多个人(Person)组成的作者(author)。
1.属性和角色修饰符
在类图中,我们可以为属性添加一些修饰符以表达对属性的约束。类属性的表达方式与角色名称的表达方式都是表达源端类的属性信息的手段,故在使用角色名称时,同样也可以通过修饰符对角色名称进行约束。
例如在下图中,我们为角色名称author添加ordered和readOnly属性。这些属性被包含在一对大括号中(大括号表示约束)。

此时,上图可以解读为:
一本书(Book)有一个由多个人(Person)组成的只读的、有序的作者(author)集合。
或
一本书(Book)有一个由多位担任作者(author)角色的人(Person)组成的只读的、有序的集合。
我们几乎可以将能赋予属性的所有内容都赋予关联端。下表展示了属性几乎所有可用的修饰元素。
在表格中,给出了这些修饰元素的符号表示以及其多重性,即该符号可以出现的次数。0..1表示这是一个可选符号;0..*表示该符号可以根据需要出现多次。表格中各表示元素的顺序也是它们在表示时所应采取的大致顺序。

注:上述表格是不完整的,但它已经覆盖了大多数情况。
而下表则是关联端(角色名称)可以使用的修饰元素,在这个表格中也给出了修饰元素的符号表示以及其多重性,同时也给出了使用修饰符时其所处的位置。

关联具有表征类与其属性之间关系双向性的优势。当属性是一个类(而非数据类型)时,使用关联形式最为常见。各个类(或数据类型)可以进一步与类相连接,而图表则展示了它们之间关系的更完整图景。
当然,一个类也可以同时与多个类产生关联。例如对于类Person,它既可以是类Book的author,也可以是Score的composer,此时这两个关联可以用下图进行表示。

2. 解读关联
在上述说明中,我们由类Book关联到类Person、由类Score关联到类Person。但关联是两个相关类的关系,故而也应当可以由类Person关联到类Book、由类Person关联到类Score。因此,我们也可以考虑在关联的另一端提供关联端装饰。
在下图中,同时给出了两个方向的关联信息。

上图中的关联的可以分别解读为如下:
- 一本书(Book)有一个由多个人(Person)组成的有序的作者(author)集合。
- 一个人(Person)有一个由多本书(Book)组成的我的书籍(myBooks)集合。
- 一个乐谱(Score)有一个由多个人(Person)组成的有序的作曲家(composer)集合。
- 一个人(Person)有一个由多个乐谱(Score)组成的我的乐谱(myScore)集合。
当阅读一个关联关系时,从一侧开始(源侧),但只读另一侧(目标侧)上的修饰符。目标侧是远离开始端的那一侧,源侧是靠近开始端的那一侧。
请特别注意,上述关联中所涉及的名称是关联端(角色)名称,而关联关系本身也可以拥有名称,关联关系的名称独立于两端的关联端名称(角色名称),也独立于两端类或类型的名称。这些名称通常使用动词形式,例如下图中所使用的名称是“is authored by”。当为关联提供名称时,通常采用从左向右或者从上到下的形式书写。

在阅读一个关联关系时,总是以“一个”“某个”“每个”或类似的词开始,多重性只在目标侧读取,而源侧的多重性和修饰符被忽略掉。
上图是对从一本书(A Book)到多个人(many Persons)以及从一个人(A Person)到多本书(many Books)的关系进行建模。这种解读是基于关联关系与属性之间的等价性。由于属性仅是实例的属性,因此目标侧的关联端点也仅是实例的属性。
Book --> Person:一本书(Book)由多个人(Person)组成的有序的作者(author)[集合]所著。
当你反向阅读时,通常需要将动词形式从主动语态改为被动语态,或者反之。
Person --> Book:一个人(Person)有一个由多本书(Book)组成的我的书籍(myBooks)[集合]。
在下图中,关联被命名为“authors”,这是“to author”现在时第三人称主动形式。当反向阅读时,则需要使用被动形式“is authored by”。这里我们使用了另一种表示法,即使用了阅读方向指示符►或◄,这个三角形指示了关联名称预期的阅读方向。这个指示符在绘制图表(如改变关联方向)时很有用,但由于它可能需要手动维护三角形的方向而增加了困难。

下表给出了关联关系所可能使用的属性及其说明。

回顾上述说明,我们可以发现其实两个类之间可以存在多个关联,例如上例中,Person既可能是Book的author,也可能是Book的editor。此时可以描述两个关联关系,并分别描绘其关联端名称(角色名称)及关联名称等信息。但要注意的是,角色名称会被映射为属性名称,受限于在同一个类的命名空间中不允许有两个同名属性的规定,在两个类之间存在多个关联时其角色名称也不可以重复。但在使用工具描绘关联时,角色名称可以为空,此时工具会为它们生成不透明的不同名称。
3. 关联和数据类型
正如我们上文所讨论的,可以将属性表示为关联。在前述示例中,我们讨论了类型为类(例如Book、Person或Score)的属性及其工作方式。当属性为数据类型时,通常只对从源类到目标数据类型的单向关联建模,除此之外,其他都基本相同。另外,在目标是数据类型的情况下,一般也不会使用关联名称。例如,对于Book的pages属性而言,可以通过下图所示的关联表示。

4. 链接和实例
前文关联都是在类图中进行描绘,在对象图(实例图)中,也有类似的场景。我们只需使用实例代替类,用链接代替关联即可,如下图所示。

按UML规范,实例名称会带有下划线,实例之间的链接名称也应带有下划线,但与实例名称不同,链接名称的下划线是可以省略的。
特别提醒一点,链接上是不会显示多重性的,因为在对象图的链接中每一侧总是只有一个实例,多重性需要通过对多个实例建立多条链接来体现。
UML之关联的更多相关文章
- uml的关联多重度
UML中关联的多重度是指一个类的实例能够与另一个类的多少个实例相关联,这个“多少”被称为关联角色的多重度指定关联一端的多重度.也可以这样理解:在关联另一端的类的每个对象要求在本端的类必须有多 少个对象 ...
- UML的关联(Association), 聚合(Aggregation), 组合(Composition)区别
转载:http://blog.csdn.net/ocean181/article/details/6117369 UML的关联(Association), 聚合(Aggregation), 组合(Co ...
- UML中关联(Association)、聚合(Aggregation)和合成(Composition)之间的区别
本文为 Dennis Gao 原创技术文章,发表于博客园博客,未经作者本人允许禁止任何形式的转载. 现在,我们需要设计一个项目管理系统,目前我们收集到了如下这些需求: REQ1:一个项目内有多名项目成 ...
- UML中关联(Association)和依赖(Dependency)的区别
原文转自:http://blog.csdn.net/metasearch/article/details/2334853 在UMLCHINA精华区,看到了一些关联和依赖的讨论,似乎越讲越糊涂.我想谈一 ...
- 【UML】关联、依赖、泛化、实现等关系说明
导读:再上一篇博客中,介绍了UML的9种图,现在,将对UML中的关系进行总结.图很重要,但图形中的各种关系也很重要,这扯关系的事儿,从来都是大事儿. 一.基本定义 1.1 总体说明 1.2 具体定义 ...
- UML学习总结
UML中的4+1模型 UML的4+1模型是一个叫Kruchten的人发明的,但网上还有其它版本的4+1 模型:Use case view, Logic view, Process view, Impe ...
- 【UML】UML基础知识
UML简介 统一建模语言(UML)是一个通用的可视化建模语言,用于对软件进行描述.可视化处理.构造和建立软件系统制品的文档. 它记录了对必须构造的系统的决定和理解,可用于对系统的理解. ...
- 【建模】UML类关系分析
一.UML类关系分析 1.关联(asociation) 一般是一方拥有另一方对象的指针.箭头的方向是访问方向. 2.聚合(Aggregation)和组合(Composition) 聚合和关联一般不做区 ...
- UML学习归纳整理
转载自:https://www.jianshu.com/p/83afa19c5096 写在前面 之前在学校比较系统的学习过统一建模语言UML,但长时间没使用遗忘了许多,最近因工作需要,所以对UML重新 ...
- 设计模式学习笔记(二):UML与面向对象设计原则
1 UML 1.1 UML UML(Unified Modeling Language)是统一建模语言,1997年11月UML1.1版本提交给OMG并正式通过,成为建模语言的个那个也标准.2003年6 ...
随机推荐
- KubeSphere 社区双周报|2024.02.29-03.14
KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书.新增的讲师证书以及两周内提交过 commit 的贡献者,并对近期重要的 PR 进行解析,同时还包含了线上/线下活动和布道推广等一系列 ...
- 负载均衡器 OpenELB ARP 欺骗技术解析
作者:大飞哥,视源电子运维工程师,KubeSphere 用户委员会广州站站长,KubeSphere Ambassador. K8S 对集群外暴露服务有三种方式:NodePort,Ingress 和 L ...
- 云原生爱好者周刊:PromLabs 开源 PromQL 可视化工具 PromLens
开源项目推荐 PromLens PromLabs 开源了旗下的 PromQL 可视化工具 PromLens,它可以通过图形化的方式展示 PromQL 的语法特征,对相关查询参数进行解释,并提供告警和常 ...
- [MySQL] MySQL数据库中唯一标识符(ID)的梳理总结
0 引言 mysql 数据库中有各类id,在近期初步研究 flink cdc .debezium.mysql server id.server uuid.gtid.sesion id/connecti ...
- FFmpeg开发笔记(五十八)把32位采样的MP3转换为16位的PCM音频
<FFmpeg开发实战:从零基础到短视频上线>一书的"5.1.2 把音频流保存为PCM文件"介绍了如何把媒体文件中的音频流转存为原始的PCM音频,在样例代码的转存过 ...
- ToDesk云电脑实测!轻松应对游戏电竞、AIGC创作、设计建模等场景
万物智联时代,现代社会对数字计算的需求呈指数级增长.当算力成为推动技术创新和应用发展的重要引擎,云电脑产业正在悄然占据国内算力应用的市场,成为新时代的数字经济发展方向.1 云电脑,顾名思义,是一台随时 ...
- .NET周刊【10月第3期 2024-10-20】
国内文章 我被 .NET8 JIT 的一个BUG反复折磨了半年之久(JIT tier1 finally optimizations) https://www.cnblogs.com/calvinK/p ...
- @RequestBody注解转对象中驼峰格式的参数无法接收到数据的问题解决方法
1.问题:驼峰格式的参数传递到后端,@RequestBody注解标注的实体对象参数没有接收到对应的数据 前端传参:执行结果:请求参数实体: import lombok.Data; /** * 请求参数 ...
- .NET 平台 WPF 通用权限开发框架 (ABP)
前言 对于大多数.NET后端开发者而言,ABP框架已经相当熟悉,可以轻松进行二次开发,无需重复实现用户角色管理.权限控制.组织管理和多租户等功能. 然而,ABP框架主要专注于Web应用,对于桌面端和移 ...
- JS中如何获取当前日期,并与输入日期作比较
首先我们获取到"2020-5-5"类型的值 通过Date函数转换 var inputDate = new Date(Date.parse(realTimeEnd)); 获取当前时间 ...