UML 类图
类表示方式:类使用包含类名、属性和方法且带有分割线的矩形来表示。
类图作用:用于描述系统中类本身的组成以及与其他类之间的关系。
类与类之间的关系:
- 依赖
- 泛化(继承)
- 实现
- 关联
- 聚合
- 组合
依赖关系
如果对象 A 用到对象 B,它们之间就存在依赖关系。
代码表现形式:
- 成员变量
- 方法中的参数
- 方法中的返回值
- 方法中的局部变量
- 调用对方的静态方法
在 UML 类图中,依赖关系用一个带虚线的箭头表示,由使用方指向被使用方,表示使用方对象持有被使用方对象的引用。
说明:成员变量通常是关联关系,甚至是关联关系的特例,比如聚合关系/组合关系,关联关系比依赖关系更强关联。
public class Car {
public void run() {
System.out.println("run");
}
public static void stop() {
System.out.println("stop");
}
}
public class Driver {
// 成员变量,形成依赖关系
private Car car;
// 方法中的参数,形成依赖关系
public void func1(Car car) {
car.run();
}
// 方法中的返回值,形成依赖关系
public Car func2() {
return new Car();
}
// 方法中的局部变量,形成依赖关系
public void func3() {
Car car = new Car();
car.run();
}
// 调用对方的静态方法,形成依赖关系
public void func4() {
Car.stop();
}
}
泛化(继承)关系
泛化关系是指对象与对象之间的继承关系。
代码表现形式:
- 子类继承父类
在 UML 类图中,泛化关系用空心三角和实线组成的箭头表示,从子类指向父类。
public class Linux {
}
// 泛化(继承)关系
public class Ubuntu extends Linux {
}
实现关系
实现关系是指接口及其实现类之间的关系。
代码表现形式:
- 实现类实现接口
在 UML 类图中,实现关系用空心三角和虚线组成的箭头表示,从实现类指向接口。
public interface Linux {
}
// 实现关系
public class Ubuntu implements Linux {
}
关联关系
关联关系是指类与类之间的关联,是依赖关系的特例。
- 关联关系具有导航性,分为单向关联、双向关联和自关联。
- 关联关系具有多重性,可以一对一关联,也可以一对多关联。
代码表现形式:
- 成员变量
UML 类图表示:
- 单向关联用一个带箭头的实线表示,箭头指向被关联的对象。
- 双向关联用一个不带箭头的实线表示。
- 自关联用一个带有箭头且指向自身的实线表示。
单向关联,且为单向一对一关联
public class StudentID {
}
public class Student {
public StudentID id;
}
双向关联,且为双向一对一关联
public class StudentID {
public Student student;
}
public class Student {
public StudentID id;
}
单向关联,且为单向一对多关联
public class Lesson {
}
public class Student {
public Lesson math;
public Lesson chinese;
public Lesson english;
}
自关联
public class Node {
public Node next;
}
聚合关系
聚合关系是关联关系的特例,体现的是整体与部分的拥有关系。
整体与部分可以分开,即整体和部分的生命周期不用保持一致。
代码表现形式:
- 成员变量
在 UML 图中,聚合关系用空心菱形加实线箭头表示,空心菱形在整体一方,箭头指向部分一方。
public class StarLord {
}
public class Gamora {
}
public class Rocket {
}
public class Groot {
}
public class Destroyer {
}
// 银河护卫队,与角色之间的聚合关系
public class GuardiansGalaxy {
private StarLord starLord;
private Gamora gamora;
private Rocket rocket;
private Groot groot;
private Destroyer destroyer;
public GuardiansGalaxy() {
}
public void setStarLord(StarLord starLord) {
this.starLord = starLord;
}
public void setGamora(Gamora gamora) {
this.gamora = gamora;
}
public void setRocket(Rocket rocket) {
this.rocket = rocket;
}
public void setGroot(Groot groot) {
this.groot = groot;
}
public void setDestroyer(Destroyer destroyer) {
this.destroyer = destroyer;
}
}
组合关系
组合关系是关联关系的特例,体现的是整体与部分的包含关系。
整体与部分不能分开,即整体和部分的生命周期需要保持一致。
代码表现形式:
- 成员变量
在 UML 图中,组合关系用实心菱形加实线箭头表示,实心菱形在整体一方,箭头指向部分一方。
public class StarLord {
}
public class Gamora {
}
public class Rocket {
}
public class Groot {
}
public class Destroyer {
}
// 银河护卫队,与角色之间的组合关系
public class GuardiansGalaxy {
private StarLord starLord;
private Gamora gamora;
private Rocket rocket;
private Groot groot;
private Destroyer destroyer;
public GuardiansGalaxy(StarLord starLord, Gamora gamora, Rocket rocket, Groot groot, Destroyer destroyer) {
this.starLord = starLord;
this.gamora = gamora;
this.rocket = rocket;
this.groot = groot;
this.destroyer = destroyer;
}
}
参考资料 zhuanlan.zhihu.com/p/109655171 www.cnblogs.com/shindo/p/55…