UML 类图关系表示

238 阅读3分钟

参考资料

参考学习30分钟学会UML类图记录笔记

概述

UML类图中一般会有连线指明它们之间的关系。关系共有六种类型,分别是实现关系、泛化关系、关联关系、依赖关系、聚合关系、组合关系。如图所示

image.png

实现

实现关系是指接口及其实现类之间的关系。用空心三角+虚线组成的箭头来表示,从实现类指向接口,如图

image.png

泛化(继承 is a)

泛化关系(Generalization)是指对象与对象之间的继承关系。用空心三角+实线组成的箭头来表示,从子类指向父类,如图

image.png

关联

关联关系(Association)是指对象和对象之间的连接,用实线+箭头来表示,关联关系的代码表现形式为一个对象含有另一个对象的引用。也就是说,如果一个对象的类代码中,包含有另一个对象的引用,那么这两个对象之间就是关联关系。如图

image.png

其实关联分三种:依赖、聚合、组合。

依赖(use a)

依赖(Dependency)关系是一种弱关联关系。用带虚线的箭头表示,如图

image.png

依赖关系在 java 中的具体表现形式有四种(以 A 类依赖 B 类举例):

  1. B 为 A 的某方法的局部变量
  2. B 为 A 的某方法的参数
  3. B 为 A 的某方法的返回值
  4. 调用 B 的静态方法

如下面代码所示

public class A {
  public void method1() {
    //A依赖于B的第一种表现形式:B为A的局部变量
    B b = new B();
    b.method1();
  }

  public void method2() {
    //A依赖于B的第二种表现形式: 调用B的静态方法
    B.method2();
  }

  public void method3(B b)  {
    //A依赖于B的第三种表现形式:B作为A的方法参数
    String s = b.field1;
  }

  //A依赖于B的第四种表现形式:B作为A的方法的返回值
  public B method4() {
    return new B();
  }
}

聚合(has a)

聚合(Aggregation)是关联关系的一种特例,它体现的是整体与部分的拥有关系(has a)。用 空心菱形+实线箭头 表示,空心菱形表示整体,实线箭头表示部分,如图

image.png

聚合关系中,整体与部分之间是可分离的,它们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享,所以聚合关系也常称为共享关系。例如,公司部门与员工的关系,一个员工可以属于多个部门,一个部门撤销了,员工可以转到其它部门。

组合(contains a)

组合(Composition)也是关联关系的一种特例,它同样体现整体与部分间的包含关系(contains a)。用实心菱形+实线箭头表示,如图

image.png

组合关系中,整体与部分是不可分的,部分也不能给其它整体共享,作为整体的对象负责部分的对象的生命周期。这种关系比聚合更强,也称为强聚合。如果A组合B,则A需要知道B的生存周期,即可能A负责生成或者释放B,或者A通过某种途径知道B的生成和释放。

在 Java 代码形式上,聚合和组合关系中的部分对象是整体对象的一个成员变量。但是,在实际应用开发时,两个对象之间的关系到底是聚合还是组合,有时候很难区别。在Java中,仅从类代码本身是区分不了聚合和组合的。如果一定要区分,那么如果在删除整体对象的时候,必须删掉部分对象,那么就是组合关系,否则可能就是聚合关系。从业务角度上来看,如果作为整体的对象必须要部分对象的参与,才能完成自己的职责,那么二者之间就是组合关系,否则就是聚合关系。