[UML] 类图之间的关系 | 1.关联关系

1.关联关系

  • 关联(Association)关系是类与类之间最常用的一种关系,它是一种结构化关系,用于表示一类对象与另一类对象之间有联系
  • 在UML类图中,用实线连接有关联关系的对象所对应的类,在使用Java、C++和C#等编程语言实现关联关系时,通常将一个类的对象作为另一个类的成员变量
  • 在使用类图表示关联关系时可以在关联线上标注角色名
1.1 双向关联
  • 默认情况下,关联是双向的。
  • 用一条实线表示
  • 例子:
    顾客购买商品,并拥有商品
    商品可以被卖给某个顾客

java类图关联关系 类图中的关联关系_成员对象

  • Java代码实现
public class Customer {
    private Product[] products;
    ……
}

public class Product{
    private Customer customer;
    ……
}
1.2 单向关联
  • 用带箭头的实现表示
  • 例子:
    顾客拥有地址

java类图关联关系 类图中的关联关系_成员对象_02

  • Java代码实现
public class Customer {
    private Address address;
    ……
}

public class Address {
    ……
}
1.3 自关联
  • 系统中可能会存在一些类的属性对象类型为该类本身,这种特殊的关系成为自关联。
  • 直线+箭头表示(指向自己)
  • 例子:
    一个节点Node的成员又是节点对象。

java类图关联关系 类图中的关联关系_UML 类图   类关系 详解_03

  • Java代码实现
public class Node {
    private Node subNode;
    ……
}
1.4 多重性关联
  • 多重性关联关系又称为重数性(Multiplicity)关联关系,表示两个关联对象在数量上的对应关系。在UML中,对象之间的多重性可以直接在关联直线上用一个数字或一个数字范围表示
  • 多重性定义表如下:

java类图关联关系 类图中的关联关系_Java_04

  • 例子:
    一个界面可以有一个或者多个按钮,但是一个按钮只能属于一个界面。

java类图关联关系 类图中的关联关系_Java_05

  • Java代码:
public class Form {
    private Button[] buttons; //定义一个集合对象
    ……
} 
public class Button {
    …
}
1.5 聚合
  • 聚合(Aggregation)关系表示整体与部分的关系
  • 在聚合关系中,成员对象是整体对象的一部分,但是**成员对象可以脱离整体对象独立存在**
  • 在UML中,聚合关系用带空心菱形的直线表示
  • 例子:
    发动机是汽车的组成部分,但是汽车发动机可以独立存在。

java类图关联关系 类图中的关联关系_Java_06

  • Java实现
public class Car {
    private Engine engine;
    public Car(Engine engine) {    //构造注入
        this.engine = engine;
    }
    
    public void setEngine(Engine engine) {    //设值注入
        this.engine = engine;
    }
    ……
}

public class Engine {
    ……
}
1.6 组合
  • 组合(Composition)关系也表示类之间整体和部分的关系,但是在组合关系中**整体对象可以控制成员对象的生命周期,一旦整体对象不存在,成员对象也将不存在**
  • 成员对象与整体对象之间具有同生共死的关系
  • 在UML中,组合关系用带实心菱形的直线表示
  • 例子:
    人的头和嘴巴,嘴巴是头的组成部分之一,如果头没了,嘴巴也就没了。

java类图关联关系 类图中的关联关系_关联关系_07

  • Java实现
public class Head {
    private Mouth mouth;
    public Head() {
        mouth = new Mouth();  //实例化成员类
    }
    ……
}

public class Mouth {
    ……
}