# 专题 4-9:UML 建模方法整合

本篇整合 UML 用例图、类图、活动图、时序图、状态图、构件图和部署图。复习时不要死记图形,而要掌握每类图回答的问题、适用阶段、核心元素和常见错误。

# 1. UML 总览

UML(Unified Modeling Language,统一建模语言)是面向对象系统分析与设计的标准建模语言,用于对系统进行说明、可视化和文档化。UML 独立于具体编程语言。

# 常用图与核心问题

UML 图类型回答的问题常用阶段
用例图行为需求图系统向谁提供哪些功能?需求分析
类图静态结构图系统有哪些类,它们如何关联?分析、设计
对象图静态实例图某一时刻有哪些对象和连接?验证类图
包图静态结构图系统模块如何分组和依赖?架构设计
活动图行为流程图业务流程或算法如何流转?分析、设计
时序图交互图对象按时间顺序如何传递消息?设计为主
通信图交互图对象间如何链接并发送消息?设计
状态图行为状态图单个对象如何随事件改变状态?分析、设计
构件图结构图软件构件与接口如何组织?架构设计
部署图结构图软件部署在哪些物理节点上?架构设计、运维

UML 建模要按需使用。考试和论文中最常用的是用例图、类图、活动图、时序图、状态图、构件图和部署图,不需要把所有 UML 图都画一遍。

# 2. 用例图

用例图展示系统功能边界、参与者和用例之间的关系,适合在需求分析阶段与用户确认系统范围。

# 核心元素

元素含义画法 / 要点
参与者 Actor与系统交互的人、外部系统、设备或时间位于系统边界外,不是系统内部组件
用例 Use Case系统提供的完整功能或服务用 “动词 + 名词” 命名,如 “查询图书”
系统边界系统负责的范围用矩形表示,框内是系统功能

# 四种关系

关系连接对象方向含义
关联 association参与者与用例参与者到用例或无箭头实线谁使用哪个功能
包含 include用例与用例基用例指向被包含用例必须执行的公共子功能
扩展 extend用例与用例扩展用例指向基用例特定条件下可选执行
泛化 generalization参与者或用例子类指向父类继承父元素能力

# 用例图示例:图书馆管理系统

Mermaid 没有标准 UML 用例图语法,这里用 flowchart 近似表达系统边界、参与者和用例关系。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
flowchart LR
Reader[普通读者]
Vip[VIP 读者]
Librarian[图书管理员]
Admin[系统管理员]
Isbn[第三方 ISBN 系统]

subgraph Sys[高校图书馆管理系统]
Query([查询图书])
Borrow([借阅图书])
Return([归还图书])
Record([查看借阅记录])
Auth([验证读者身份])
Reserve([预约热门图书])
Store([图书入库])
Sync([同步 ISBN 图书信息])
Permission([用户权限管理])
end

Reader --> Query
Reader --> Borrow
Reader --> Return
Reader --> Record
Vip --> Reader
Vip --> Reserve
Librarian --> Store
Admin --> Permission
Isbn --> Sync
Borrow -. "<<include>>" .-> Auth
Return -. "<<include>>" .-> Auth
Store -. "<<include>>" .-> Sync
Reserve -. "<<extend>>" .-> Borrow

# 常见错误

  • 把系统内部模块画成参与者。
  • 用例命名成名词或技术步骤,如 “数据库查询”。
  • 滥用 <<include>> 把一个流程拆成若干步骤。
  • includeextend 箭头方向画反。

# 3. 类图

类图描述系统静态结构,是面向对象分析与设计中最核心的结构图。

# 类的表示

类通常由三层矩形组成:

  1. 类名:PascalCase。
  2. 属性:描述类的特征。
  3. 方法:描述类的行为。

可见性符号:

符号可见性Java 对应
+publicpublic
-privateprivate
#protectedprotected
~package包级可见

# 类之间六种关系

关系含义强度 / 生命周期表示
依赖 Dependency临时使用另一个类最弱虚线箭头
关联 Association对象之间长期连接中等实线
聚合 Aggregation弱整体 - 部分,部分可独立存在较强空心菱形
组合 Composition强整体 - 部分,部分依赖整体最强实心菱形
泛化 Generalization继承关系空心三角实线
实现 Realization类实现接口空心三角虚线

