1️⃣单向关联

✴️UML图演示:

java文件生成uml图_uml

以上是单向关联的实例,需要类Customer知道类Address,而不需要类Address知道类Customer,那么就是单向关联。在UML类图中,用实线连接有关联关系的对象所对应的类,并通过有无箭头区分不同的关联关系。

✳️Java代码演示:

public class Customer {
private Address address;
……
}
public class Address {
……
}

这里就是上述的:表现在代码层面为被关联类Address以类属性的形式出现在关联类Cusomer中


2️⃣双向关联

✴️UML图演示:

java文件生成uml图_UML_02

以上是双向关联的实例,类Customer需要知道类Product,而类Product也需要知道类Cusomer,那么这两个类就应该是双向关联的。

✳️Java代码演示:

public class Customer {
private Product[] products;
……
}
public class Product{
private Customer customer;
……
}

3️⃣自关联

✴️UML图演示:

java文件生成uml图_软件工程_03

以上是自关联的实例,自关联体现为类的属性类型为类本身,如链表、树结构。

✳️Java代码演示:

public class Node {
private Node subNode;
……
}

4️⃣多重性关联

✴️UML图演示:

java文件生成uml图_uml_04

以上是多重性关联的实例。多重性关联关系又称为重数性(Multiplicity)关联关系,表示两个关联对象在数量上的对应关系。在UML中,对象之间的多重性可以直接在关联直线上用一个数字或一个数字范围表示

【补充】多重性与UML表示方式的对应关系:

| UML表示方式 | 多重性 |

| — | — |

| 1…1 | 表示另一个类的一个对象只与该类的一个对象有关系 |

| 0…* | 表示另一个类的一个对象只与该类的零个或多个对象有关系 |

| 1…* | 表示另一个类的一个对象只与该类的一个或多个对象有关系 |

| 0…1 | 表示另一个类的一个对象没有或只与该类的一个对象有关系 |

| m…n | 表示另一个类的一个对象与该类最少m,最多n个对象有关系 |

✳️Java代码演示:

public class Form {
private Button[] buttons; //定义一个集合对象
……
}
public class Button {
…
}

III.聚合(Aggregation)关系


聚合(Aggregation)关系是关联关系的一种特例,体现的是整体与部分、拥有的关系,即has-a的关系。

此时整体与部分之间是可分离的,他们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享。比如计算机与CPU、车和引擎的关系等。

✴️UML图演示:

java文件生成uml图_软件工程_05

以上是聚合关系的实例。在UML中,聚合关系用带空心菱形的直线表示 ,整体指向部分,空心菱形靠近整体

✳️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 {
……
}

表现在代码层面,和关联关系是一致的,只能从语义级别来区分。


IV.组合(Composition)关系


组合(Composition)关系也是关联关系的一种特例,体现的是一种contains-a的关系,这种关系比聚合更强,也称为强聚合

同样体现整体与部分间的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束。比如你的头和你的嘴巴。

✴️UML图演示:

java文件生成uml图_uml_06

以上是组合关系的实例,在UML中,组合关系用带实心菱形的直线表示,整体指向部分,实心菱形靠近整体。

✳️Java代码演示:

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

表现在代码层面,和关联关系是一致的,只能从语义级别来区分。


V.泛化(Generalization)关系


泛化(Generalization)关系是一种继承关系,用于描述父类与子类之间的关系,父类又称为基类或超类,子类又称为派生类是一种继承关系。

它表示一般与特殊的关系,指定了子类如何特化父类的所有特征和行为。例如:学生和老师是人类的一种,即有学生、老师的特性也有人类的共性。

✴️UML图演示:

java文件生成uml图_UML_07

以上是泛化关系的实例,在UML中,泛化关系用带空心三角形的直线来表示,箭头指向父类。

✳️Java代码演示:

//父类
public class Person {
protected String name;
protected int age;
public void move() {
……
}
public void say() {
……
}
}
//子类
public class Student extends Person {
private String studentNo;
public void study() {
……
}
}

在代码实现时,使用面向对象的继承机制来实现泛化关系,在Java语言中使用extends关键字。


VI.依赖(Dependency)关系


依赖(Dependency)关系是一种使用关系,特定事物的改变有可能会影响到使用该事物的其他事物,在需要表示一个事物使用另一个事物时使用依赖关系,即一个类的实现需要另一个类的协助。

另外,在大多数情况下,依赖关系体现在某个类的方法使用另一个类的对象作为参数。

✴️UML图演示:

java文件生成uml图_软件工程_08

以上是依赖关系的实例,在UML中,依赖关系用带箭头的虚线表示,由依赖的一方指向被依赖的一方。

✳️Java代码演示:

public class Driver {
public void drive(Car car)