一文读懂UML类图
初级目标(沟通与交流):更清晰、更有效地进行沟通和交流。以通过 UML 图理解系统的设计和架构。 终极目标(设计与规划):项目开始阶段对系统进行设计和规划,一种直观的方式来展示系统的结构
一、概念
UML(Unified Modeling Language)类图是一种用于描述系统中类与类之间关系的图形化表示方法。它是面向对象软件开发的一种标准建模语言,被广泛应用于软件工程领域。
UML类图用于显示类、接口、关联、依赖、继承、实现等元素之间的关系,以及它们的属性和方法。它是软件设计阶段中的一种重要工具,可以帮助开发者更清晰地理解和交流系统的结构与设计。
| 元素 | 关系 |
|---|---|
| 类(Class) | 用矩形表示,包括类名、属性和方法。类名位于顶部,属性和方法分别列在中间和底部。 |
| 接口(Interface) | 用矩形表示,类似于类,但没有实现的方法。 |
| 关联(Association | 用一条连接两个类的直线表示,表示两个类之间的关系。 |
| 依赖(Dependency) | 用带箭头的虚线表示,表示一个类依赖于另一个类,但不拥有对方。 |
| 继承(Inheritance | 用带空心三角形的实线表示,表示一个类继承了另一个类的属性和方法。 |
| 实现(Realization) | 用带空心三角形的虚线表示,表示一个类实现了一个接口。 |
| 聚合(Aggregation) | 用带空心菱形的实线表示,表示一个类包含了另一个类的实例,但两者之间的关系不是强依赖的。 |
| 组合(Composition) | 用带实心菱形的实线表示,表示一个类包含了另一个类的实例,两者之间的关系是强依赖的。 |
| 泛化关系(Generalization | 继承关系的一种特殊形式,用带空心箭头的实线表示。 |
| 关联类(Association Class) | 表示关联关系中的类,通常用一个小矩形连接在关联线上。 |
二、类图中具体类、抽象、接口和包的表示法
1、类
解释:
- 类名: 类名通常位于矩形的顶部。这是表示类的标识符,用于唯一标识该类。
- 属性: 属性是类的特征或状态信息,通常位于矩形的中部。它们以属性名:类型的形式表示,如
name : String表示具有名为name的属性,类型为String。 - 方法: 方法是类的行为或操作,通常位于矩形的底部。它们以方法名(参数列表):返回类型的形式表示,如
getName() : String表示具有名为getName的方法,无参数,返回类型为String。 - 可见性标识符: 在类的属性和方法前可以添加可见性标识符,用于指定属性或方法的访问权限。常用的可见性标识符包括
+(public)、-(private)、#(protected) 等。
2、抽象类
解释:
UML类图中的抽象类可以通过斜体字、斜杠和 <<abstract>> 标记来表示,以区分它们与普通类。
3、在UML类图中表示接口
解释:
UML类图中的接口可以通过带有<<interface>>标记的小矩形来表示,以区分它们与普通类和抽象类。
4、在UML类图中表示包
解释:
示例也表示了一个名为 MyPackage 的包,里面包含了两个类 Class1 和 Class2。
三、在类图中表示关系
在UML类图中,表示类之间关系的线条称为关联线,它们描述了不同类之间的连接和交互方式。以下是一些常见的类之间关系及其表示方式:
1、关联关系(Association)
关联关系(Association)是UML类图中用于表示类之间的连接关系的一种基本关系类型。它描述了一个类对象与另一个类对象之间的关联,通常用于描述不同类之间的交互方式。关联关系可以是单向的或双向的,可以表示为实线或箭头。如果是双向关联,通常会在两侧都画箭头。
2、依赖关系(Dependency)
表示一个类依赖于另一个类。通常用虚线箭头表示。
如图:
Order类中包含了一个名为customer的属性,它的类型是Customer类。Order类中的方法createOrder和sendConfirmationEmail可能会使用到Customer类的一些功能,因此存在依赖关系。- 这里的依赖关系是单向的,从
Order到Customer。
3、聚合关系(Aggregation)
表示一个类是另一个类的一部分。通常用带空心菱形的实线表示。
如图:
Department类拥有一个名为employees的属性,它的类型是一个List,其中存放了多个Employee类的对象。- 这表示了
Department类包含了多个Employee类的对象,但这些Employee类的对象可以独立存在。 Department类提供了方法addEmployee和removeEmployee来管理其包含的Employee对象。
4、组合关系(Composition)
表示一个类包含了另一个类的实例,且两者的生命周期紧密相关。通常用带实心菱形的实线表示。
如图:
Car类拥有一个名为engine的属性,它的类型是Engine类。- 这表示了
Car类由Engine类的对象构成,Car类的生命周期与Engine类的生命周期紧密相连。 - 由于是组合关系,
Car类在创建时通常会同时创建一个Engine类的对象,并在销毁时一并销毁。
5、继承关系(Inheritance)
表示一个类继承了另一个类的属性和方法。通常用带空心三角形的实线表示。
如图:
Dog类继承了Animal类,因此可以拥有Animal类的方法eat和sleep。- 除了继承了
Animal类的方法外,Dog类还添加了自己的方法bark。 - 继承关系是单向的,从
Dog到Animal。 Dog类是Animal类的特殊化,也可以说Animal类是Dog类的一般化。
6、实现关系(Realization)
表示一个类实现了一个接口。通常用带空心三角形的虚线表示。
如图:
Circle类实现了Shape接口,因此必须实现接口中定义的方法calculateArea()。- 实现关系是单向的,从
Circle到Shape。 - 通过实现接口,
Circle类可以保证拥有calculateArea()方法的实现,同时也可以保持代码的灵活性。
关注公众号回复“设计模式源码”即可获取源码,请君笑纳