# 类图示例:个人图书管理系统

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
classDiagram
class Book {
+String bookId
+String title
+String author
+String publisher
+String category
+double price
+modifyInfo()
}

class ItBook
class OtherBook
class BookList {
+addBook(book)
+modifyBook(book)
+query(keyword)
+countByPeriod(start, end)
}
class BorrowRecord {
+String recordId
+String borrower
+Date borrowDate
+Date returnDate
}
class BorrowList {
+addRecord(record)
+removeRecord(recordId)
+printList()
}

Book <|-- ItBook
Book <|-- OtherBook
BookList *-- "0..*" Book
BorrowList *-- "0..*" BorrowRecord
Book "1" -- "0..1" BorrowRecord

# 分析类图与设计类图

维度分析阶段:概念类图设计阶段:设计类图
面向对象业务概念软件实现
抽象层次
内容类名、关键属性、关联、多重性属性类型、方法签名、可见性、技术类
受众业务分析师、领域专家架构师、开发人员
是否可生成代码可以作为代码骨架

# 4. 活动图

活动图描述业务流程、用例事件流或算法控制流,可看作 UML 中的增强型流程图。

# 核心元素

元素含义
动作节点一个不可再分的步骤
控制流动作执行顺序
初始节点流程起点
活动终止整个活动结束
决策 / 合并条件分支与汇合
分叉 / 汇合并发执行与同步
泳道按角色或系统模块划分职责
对象流表达数据或对象在动作间传递

# 活动图示例:借阅图书

1
2
3
4
5
6
7
8
9
10
11
12
13
14
flowchart TD
Start((开始)) --> A[读者提交借阅请求]
A --> B[系统验证读者身份]
B --> C{身份有效?}
C -- 否 --> D[提示认证失败]
D --> End((结束))
C -- 是 --> E[检查图书库存]
E --> F{有可借库存?}
F -- 否 --> G[提示可预约]
G --> End
F -- 是 --> H[生成借阅记录]
H --> I[更新库存状态]
I --> J[通知借阅成功]
J --> End

# 分析阶段与设计阶段

维度分析阶段设计阶段
目标描述业务流程或用例逻辑描述算法或系统内部实现
动作语言业务术语技术术语
泳道角色、部门、外部系统层、组件、类、服务
对象流少量业务对象具体数据类型和对象状态

# 5. 时序图与通信图

时序图按时间顺序描述对象之间的消息传递,适合细化某个用例场景。

# 时序图核心元素

元素含义
Actor发起交互的人或外部系统
对象参与交互的实例
生命线对象存在的时间线
激活期对象正在执行操作的时间段
同步消息调用方等待返回
异步消息调用方不等待
返回消息处理结果返回
组合片段altoptlooppar 等控制结构

# 时序图示例:登录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
sequenceDiagram
actor User as 用户
participant UI as 登录界面
participant Auth as 认证服务
participant DB as 用户数据库

User->>UI: 输入账号密码
UI->>Auth: login(username, password)
Auth->>DB: findUser(username)
DB-->>Auth: user
Auth->>Auth: verifyPassword()
alt 验证通过
Auth-->>UI: 登录成功
UI-->>User: 进入系统
else 验证失败
Auth-->>UI: 登录失败
UI-->>User: 提示错误
end

# 常用组合片段

操作符含义
alt多分支,类似 if-else
opt可选分支,类似 if
loop循环
par并行
break中断外围流程
critical临界区,不允许交错执行
ref引用另一个交互图

# 通信图

通信图也描述对象交互,但更强调对象之间的结构链接。它没有垂直时间轴,消息顺序依靠编号表达。

对比项时序图通信图
核心维度时间顺序对象链接结构
消息顺序自上而下编号表示
优势易读,适合复杂流程紧凑,适合展示协作网络
选择建议需要看清调用顺序时使用需要强调对象关系时使用

# 6. 状态图

状态图描述单个对象在事件驱动下的状态变迁,适合建模订单、会话、设备、票务等生命周期明确的对象。

# 状态图核心结构

转换语法:

1
事件 [守卫条件] / 动作

常见伪状态:

