UML 中的关系主要包括 5 种:关联关系、聚合关系、依赖关系、泛化关系和实现关系
关联关系
关联关系是一种结构化的关系,指一种对象和另一种对象有联系。给定关联的两个类,可以从其中的一个类和对象访问到另一个类的相关对象。在 UML 图中,关联关系用一条实线表示。
此外,关联可以有方向,表示该关联在某方向被使用。只在一个方向上存在的关联,称作单向关联(Unidirectional Association)或者叫导航关联,在两个方向上都存在的关联,称作双向关联(Bidirectional Association)。
聚合关系
聚合也称为聚集,是关联的特例。聚合表示类与类之间的关系是整体与部分的关系,即一个表示整体的模型元素可能由几个表示部分的模型元素聚合而成。
- 共享聚合
如果在聚集关系中处于部分方的对象可同时参与多个处于整体方对象的构成,则该聚集称为共享聚合。
- 复合聚合
如果部分类完全隶属于整体类,部分与整体共存,整体不存在了部分也会随之消失(或失去存在价值了),则该聚集称为复合聚合(简称为组成)。
聚合关系用一端带有空心小菱形的直线表示,小菱形端连接表示整体事物的模型元素,另一端连接表示部分事物的模型元素。
此外,组合关系是在聚合关系之上的更紧密的耦合关系,同样是描述元素之间部分与整体的关系,但是部分类需要整体类才可以存在,当整体类被销毁,部分类将同时被销毁。组合关系用一端带有实心小菱形的直线表示,小菱形端连接表示整体事物的模型元素,另一端表示部分的整体事务的模型元素。
依赖关系
依赖关系描述两个模型元素(类、用例等)之间的语义关系:其中一个模型元素是独立的,另一个模型元素不是独立的,它依赖于独立的模型元素,如果独立的模型元素改变,将影响依赖于它的元素。
与关联关系的区别为对象间表现非固定关系,如手机与充电器的关系。在UML图中,依赖关系用一条带有箭头的虚线来表示。
泛化关系
UML中的泛化关系定义了一般元素和特殊元素之间的分类关系,与C++及Java中的继承关系有些类似。
泛化可划分成普通泛化和受限泛化。
- 普通泛化
普通泛化就是没有给泛化添加约束。在UML图中,普通泛化关系用一条带有空心箭头的实线来表示。
- 受限泛化
可以给泛化关系附加约束条件,说明该泛化关系的使用方法或扩充方法,称为受限泛化。预定义的约束有4种:多重、不相交、完全和不完全。这些约束都是语义约束。
实现关系
实现关系将一种模型元素(如类)与另一种模型元素(如接口)连接起来,其中接口只是行为的说明而不是结构或者实现。真正的实现由前一个模型元素来完成。
通常在两种地方会遇见实现关系:
- 在接口和实现它们的类和构件之间;
- 在用例和实现它们的协作之间。
在 UML 图中,实现关系一般用一条带有空心箭头的虚线来表示。
一图总结: