UML中合成 聚合 关系的区别

前端之家收集整理的这篇文章主要介绍了UML中合成 聚合 关系的区别前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我们给出 UML 中的相关定义:

元素名称 符号图例 含义
Association

082337371241054.png

A 和 B 相互调用和访问对方的元素。

A and B call and access each other’s elements.

Aggregation

082338012654178.png

A 中拥有一个 B,但 B 脱离于 A 仍然可以独立存活。

A has a B,and B can outlive A.

A "uses" B = Aggregation : B exists independently (conceptually) from A.

Composition

082338094143285.png

A 中拥有一个 B,B 脱离 A 后在系统中没有任何存活的意义。

A has a B,and B depends on A.

A "owns" B = Composition : B has no meaning or purpose in the system without A.

我们可以从不同的角度来理解和区分这三种关系:


Association Aggregation Composition
Owner No owner

Single owner

Single owner

Lifetime Have their own lifetime

Have their own lifetime

Owner's lifetime

Child Object Child objects all are independent

Child objects belong to a single parent

Child objects belong to single parent

所以,总结来说,聚合(Aggregation)是一种特殊的关联(Association),合成(Composition)是一种特殊的聚合(Aggregation)。

Association->Aggregation->Composition

092137082956461.gif

关联(Association)

实体之间的一个结构化关系表明对象是相互连接的。箭头是可选的,它用于指定导航能力。如果没有箭头,暗示是一种双向的导航能力。在Java中,关联(图E)转换为一个实例作用域的变量,就像图E的“Java”区域所展示的代码那样。可为一个关联附加其他修饰符。多重性(Multiplicity)修饰符暗示着实例之间的关系。在示范代码中,Employee可以有0个或更多的TimeCard对象。但是,每个TimeCard只从属于单独一个Employee。

聚合(Aggregation)

聚合(图F)是关联的一种形式,代表两个类之间的整体/局部关系。聚合暗示着整体在概念上处于比局部更高的一个级别,而关联暗示两个类在概念上位于相同的级别。聚合也转换成Java中的一个实例作用域变量。
关联和聚合的区别纯粹是概念上的,而且严格反映在语义上。聚合还暗示着实例图中不存在回路。换言之,只能是一种单向关系。

合成(Composition)

合成 (图G)是聚合的一种特殊形式,暗示“局部”在“整体”内部的生存期职责。合成也是非共享的。所以,虽然局部不一定要随整体的销毁而被销毁,但整体要么负责保持局部的存活状态,要么负责将其销毁。局部不可与其他整体共享。但是,整体可将所有权转交给另一个对象,后者随即将承担生存期职责。

Employee和TimeCard的关系或许更适合表示成“合成”,而不是表示成“关联”。

猜你在找的设计模式相关文章