软件工程-UML-类图
UML类图通过类、属性、方法和泛化、实现、依赖、关联、聚合、组合六种关系,清晰描述系统静态结构,是软件分析设计与编码的核心工具。
UML类图核心知识点总结📚
一、类图基础
类图是软件工程中静态结构图,用于描述系统的类集合、类的属性、操作及类间关系,是系统分析、设计、编码与测试的核心模型。
类的组成结构
类图从上到下分为三部分:
- 类名(必须存在)
- 属性:每个属性需包含名称,可选信息包括可见性、数据类型、缺省值等
- 可见性符号:
+(public)、-(private)、#(protected)
- 可见性符号:
- 操作:每个操作需包含名称,可选信息包括可见性、参数名/类型、返回值类型等
二、类间关系与UML表示
类间共有6种核心关系,均为关联/依赖的特例,以下是完整对照:
| 关系类型 | 图形标志 | UML标志 | 核心含义 | 适用场景 |
|---|---|---|---|---|
| 依赖 | 虚线箭头 | ----> |
临时性连接,一个类使用另一个类 | 方法参数、局部变量 |
| 泛化 | 空心三角实线 | ———▷ |
继承关系,子类共享父类特征 | 类继承、抽象类 |
| 实现 | 空心三角虚线 | ---▷ |
类实现接口中的全部方法 | 接口实现 |
| 关联 | 实线直线 | ———— |
长期性连接,持有对象引用 | 学生-课程、人-公司 |
| 聚合 | 空心菱形实线 | ◇——— |
整体与部分,可分离,部分独立存在(弱关联) | 汽车-引擎、班级-学生 |
| 组合 | 实心菱形实线 | ◆——— |
整体与部分,不可分离,生命周期绑定(强关联) | 人-头、公司-部门 |
三、关键区别与示例
1. 聚合 vs 组合
- 聚合:部分与整体生命周期独立,如汽车报废后,引擎仍可单独使用
- 组合:部分与整体生命周期绑定,如头不存在时,嘴也不复存在
2. 依赖 vs 关联
- 依赖:临时使用,方法执行完关系即结束,如司机开车时依赖Car类
- 关联:长期持有,表现为成员变量,如学生对象始终关联多门课程
3. 泛化 vs 实现
- 泛化:类继承类,共享父类属性与方法,如Student继承Person
- 实现:类实现接口,必须完成接口定义的所有操作,如PenBrush实现IBrush接口
四、可见性与语法示例
以借阅者类为例:1
2
3
4
5
6
7
8借阅者
-借阅证号: int
-是否有借阅资源: boolean
+姓名: string
+类别: string
+性别: string
+借书(): void
+还书(): void
-借阅证号:私有属性,仅类内部可访问+姓名:公共属性,外部可直接访问+借书():公共方法,对外提供借书能力
以Account类为例:1
2
3
4Account
-balance: double = 1
+Deposite(Amount: double): int
+ComputeInterest(): double
-balance:私有余额,初始值为1+Deposite():公共存款方法,接收double参数,返回int结果+ComputeInterest():公共计息方法,返回double结果
五、类图作用总结
- 简化理解:直观呈现系统静态结构,帮助开发人员快速把握类与类间关系
- 阶段产物:是系统分析与设计阶段的核心输出,指导后续编码与测试
- 沟通工具:作为团队成员间的统一语言,便于需求、设计与实现的对齐
classDiagram
direction LR
%% 定义基础类
class Person {
-id: int
-name: String
+eat(): void
}
class Student {
-studentId: String
+study(): void
}
class IWork {
<>
+work(): void
}
class Teacher {
+teach(): void
}
class Car {
+run(): void
}
class Engine { }
class Head { }
class Mouth { }
class Driver {
+drive(car: Car): void
}
%% 1. 泛化(继承)
Student --|> Person : 泛化
Teacher --|> Person : 泛化
%% 2. 实现
Teacher ..|> IWork : 实现
%% 3. 依赖
Driver ..> Car : 依赖
%% 4. 关联
Student -- Car : 关联
%% 5. 聚合(弱整体-部分)
Car o-- Engine : 聚合
%% 6. 组合(强整体-部分)
Head *-- Mouth : 组合