UML类图简介
简介
类图(ClassDiagram)是用来显示系统中的类、接口、协作以及它们之间的静态结构和关系的一种静态模型,它主要用于描述软件系统的结构化设计,帮助人们简化对软件系统的理解。
可见性
UML | 可见性 |
---|---|
+ | 对所有类可见(public) |
- | 仅对本类可见(private) |
# | 对本包和所有子类可见(protected) |
~ | 对本包可见(default) |
类图
类图用 3 个矩形拼接表示,最上面的部分标识类名,中间的部分标识类的属性,最下面的部分标识类的方法。
属性的表达方式为 【可见性 属性名 : 字段类型】
方法的表达方式为 【可见性 方法名(参数列表):返回类型】
比如
类图中,需注意以下几点:
- 抽象类或抽象方法用
斜体
表示 - 如果是接口,则在类名上方加
<<Interface>>
- 字段和方法返回值的数据类型非必需
- 静态类或静态方法加
下划线
接口
接口描述了类或组件对外可见的动作。
类之间的关系
UML 中的类图有以下几种关系
- 依赖关系
- 关联关系
- 聚合关系
- 组合关系
- 泛化关系
- 实现关系
依赖关系
依赖关系就是 A 类方法中的参数包含了 B。
在 UML 类图中,依赖关系使用带箭头的虚线来表示,箭头从使用类指向被依赖的类。
如下是人和食物的关系,Person 类的 eat 方法中的参数包含了 Food 类,Person 类依赖于 Food 类
关联关系
关联关系是对象之间的一种引用关系,如老师和学生,丈夫和妻子等。
关联可以是双向的,也可以是单向的。在 UML 类图中,双向的关联可以用带两个箭头或者没有箭头的实线来表示,单向的关联用带一个箭头的实线来表示,箭头从使用类指向被关联的类。
如下是老师和学生的关系图,每个老师可以教多个学生,每个学生也可向多个老师学习,他们是双向关联。
聚合关系
聚合关系是关联关系的一种特例,聚合关系表示的是一种整体和部分的关系,是 has-a
的关系。
聚合关系也是通过成员对象来实现的,其中成员对象是整体对象的一部分,但是成员对象可以脱离整体对象而独立存在。例如,学校与老师的关系,学校包含老师,但如果学校停办了,老师依然存在。
在 UML 类图中,聚合关系可以用带空心菱形的实线来表示,菱形指向整体。
如下是大学和教师的关系图
组合关系
组合关系亦是一种特殊的关联关系,和上面的聚合关系一样,也表示一种整体和部分的关系,但它是一种更强烈的聚合关系,是 contains-a
关系。
在组合关系中,整体对象可以控制部分对象的生命周期,一旦整体对象不存在,部分对象也将不存在,部分对象不能脱离整体对象而存在。比如,头和嘴的关系,没有了头,嘴也就不存在了。
在 UML 类图中,组合关系用带实心菱形的实线来表示,菱形指向整体。
如下是头和嘴的关系图。
泛化关系
泛化(Generalization)关系是对象之间耦合度最大的一种关系,表示一般与特殊的关系,是父类与子类之间的关系,是一种继承关系,是 is-a
的关系。在代码实现时,使用面向对象的继承机制
来实现泛化关系。
在 UML 类图中,泛化关系用带空心三角箭头的实线来表示,箭头从子类指向父类。
例如,Student 类和 Teacher 类都是 Person 类的子类,其类图如下所示。
实现关系
实现(Realization)关系是接口与实现类之间的关系。在这种关系中,类实现了接口,类中的操作实现了接口中所声明的所有的抽象操作。
在 UML 类图中,实现关系使用带空心三角箭头的虚线来表示,箭头从实现类指向接口。
例如,汽车和船实现了交通工具,其类图如下所示。