类图
类图用于描述系统中所包含的类及它们之间的相互关系。一个类分为三个部分:类名、属性、方法。
- 类名
- 如果类名是正体字,说明类是具体的类,如果是斜体字,说明类是一个抽象类。如果是接口,在类上回有
<<interface>>
的标识。
- 如果类名是正体字,说明类是具体的类,如果是斜体字,说明类是一个抽象类。如果是接口,在类上回有
- 属性列表
- 属性可以是public,private,protected,分别使用+,-,#表示
- 冒号后面是属性的类型
- 方法列表
- 方法也可以是public,private,protected,表示方法和属性的一致。
- 方法括号中加参数的类型和参数名,冒号后面是返回的类型
类之间的关系
类之间的关系分为6种:泛化、实现、聚合、组合、关联、依赖。
泛化关系
泛化关系就是继承关系。
泛化关系使用一条带空心箭头的实线表示
如SubObject继承自SuperObject:
实现关系
实现关系在Java中就是接口的实现。
实现关系用一条带空心箭头的虚线表示
聚合关系
聚合关系表示实体对象之间的关系,整体由部分构成,例如部门由人员组成。与组合关系不同的是,整体和部分不是强依赖,整体不存在时,部分仍可以存在。如部门消失了,但人员不会消失。
聚合关系用一条带空心菱形箭头的实线表示
下图表示人员聚合到部门上,或者说部门由人员组成:
组合关系
组合关系也表示整体由部分构成。例如公司由多个部门组成,与聚合关系不同的是,组合关系是一种强依赖的特殊聚合关系,如果整体不存在了,部分也不存在了。如公司不存在了,部门也将不存在了。
组合关系用一条带实心菱形箭头的实线表示
下图表示部门组合成公司,或者说公司由部门组成。
关联关系
关联关系用于表示不同对象之间的结构关系,一般是长期的、静态的关系,可以是单向的或双向的。
关联关系用一条实线表示
默认不强调方向,表示两个对象互相知道,但如果强调方向,下图表示A知道B,但B不知道A。在代码中关联关系通常以成员变量的形式出现。
此外,在关联关系中,不同对象之间还有一对一、一对多、多对多的关联关系,主要在领域内的概念类或现实世界中对象的可视化表示,建立领域模型时常用到。如一对一的关联关系:
依赖关系
依赖关系表示一个对象在运行期间会用到另一个对象,和关联关系不同的是,依赖关系是一种临时性的关系,随着运行依赖关系也可能发生变化。注意:双向依赖是一种非常糟糕的结构,不应该出现。
依赖关系用一条带箭头的虚线表示
在代码中,依赖关系通常为类方法调用的传入参数,箭头指向为调用关系,如下图中C临时知道D。
总的来说后几种关系表现的强弱程度为:组合>聚合>关联>依赖。下面的图展示了类的所有关系: