UML 关联与聚合与组合 [示例]
UML 图中的关系用于表示各种事物之间的连接。关系是统一建模语言中事物(如结构、行为或分组事物)之间的连接。
以下是 UML 中不同类型的标准关系:
- 关联
- 依赖性
- 泛化
- 实现
除了这些之外,UML 还允许使用聚合和组合关系。
UML 关联
它是一种结构关系,表示对象可以连接到系统内的另一个对象。以下约束可以应用于 UML 关联关系:
- {implicit} – 隐式约束指定关系不明显;它基于概念。
- {ordered} – 有序约束指定关联一端的对象集合以特定方式排列。
- {changeable} – 可变约束指定系统中各种对象之间的连接可以根据需求添加、删除和修改。
- {addOnly} – 它指定可以从关联另一端的对象添加新连接。
- {frozen} – 它指定当在两个对象之间插入链接时,在给定链接或连接上冻结约束处于活动状态时,它不能被修改。
我们还可以创建一个具有 UML 关联属性的类,称为关联类。
自关联
自关联是 UML 中关联关系的一个子类型。在自关联中,同一类的实例可以相互关联。类的实例也被称为对象。
自关联规定,链接或连接可以存在于同一类的对象之间。
示例:
让我们以 Fruit 类为例。
Fruit 类有两个实例,例如 mango 和 apple。自关联规定,mango 和 apple 之间可以存在链接,因为它们是 Fruit 等同一类的实例。
定向关联
顾名思义,定向关联与关联类中的流动方向有关。
在定向关联中,流是定向的。从一个类到另一个类的关联仅沿一个方向流动。
它用带箭头的实线表示。
UML 关联示例:
可以说服务器和客户端之间存在定向关联关系。
服务器可以处理客户端的请求。这种流是单向的,仅从服务器流向客户端。因此,服务器和客户端之间可以存在定向关联关系。
UML 组合
它不是标准的 UML 关系,但它仍在各种应用程序中使用。
复合聚合是具有以下特征的聚合关系的一个子类型:
- 它是对象之间的双向关联。
- 它是整体/部分关系。
- 如果删除了复合体,与之关联的所有其他部分也会被删除。
复合聚合被描述为在聚合(整体)端带有一个实心黑色菱形的二元关联。
文件夹可以包含许多文件,而每个文件恰好有一个文件夹父级。如果删除了文件夹,则包含的所有文件也会被删除。
在复合聚合中,一个对象一次只能成为一个复合体的一部分。
UML 组合示例:
例如,在窗口系统中,一个 Frame 属于且仅属于一个 Window。在复合聚合中,整个系统负责其部分的处置,这意味着复合体必须管理其部分的创建和销毁。
UML 聚合
聚合是 UML 中关联关系的一个子类型。聚合和组合都是 UML 中关联关系的一种类型。聚合关系可以用简单的话来说明为“一个类的对象可以拥有或访问另一个类的对象”。
在聚合关系中,即使源对象被销毁,依赖对象也仍然在关系的作用域内。
UML 聚合示例:
让我们以汽车和车轮为例。
汽车需要车轮才能正常运行,但车轮并不总是需要汽车。它也可以与自行车、单车或任何其他车辆一起使用,但不是特定的汽车。在这里,车轮对象在没有汽车对象的情况下仍然有意义。这种关系称为 UML 聚合关系。
关联与聚合与组合
关联 | 聚合 | 组合 |
---|---|---|
关联关系用箭头表示。 | 聚合关系用在其中一端带有空心箭头的直线表示。 | 组合关系用在其中一端带有实心箭头的直线表示。 |
关联可以存在于 UML 中的两个或多个类之间。 | 聚合是关联关系的一部分。 | 组合是关联关系的一部分。 |
关联类之间可以存在一对一、一对多、多对一和多对多的关联。 | 聚合被认为是弱类型的关联。 | 组合被认为是强类型的关联。 |
在关联关系中,一个或多个对象可以相互关联。 | 在聚合关系中,相互关联的对象可以在没有彼此的情况下留在系统的作用域内。 | 在组合关系中,相互关联的对象不能没有彼此而留在作用域内。 |
对象相互链接。 | 链接的对象不依赖于其他对象。 | 对象高度相互依赖。 |
在 UML 关联中,删除一个元素可能会影响也可能不会影响另一个关联元素。 | 在 UML 聚合中,删除一个元素不会影响另一个关联元素。 | 在 UML 组合中,删除一个元素会影响另一个关联元素。 |
示例 老师与多个学生相关。 或者 老师向学生提供指导。 |
示例 汽车需要车轮,但并不总是需要同一个车轮。汽车也可以与其他车轮正常运行。 |
示例 文件放在文件夹中。如果删除文件夹,则与该文件夹关联的文件也会被删除。 |
摘要
- 关系是事物之间的连接。
- 关联、依赖、泛化和实现是 UML 提供的各种关系。
- 除了标准关系外,UML 还使用组合和聚合。
- 聚合和组合都是 UML 中关联关系的一种类型。
- UML 组合是一种双向关系,也称为二元关系。
查看我们关于最佳 UML 工具的文章:- 点击这里