在UML类图中,常见的有以下几种关系:

  • 泛化(Generalization)
  • 实现(Realization)
  • 关联(Association)
  • 聚合(Aggregation)
  • 组合(Composition)
  • 依赖(Dependency)

1 泛化 Generalization

表示继承关系,从子类指向父类

2 实现 Realization

是一种类与接口的关系,它表示不继承数据结构而只继承接口的方法,是类与接口之间最常见的关系。准确的说,类不是继承(inherit)接口,而是实现(implement)接口。

3 关联(Association)

是一种拥有的关系,它使一个类知道另一个类的属性和方法;如:老师与学生,丈夫与妻子关联可以是双向的,也可以是单向的。双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头。
体现在代码中,就是类中将另一个类作为成员变量. 箭头指向被拥有者,如下图

图中,老师与学生是双向关联,老师有多名学生,学生也可能有多名老师。但学生与某课程间的关系为单向关联,一名学生可能要上多门课程,课程是个抽象的东西他不拥有学生。

4 聚合(Aggregation)

是整体与部分的关系,且部分可以离开整体而单独存在。如车和轮胎是整体和部分的关系,轮胎离开车仍然可以存在。
聚合关系是关联关系的一种,是强的关联关系关联和聚合在语法上无法区分,都是将另一个类作为成员变量,箭头为带空心菱形的实心线,菱形指向整体

5 组合(Composition)

是整体与部分的关系,但部分不能离开整体而单独存在。所以是比聚合还要强的关联关系。箭头是带实心菱形的实线,菱形指向整体

6 依赖(Dependency)

是一种使用的关系,即一个类的实现需要另一个类的协助,所以要尽量不使用双向的互相依赖.
使用依赖关系(关键字《use》)将客户元素与服务者元素相连。服务者的变化将导致客户的变化。使用通常表示一种实现的依赖关系,其中的一个元素依靠另一个元素的服务来实现自身的操作。使用的构造类型包括调用、实例(关键字《instantiate》)、参数、发送。
代码中体现为,局部变量、方法的参数或者对静态方法的调用
带箭头的虚线,指向被使用者(A使用B,箭头指向B)

7 总结

各种关系的强弱顺序:

泛化 = 实现 > 组合 > 聚合 > 关联 > 依赖

面这张UML图,比较形象地展示了各种类图关系:

Last modification:July 23, 2019
如果觉得文章对你有用,请随意赞赏