UML 关系图
1. 类之间的关系
1.1 单向关联关系
一个类的实例对象作为另外一个类的一个成员变量,那么这两个类之间的关系就是单向关联关系
public class LoginForm {
private JButton loginButton; // 定义为成员变量
}
public class JButton {}
1.2 双向关联关系
一个类的实例对象作为另外一个类的一个成员变量,反之亦然,那么这两个类之间的关系就是双向关联关系
public class Customer {
private Product[] products; // 定义为成员变量
}
public class Product {
private Customer customer; // 定义为成员变量
}
单向关联关系使用的是引用对象的箭头;而双向关联关系使用的则是光秃秃的直线。
1.3 自关联关系
类的成员变量很有可能还是这个类的实例;这种情况在复杂的数据结构中非常常见,例如链表、树等。
public class Node {
private Node nextNode;
}
注意,自关联使用的也是单向箭头。
1.4 多重性关联
表示的是两个类数量关系之间的关系。
表示方式 | 说明 |
---|---|
1…1 | 一对一关系 |
0…* | 0 对多关系 |
1…* | 1 对多关系 |
0…1 | 0 对 1 关系 |
m…n | 多对多关系 |
public class Form {
private Button[] buttons; // 定义一个集合对象
}
public class Button {}
1.5 聚合关系
聚合关系表示的是整体和部分之间的关系,在这种关系中成员对象是整体对象的一部分,但是需要额外注意的是成员对象可以脱离整体对象存在,由于可以脱离,所以用空心菱形表示,可以理解为不坚固。
举个例子,电脑和电脑中可以拔出来使用的内存条是聚合关系。
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 组合关系
组合关系表示的也是整体和部分之间的关系,但是在组合关系中:整体可以控制成员对象(也就是部分)的生命周期,也就是说,一旦整体不存在了,那么部分也就消失了,它们之间具有同生共死的关系,在 UML 中,组合关系使用带一端实心菱形,一端直线表示;注意这里不是箭头,而是直线。
实心菱形可以看成是焊死了。
public class Head {
private Mouth mouth;
public Head() {
mouth = new Mouth();
}
}
public class Mouth {
}
简单来说,实例如果是注入的,那就是聚合关系;如果是在对象中现生成的,那就是组合关系。
显然,没有头了,就没有嘴巴了,很简单。
总结
类与类之间最常见的是关联关系,从一个角度可以分成:单关联、双向关联和自关联;从另外一个角度可以分成:聚合和组合关系。
tips:
在绘制类图的时候,属性成员前面是 - ; 方法前面是 + ; 构造函数是不用写返回值,而不是返回值为 void.