UML类图速成
类的表示
一个类在类图中用矩形框表示,矩形框分为三层:
- 类名
- 类的成员变量:名称和类型
- 类的方法:名称,参数类型和名称,返回值类型(也就是完整的函数签名)
对于成员变量和方法,使用不同的前缀代表访问修饰符:
- 缺省代表default
+
代表public-
代表private#
代表protected
对于一个抽象类或接口,它的类名以及抽象方法(留给子类实现的方法)名称使用斜体表示,以示区别。
类的关系
下面的几种关系讨论的都是两个类之间的关系,也可以理解为两个类的实例之间的关系。
对于满足后四种关系的两个类,如果屏蔽了其中一个类的定义,另一个类是无法通过编译的。 有的教程将后四种关系统称为关联关系,将聚合/组合/依赖关系视作特殊的关联关系。
继承与实现
继承和实现是类之间非常强的关系,在代码中的特征非常明显:
- 继承关系(泛化关系)
- 子类和父类之间的继承关系。
- 在记号上使用带空心三角箭头的实线相连,空心三角箭头指向父类。
- 实现关系
- 类和接口之间的实现关系。
- 在记号上使用带空心三角箭头的虚线相连,空心三角箭头指向接口。
这里的接口主要是针对Java的,Java虽然不支持多继承,但是提供了抽象类和接口,两者略有不同。 由于C++并没有提供接口,不妨将其理解为对抽象类的继承。
聚合与组合
聚合和组合是指两个类之间构成整体与部分的关系,在类中的体现通常为成员变量,按照生命周期区分:
- 聚合关系
- 部分可以离开整体而单独存在,两者生命周期可以不重合,例如车和轮胎的关系。
- 在记号上使用带空心菱形的实线相连,空心菱形指向整体,有时另一侧用箭头指向部分。
- 组合关系
- 部分不能脱离整体而存在,两者生命周期完全重合,例如公司与部门的关系。
- 在记号上使用带实心菱形的实线相连,实心菱形指向整体,有时另一侧用箭头指向部分。
关联与依赖
关联和依赖是两个类之间的使用关系(而非整体与部分的关系),需要知道对方的类的定义,属性和方法。两者按照使用方式区分:
- 关联关系
- 长期且稳定的关系。
- 在类中通常体现为局部变量。
- 在记号上使用最简单的实线相连,默认双向关联关系,并不需要强调方向性,对于方向性明显的关联也可以加上普通箭头。
- 依赖关系
- 通常是临时的关系,例如发生在方法的调用过程中。
- 在类中可能体现为局部变量,方法的参数或返回值,或者对静态方法的调用等。
- 在记号上使用带箭头的虚线相连,箭头指向被使用者。如果是双向依赖,两侧都需要加上箭头,尽量不要使用双向依赖。
文中的几个UML类图都是直接采用的网上教程链接,并没有将其复制到图床中。
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Comment