伪状态含义
初始状态状态机起点
终止状态生命周期结束
选择状态根据条件分支
分叉 / 汇合并发状态进入与同步
历史状态重新进入复合状态时恢复上次子状态

# 状态图示例:订单生命周期

1
2
3
4
5
6
7
8
9
10
11
12
13
stateDiagram-v2
[*] --> 待支付
待支付 --> 已取消: cancel()
待支付 --> 已支付: paySuccess()
待支付 --> 已关闭: after(30min)
已支付 --> 已发货: ship()
已发货 --> 已完成: confirmReceipt()
已发货 --> 售后中: applyRefund()
售后中 --> 已退款: refundSuccess()
已完成 --> [*]
已取消 --> [*]
已关闭 --> [*]
已退款 --> [*]

# 与其他行为图的区别

关注点
状态图单个对象的状态变化
活动图业务流程、工作流、算法流
时序图多对象之间的消息时间顺序
通信图多对象之间的链接和消息编号

# 7. 构件图

构件图描述系统由哪些可替换的软件单元构成,以及这些构件通过哪些接口协作。

# 核心元素

元素含义
构件 Component模块化、可替换的软件单元
提供接口构件对外提供的服务
需求接口构件运行所需要的外部服务
依赖关系一个构件使用另一个构件

# 构件图近似示例

Mermaid 没有 UML 构件图专用语法,使用 flowchart 表达构件和接口依赖。

1
2
3
4
5
6
7
8
9
10
11
12
13
flowchart LR
Web[Web 前端构件]
Api[API 网关构件]
Order[订单服务构件]
Payment[支付服务构件]
Db[(订单数据库)]
PayExt[外部支付平台]

Web --> Api
Api --> Order
Order --> Payment
Order --> Db
Payment --> PayExt

# 8. 部署图

部署图描述系统的物理部署结构,回答软件运行在哪些硬件或执行环境上、节点之间如何通信。

# 核心元素

元素含义
节点 Node具备计算能力的设备或执行环境
设备节点 Device物理硬件,如服务器、客户端、路由器
制品 Artifact可部署的软件产物,如 jar、war、exe、配置文件
连接 Association节点之间的通信路径,可标注协议

# 部署图近似示例

1
2
3
4
5
6
7
8
9
10
11
12
13
flowchart LR
Client[客户端浏览器]
Nginx[Web 服务器 / Nginx]
App[应用服务器 / Spring Boot]
Redis[(Redis 缓存)]
DB[(PostgreSQL 数据库)]
Pay[外部支付服务]

Client -- HTTPS --> Nginx
Nginx -- HTTP --> App
App -- TCP --> Redis
App -- JDBC --> DB
App -- HTTPS --> Pay

# 9. 建模阶段选择

阶段推荐图重点
系统规划上下文图、简单用例图明确范围和外部接口
系统分析用例图、用例描述、活动图、领域类图、状态图明确 “做什么”
系统设计设计类图、时序图、构件图、部署图、包图明确 “怎么做”
实现与维护类图、部署图、构件图理解代码结构和运行环境

# 10. 本专题考点提炼

  1. 用例图定义系统功能边界,核心是参与者、用例、系统边界和四种关系。
  2. include 是必选公共子功能, extend 是条件触发的可选扩展。
  3. 类图表达静态结构,重点掌握关联、聚合、组合、依赖、泛化、实现。
  4. 活动图适合业务流程和算法流程,泳道用于表达职责分工。
  5. 时序图强调时间顺序,通信图强调对象链接结构。
  6. 状态图适合描述单个对象生命周期。
  7. 构件图看软件模块与接口,部署图看物理节点和运行环境。
  8. 分析阶段模型偏业务,设计阶段模型偏技术实现。

# 11. 快速自测

  • 用例图中 Actor 能不能是系统内部模块?
  • includeextend 的箭头方向分别是什么?
  • 聚合和组合的生命周期差异是什么?
  • 活动图和状态图的关注对象有什么不同?
  • 时序图和通信图为什么可以互相转化?
  • 构件图和部署图分别回答什么问题?
更新于

请我喝[茶]~( ̄▽ ̄)~*

梦前辈 微信支付

微信支付

梦前辈 支付宝

支付宝