简介

类图(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 类图中,实现关系使用带空心三角箭头的虚线来表示,箭头从实现类指向接口。

例如,汽车和船实现了交通工具,其类图如下所示。