UML 类图符号含义
在 UML 类图中,每个符号都有其特定的含义。以下是常见符号的解释:
+
: Public(公共访问权限)-
: Private(私有访问权限)#
: Protected(受保护访问权限)~
: Package(包访问权限)- 下划线: Static(静态成员)
对应的 Java 类示例:
class Person {
public String name; // 公共属性
private Integer age; // 私有属性
protected Double weight; // 受保护属性
Double height; // 包访问权限属性
public char gender; // 公共属性
public void eat(String food) {} // 公共方法
protected void drink() {} // 受保护方法
String walk() { return "walk"; } // 包访问权限方法
}
UML 类图讲解
UML 类图关系符号讲解
1. 箭头(关联与依赖)
箭头是最常见,依赖与关联也是最常见的,对应理解为类的属性+类的行为参数
- 实线箭头:关联关系(强依赖),表示一个类的属性中引用了其他类的实例,通常表示“拥有”或“包含”关系",实例化类的时候其他类也必须存在。
- 虚线箭头:依赖关系(弱依赖),表示类的方法参数中引用了其他类,或者方法中使用了其他类的实例,如果不调用方法,类的实例就不会被使用
2. 三角形箭头(继承与实现)
三角形箭头比较常见,对应理解为类继承与实现
- 三角形实线箭头:继承关系,箭头指向父类。表示子类继承父类的所有属性和方法。
- 三角形虚线箭头:实现关系,箭头指向接口。表示类实现了某个接口,提供接口定义的方法。
3. 菱形箭头(聚合与组合关系)
- 实心菱形加实线箭头:组合关系,类之间的生命周期绑定,通常表示“整体-部分”关系。比如,车包含发动机,车不存在时,发动机也随之不存在。
- 空心菱形加实线箭头:聚合关系,表示较弱的“整体-部分”关系。即“部分”可以独立存在,且生命周期独立于“整体”。
联想记忆法
-
箭头:箭头指向被引入的类。可以联想为指示你需要某个对象,就像你用手指指向笔,告诉别人你需要这支笔。
-
实线箭头与虚线箭头:
- 实线箭头(强依赖):就像你看东西需要眼睛,表示类的属性依赖。
- 虚线箭头(弱依赖):就像吃饭需要碗筷,只有在吃饭时需要碗筷,不吃饭时就不需要,表示类的行为依赖。
-
继承与接口:
- 继承(实线三角箭头):就像子类从父类继承了一些属性和方法,箭头指向父类,表示子类是父类的一种特殊类型。
- 实现(虚线三角箭头):类通过实现接口来定义某些行为,箭头指向接口,表示类履行了接口规定的责任。
-
组合与聚合:
- 组合(实心菱形箭头):组合关系通常表示更强的耦合,类似“身体的四肢组成了一个人”,如果没有身体,四肢就没有意义,生命周期一致。
- 聚合(空心菱形箭头):聚合关系则表示较弱的耦合,类似“你和老婆组成了一个家庭”,如果你离开了,老婆仍然可以单独存在,生命周期不一致。
难以区分的组合、依赖、关联的区别对比
组合、依赖、关联的区别对比
特性 | 依赖关系(Dependency) | 关联关系(Association) | 组合关系(Composition) |
---|---|---|---|
强度 | 弱依赖,表示类之间的行为依赖。 | 较弱依赖,表示类之间的联系,但不涉及生命周期管理。 | 强依赖,表示“整体-部分”关系,生命周期紧密绑定。 |
生命周期 | 生命周期独立。依赖关系不会影响生命周期。 | 生命周期独立。销毁一个对象不影响另一个对象。 | 整体对象销毁,部分对象也会销毁。 |
对象的存在 | 依赖对象仅在方法调用时存在。 | 关联的对象可以独立存在。 | 部分对象依赖整体对象的存在。 |
表示方式(UML) | 虚线箭头(方法或局部变量依赖) | 实线连接(类间简单关联) | 实心菱形+实线箭头 |
示例 | Person 的方法依赖于 Machine (方法参数依赖) | Teacher 和 Student (类之间的关联) | Car 和 Engine (Engine 是 Car 的一部分) |
直观对比
- 依赖:就像你和办事人员的关系,只有在你需要办事时才会联系他们。它是临时的,不需要始终存在。
- 关联:就像你和老婆的关系,虽然你们不总是“办事”,但是你们的关系始终存在。你们之间的联系可以是双向的。
- 组合:就像“身体-四肢”的关系,如果身体消失,四肢也随之消失。
区别总结
- 依赖关系:表示类之间较弱的行为依赖,通常通过方法参数或局部变量来表示。生命周期是独立的,类之间没有持久的引用关系。
- 关联关系:表示类之间的联系,通常通过属性或方法参数引用另一个类。对象的生命周期独立,类之间是松散的联系。
- 组合关系:表示“整体-部分”关系,整体和部分对象的生命周期紧密绑定,部分对象依赖整体对象的存在,销毁整体对象会导致部分对象的销毁。