关注BeTester,学习更多知识
让碎片成体系,让测试更专业
1、概述
类图(Class diagram)是显示模型的静态结构,特别是模型中存在的类、类的内部结构以及它们与其他类的关系等。类图不显示暂时性的信息。类图是面向对象建模的主要组成部分。它既用于应用程序的系统分类的一般概念建模,也用于详细建模,将模型转换成编程代码。
2、类图概览
2.1 类的组成元素
一个类由3部分组成:类名、属性和方法:
在面向对象的语言里,常使用protected/private/public等对类成员进行可访问性的修饰,对应到PlantUML中,其符号及图表关系如下:
2.2 定义类
使用 class 关键字进行类的定义,并在花括号内进行 属性 及 方法的设置。
class Tester {
-String private_field
#int protected_field
~char package_private_field
+char[] public_field
-void private_method()
#void protected_method()
~int package_private_method()
+BeTester public_method()
}
2.3 实例UML代码
@startuml
工程师 <|.. 软件工程师 : 实现
软件工程师 <|-- 测试工程师 : 继承(泛化)
软件工程师 <|-- 开发工程师 : 继承(泛化)
测试工程师 *-- 测试思维 : contains(组合)
测试工程师 *-- 测试技术 : contains(组合)
开发工程师 o-- 头发 : has(聚合)
开发工程师 <--> 身份证 : 关联
开发工程师 ..> IDE : 使用(依赖)
@enduml
2.4 UML图
3、类图解析
3.1 泛化(继承)
泛化实际上是继承关系,是对某一细分领域的划分。譬如 测试工程师 和 开发工程师 都是软件工程师的子类。PlantUML中语法为:
父类 <|-- 子类
3.2 实现
实现是对抽象概念的具体化说明,抽象的类或接口并不会对其内部方法进行编码实现,而是通过具体的类来对对该抽象类或接口进行编码。譬如 工程师 是一个抽象,软件工程师就是对工程师的具体化说明。PlantUML中语法为:
接口/抽象类 <|.. 类
3.3 依赖(使用)
依赖表示对象在运行期间会使用到另一个对象。譬如 开发工程师 在编码时会使用到 IDE工具。PlantUML中的语法为:
类 ..> 工具
3.4 关联(拥有,成员变量)
关联关系是一种拥有的关系,它使一个类知道另一个类的属性和方法。譬如 开发工程师拥有一头乌黑的秀发。PlantUML中的语法为:
类 <--> 类
3.5 聚合(整体的一部分)
聚合关系表示整体与部分的弱依赖关系,若整体不存在了,部分依然可以存在。譬如 软件工程师 与 公司的关系,公司不存在了,软件工程师依然存在。PlantUML中的语法为:
类 *-- 类
3.6 组合(由..组成)
组合关系表示整体与部分的强依赖关系,弱整体不存在了,部分也不存在。譬如 测试部门 与 公司的关系,公司不存在了,测试部门也就消失了。在比如 测试思维与测试工程师,当工程师不存在了,那么测试思维也就不在了。PlantUML中的语法为:
类 o-- 类
- 实线比虚线关系强
- 实心比空心关系强
- 三角最稳(泛化/实现) > 四边形(聚合/组合) > 箭头(关联/依赖)
4、其他操作
4.1 添加注释
class Tester
note left: 这是在左侧的注释信息
class Tester
note right: 这是在右侧的注释信息
class Tester
note top: 这是在右侧的注释信息
class Tester
note bottom: 这是在右侧的注释信息
4.2 定义接口和抽象类
abstract class 工程师
interface 工具箱
4.3 改变箭头方向
A -left-> B
C -right-> D
E -up-> F
G -down-> H
除了 → 以外, ..> 、 <|— 、 *— 、 o— 等含方向的线段都可以使用方位关键字。
5、小结
类图广泛应用在项目开发中,甚至由写IDE工具能够提供扫描代码自动生成UML类图的功能。但是,也许这是一种本末倒置的方法,在开发过程中更应该提倡使用正向设计的思想,通过UML来指导我们的设计开发工作,进而开发相应工具自动生成代码框架。