UML 关系类型:关联、依赖、泛化
什么是UML关系?
UML 中的关系 用于表示结构、行为或分组事物之间的联系。它也被称为链接,描述两个或多个事物在系统执行过程中如何相互关联。UML 关系的类型包括关联、依赖、泛化和实现。
让我们详细研究一下
UML 类图关系的类型
社区
它是连接 UML 模型元素的一组链接。它还定义了参与该关系的对象数量。
依赖
依赖关系,顾名思义,是指两个或多个元素相互依赖。在这种关系中,如果我们对某个元素进行更改,则所有其他元素也可能会受到该更改的影响。
推广
它也被称为父子关系。在泛化中,一个元素是另一个通用组件的特化。它可以替代它。它主要用于表示继承。
实现
在 UML 的实现关系中,一个实体表示一些不由其自身实现的责任,另一个实体则实现这些责任。这种关系主要出现在以下情况下 接口。
社区
它是一种结构关系,表示对象可以与系统内的另一个对象连接或关联。可以对关联关系应用以下约束。
- {隐式} – 隐式约束指定关系不是明显的;它基于概念。
- {已排序} – 有序约束指定关联一端的对象集处于特定方式。
- {多变} – 可改变的约束指定可以根据要求添加、删除和修改系统中各个对象之间的连接。
- {仅添加} – 它指定可以从位于关联另一端的对象添加新的连接。
- {冻结} – 它指定在两个对象之间添加链接时,当给定链接或连接上的冻结约束处于活动状态时,该链接不能被修改。
我们还可以创建一个具有关联属性的类;它被称为关联类。
反身联想
反身关联是 UML 中关联关系的一个子类型。在反身关联中,同一个类的实例可以相互关联。类的实例也称为对象。
反身关联指出链接或连接可以存在于同一类的对象中。
让我们考虑一个水果类的例子。水果类有两个实例,例如芒果和苹果。反身关联表明芒果和苹果之间可以存在联系,因为它们是同一类的实例,例如水果。
定向联想
顾名思义,有向关联与关联类内的流动方向有关。
在有向关联中,流是有向的。从一个类到另一个类的关联只沿一个方向流动。
它用带箭头的实线表示。
示例:
可以说,服务器和客户端之间存在有向关联关系。服务器可以处理客户端的请求。此流程是单向的,仅从服务器流向客户端。因此,系统的服务器和客户端之间可以存在有向关联关系。
依赖
使用 UML 中的依赖关系,可以关联特定系统内各种事物如何相互依赖。依赖关系用于描述 UML 中相互依赖的各种元素之间的关系。
定型
- «绑定» – 绑定是一种约束,它指定源可以使用提供的参数或值在目标位置初始化模板。
- “派生” – 表示可以根据目标物体计算出源物体的位置。
- “朋友” – 它指定源在目标对象中具有唯一的可见性。
- «实例» – 它指定目标分类器的实例是源对象。
- «实例化» – 它指定源对象能够创建目标对象的实例。
- «精炼» – 它指定源对象比目标对象具有特殊的抽象。
- “使用” – 在 UML 中创建包时使用。使用构造型描述了源包的元素也可以存在于目标包中。它描述了源包使用目标包的某些元素。
- “代替” – 指定在运行时可以用客户替代供应商。
- “使用权” – 指定源包访问目标包的元素 这也被称为私人合并。
- “进口” – 它指定目标可以导入源包的元素,就像它们在内部定义一样 目标也称为公共合并。
- “允许” — 指定无论供应商声明的可见性如何,源元素都可以访问供应商元素。
- “延长” – 帮助您指定目标可以扩展源元素的行为。
- “包括” – 允许您指定可在指定位置包含另一个元素的行为的源元素。(与 c/c++ 中的函数调用相同)
- “变得” – 它指定目标与源相似但具有不同的价值观和角色。
- “称呼” – 它指定源可以调用目标对象方法。
- “复制” – 它指定目标对象是独立的,是源对象的副本。
- «参数» – 供应商是客户操作的一个参数.
- “发送” - 客户端是向供应商发送一些未指定的目标的操作。
状态机之间的刻板印象
- “发送” – 指定源操作发送目标事件。
推广
它是系统内部存在的一般实体和独特实体之间的关系。
在泛化关系中,面向对象的概念称为 继承权 可以实现。两个对象之间存在泛化关系,也称为实体或事物。在泛化关系中,一个实体是父实体,另一个实体是子实体。这些实体可以使用继承来表示。
在继承中,任何父对象的子对象都可以访问、更新或继承父对象中指定的功能。子对象可以向自身添加其功能,也可以继承父对象的结构和行为。
这种类型的关系统称为泛化关系。
刻板印象及其限制
- “执行” – 此构造型用于表示子实体正在由父实体通过继承父对象的结构和行为来实现,但不违反规则。备注 这种刻板印象如果被广泛用于单一 继承权.
泛化关系包含完全、不完全等约束,以检查所有子实体是否都包含在关系中。
实现
在 UML 的实现关系中,一个实体表示一些不由其自身实现的责任,另一个实体则实现这些责任。这种关系主要出现在以下情况下 接口。
实现可以用两种方式来表示:
- 使用 规范形式
- 使用一年 省略形式
在上图中,账户业务规则实现了接口IRuleAgent。
实现类型
- 规范形式在 UML 的实现关系中,规范形式用于实现整个系统的接口。它使用接口原型来创建接口,使用实现关系来实现特定接口。在规范形式中,实现关系使用带有较大开口箭头的虚线有向线表示。在上图中,接口 Iruleagent 是使用称为帐户业务规则的对象实现的。
- 省略形式实现 UML 类图 也可以使用省略形式显示。在省略形式中,接口使用圆圈表示,也称为棒棒糖符号。当使用系统内部的任何内容实现此接口时,都会创建一个省略结构。在上图中,接口 Iruleagent 使用省略形式表示,由 acctrule.dll 实现。
组成成分
它不是标准的UML关系,但它仍然在各种应用程序中使用。
复合聚合是聚合关系的一种子类型,其特点是:
- 它是对象之间的双向关联。
- 这是一个整体/部分的关系。
- 如果删除了复合材料,则与其关联的所有其他部分也将被删除。
复合聚合被描述为在聚合(整体)端用实心黑色菱形装饰的二元关联。
文件夹是一种可容纳 n 个文件的结构。文件夹用于存储其中的文件。每个文件夹可以与任意数量的文件相关联。在计算机系统中,每个文件都是文件组织系统内至少一个文件夹的一部分。同一个文件也可以是另一个文件夹的一部分,但这不是强制性的。每当从文件夹中删除文件时,文件夹都不会受到影响,而与该特定文件相关的数据将被销毁。如果对文件夹执行删除操作,则它也会影响文件夹中存在的所有文件。一旦文件夹从系统中删除,与该文件夹关联的所有文件都会自动销毁。
UML 中的这种关系类型称为复合聚合关系。
聚合
An 聚合 是 UML 中关联关系的子类型。聚合和组合都是 UML 中关联关系的类型。聚合关系可以简单地描述为“一个类的对象可以拥有或访问另一个类的对象。”
在聚合关系中,即使源对象被破坏,依赖对象仍然保留在关系范围内。
让我们考虑一个汽车和车轮的例子。汽车需要车轮才能正常运转,但车轮并不总是需要汽车。它也可以用于自行车、自驾游或任何其他车辆,但不能用于特定的汽车。在这里,即使没有汽车对象,车轮对象也是有意义的。这种类型的关系称为聚合关系。
总结
- UML 中的关系允许一个事物与系统内的其他事物相关联。
- UML 定义了关联、依赖、泛化和实现关系。
- 组合关系也可以用来表示对象一次只能成为一个组合体的一部分。
- 关联用于描述一个对象可以与另一个对象相关联。
- 依赖性表示对象可以相互依赖。
- 实现是分类器之间的有意义的关系。
- 泛化也称为父子关系。