UML 图知识点梳理总结
一、UML 概述与分类
UML(Unified Modeling Language,统一建模语言)是面向对象软件系统建模的标准化图形语言,用于可视化、规约、构造和文档化软件系统。
UML 不是编程语言,而是建模语言;不是方法论,而是图形表示法。UML 2.x 共定义了 14 种图,分为两大类:
结构图 静态图(6 种)
描述系统的静态结构,不随时间变化
- 类图 Class Diagram
- 对象图 Object Diagram
- 构件图 Component Diagram
- 部署图 Deployment Diagram
- 制品图 Artifact Diagram
- 包图 Package Diagram
行为图 动态图(8 种)
描述系统的动态行为,随时间变化
- 用例图 Use Case Diagram
- 活动图 Activity Diagram
- 状态机图 State Machine Diagram
- 顺序图 Sequence Diagram
- 通信图 Communication Diagram
- 定时图 Timing Diagram
- 交互概览图 Interaction Overview Diagram
- 制品图(也可归为行为图)
💡 记忆口诀
结构图:类对构部制包(类图、对象图、构件图、部署图、制品图、包图)
行为图:用活状交(用例图、活动图、状态图、交互图)
交互图:顺通定交(顺序图、通信图、定时图、交互概览图)
二、结构图(静态图)详解
1. 类图 Class Diagram
面向对象设计的核心
- 特性:描述类、接口、协作和它们之间的关系
- 侧重点:静态结构设计
- 元素:类、接口、关联、泛化、依赖、聚合、组合、实现
- 场景:详细设计阶段,描述系统静态结构
2. 对象图 Object Diagram
某一时刻的快照
- 特性:描述某一时刻对象及其关系(实例 snapshot)
- 侧重点:展示系统在某一时刻的状态
- 元素:对象(带下划线)、链接
- 场景:调试、理解复杂类图的实际实例
3. 构件图 Component Diagram
模块化结构展示
- 特性:描述构件及其依赖关系
- 侧重点:物理构件组织
- 元素:构件、接口(提供/需求)、依赖关系
- 场景:架构设计,描述系统组件组织
4. 部署图 Deployment Diagram
软硬件映射关系
- 特性:描述硬件节点和软件构件的部署
- 侧重点:运行时部署
- 元素:节点(立方体)、构件、依赖关系
- 场景:系统部署,描述物理架构
5. 制品图 Artifact Diagram
物理文件组织
- 特性:描述物理文件(如 jar、dll、exe)
- 侧重点:物理文件组织
- 元素:制品(矩形+图标)、依赖关系
- 场景:配置管理,描述文件组织
6. 包图 Package Diagram
模型分层结构
- 特性:描述包和依赖关系
- 侧重点:模型组织,展示分层结构
- 元素:包(文件夹图标)、依赖关系、合并、访问
- 场景:架构设计,描述系统分层
三、行为图(动态图)详解
3.1 用例图 Use Case Diagram
- 特性:描述系统功能和外部交互
- 侧重点:功能需求,展示系统与外部参与者的交互
- 元素:参与者(Actor)、用例(椭圆)、系统边界、关系
- 关系:包含(include)、泛化、扩展(extend)— 只有这 3 种!
- 场景:需求分析阶段,描述系统功能
⚠️ 易错点
用例图没有聚合/组合关系!聚合和组合是类图的概念。用例图只有包含、泛化、扩展三种关系。
3.2 活动图 Activity Diagram
- 特性:描述工作流程,类似流程图
- 侧重点:业务流程,展示活动的顺序和分支
- 元素:活动节点、决策节点(菱形)、分叉/合并(粗横线)、泳道、初始/终止节点
- 特殊:支持并发(分叉条 Fork / 汇合条 Join)
- 场景:业务流程建模,描述算法流程
3.3 状态机图 State Machine Diagram
- 特性:描述对象状态转换
- 侧重点:对象生命周期,展示状态变化和触发事件
- 元素:状态(圆角矩形)、转换(箭头)、事件、动作、初始/终止伪状态
- 关键概念:事件[监护条件] / 动作
- 场景:描述对象行为,特别是状态驱动的系统
四、交互图详解
交互图是行为图的子类,描述对象之间的交互,共 4 种:
4.1 顺序图 Sequence Diagram
时间顺序
- 特性:强调时间顺序的消息交互
- 元素:对象、生命线(虚线)、消息(箭头)、激活条
- 消息类型:同步(实线实心箭头)、异步(实线开放箭头)、返回(虚线开放箭头)
- 片段:alt(条件)、loop(循环)、opt(可选)、par(并行)
- 场景:描述用例实现,展示对象协作的时间序列
4.2 通信图 Communication Diagram
对象链接
- 特性:强调对象之间的链接和消息
- 元素:对象、链接(直线)、消息(带编号)
- 特点:消息编号标识顺序(1, 1.1, 1.2, 2...)
- 场景:描述对象协作,展示对象关系
4.3 定时图 Timing Diagram
时间约束
- 特性:强调时间约束
- 元素:状态、时间轴、约束条件
- 特点:横轴为时间,纵轴为状态,展示状态随时间的变化
- 场景:实时系统,描述时间敏感的行为
4.4 交互概览图 Interaction Overview Diagram
控制流
- 特性:活动图和顺序图的混合
- 元素:交互(框)、决策、分支、初始/终止节点
- 特点:用活动图的控制流组织多个交互片段
- 场景:复杂交互的概览,描述交互流程
💡 顺序图 vs 通信图
两者都是交互图,表达的信息等价(可以相互转换)。区别在于:
• 顺序图:强调时间顺序,纵轴是时间,消息从上到下排列
• 通信图:强调对象链接,用编号标识消息顺序,展示对象的空间组织
五、UML 关系体系
5.1 用例图关系(3 种)
| 关系 |
方向 |
含义 |
关键字 |
示例 |
| 包含 include |
基本用例 → 抽象用例 |
必须执行的公共用例 |
<<include>> |
学习和测验都包含权限检查 |
| 泛化 |
父 → 子 |
父子继承关系 |
实线空心三角箭头 |
登录(父)→ 手机号登录、密码登录(子) |
| 扩展 extend |
扩展用例 → 基本用例 |
可选执行的扩展用例 |
<<extend>> |
看视频(基本)← 冲会员(可选扩展) |
⚠️ 包含 vs 扩展
• 包含(include)= 必须执行(mandatory):基本用例执行时,被包含用例一定执行
• 扩展(extend)= 可选执行(optional):只有满足条件时,扩展用例才会执行
5.2 类图关系(6 种)
| 关系 |
强度 |
含义 |
UML 表示 |
示例 |
| 依赖 |
最弱 ★ |
一个事物变化影响另一个事物,临时性使用 |
虚线箭头 ---> |
人依赖手机打电话 |
| 泛化 |
★★ |
特殊/一般关系(继承) |
实线空心三角 → |
动物 → 猫、狗 |
| 关联 |
★★ |
一组链,对象之间的连接,可有方向和多重性 |
实线箭头 → |
学生选课 |
| 聚合 |
★★★ |
整体与部分生命周期不同,部分可独立存在 |
空心菱形 ◊→ |
车队和车辆(车可离开车队) |
| 组合 |
★★★★ |
整体与部分生命周期相同,部分不能独立存在 |
实心菱形 ♦→ |
人和心脏(心脏不能离开人) |
| 实现 |
★★★ |
接口与类之间的关系,类实现接口定义的操作 |
虚线空心三角 --> |
List 接口 ← ArrayList 类 |
🚨 聚合 vs 组合(高频考点)
核心区别:生命周期是否相同
• 聚合:部分可以脱离整体独立存在(弱拥有关系)。例:班级和学生
• 组合:部分不能脱离整体存在(强拥有关系)。例:窗口和按钮
六、图与软件生命周期
不同 UML 图适用于软件开发的不同阶段:
需求分析
→
概要设计
→
详细设计
→
实现
→
测试
| 阶段 |
推荐使用的图 |
说明 |
| 需求分析 |
用例图、活动图 |
用例图描述功能需求;活动图描述业务流程 |
| 概要设计 |
类图、包图、构件图 |
类图描述系统结构;包图/构件图描述模块划分 |
| 详细设计 |
类图、顺序图、状态图 |
类图细化属性方法;顺序图描述交互;状态图描述对象行为 |
| 实现阶段 |
构件图、部署图、制品图 |
构件图描述组件组织;部署图描述物理部署 |
| 测试阶段 |
状态图、用例图 |
状态图用于状态覆盖测试;用例图用于功能验证 |
七、易混淆对比
7.1 类图 vs 对象图
| 对比项 | 类图 | 对象图 |
| 本质 | 模板(抽象) | 实例(具体) |
| 名称 | 类名不带下划线 | 对象名带下划线,格式:对象名:类名 |
| 属性 | 可以有抽象方法 | 只有具体值,无抽象方法 |
| 关系 | 关联、泛化等 | 链接(Link) |
| 生命周期 | 永久存在 | 某一时刻的快照 |
7.2 顺序图 vs 通信图
| 对比项 | 顺序图 | 通信图 |
| 强调 | 时间顺序 | 对象链接 |
| 布局 | 纵轴为时间 | 对象按空间排列 |
| 消息顺序 | 从上到下自然排列 | 用编号(1, 1.1, 2...)标识 |
| 等价性 | 两者信息等价,可以相互转换 |
7.3 活动图 vs 状态图
| 对比项 | 活动图 | 状态图 |
| 描述对象 | 活动流程(做什么) | 状态转换(处于什么状态) |
| 焦点 | 从一个活动到另一个活动 | 从一个状态到另一个状态 |
| 触发 | 活动完成后自动流转 | 需要事件触发转换 |
| 适用 | 业务流程、算法 | 对象生命周期 |
7.4 构件图 vs 部署图
| 对比项 | 构件图 | 部署图 |
| 描述 | 软件组件(逻辑) | 硬件节点(物理) |
| 元素 | 构件、接口、依赖 | 节点、构件、通信路径 |
| 视角 | 软件模块化 | 软硬件映射 |
八、考试重点与答题技巧
8.1 关键词速查表
功能需求
→
用例图
业务流程
→
活动图
状态变化
→
状态机图
时间顺序
→
顺序图
对象链接
→
通信图
静态结构
→
类图
物理部署
→
部署图
实例快照
→
对象图
模块组织
→
构件图 / 包图
生命周期不同
→
聚合
生命周期相同
→
组合
必须执行
→
include
8.2 记忆口诀
8.3 答题技巧
- 看到"功能需求" → 用例图
- 看到"业务流程" → 活动图
- 看到"状态变化" → 状态图
- 看到"时间顺序" → 顺序图
- 看到"对象链接" → 通信图
- 看到"静态结构" → 类图
- 看到"物理部署" → 部署图
- 聚合 vs 组合:看生命周期是否相同
- 包含 vs 扩展:看是否必须执行
- 类图 vs 对象图:类图是模板,对象图是实例
九、补充知识点
9.1 UML 中的 4+1 视图模型
UML 建模常结合 4+1 视图模型来描述系统的不同侧面:
逻辑视图
- 关注系统功能需求
- 使用类图、对象图、状态图
- 面向最终用户
+1:场景视图(用例图)→ 驱动其他四个视图的开发
9.2 UML 图的表示符号速查
| 元素 |
UML 符号/表示 |
说明 |
| 类 | 矩形(三格:类名、属性、方法) | 抽象类名斜体 |
| 对象 | 矩形(名称带下划线) | 格式:对象名:类名 |
| 接口 | <<interface>> + 类名 | 或用圆圈(棒棒糖表示法) |
| 关联 | 实线箭头 | 可标注角色名、多重性 |
| 聚合 | 空心菱形 + 箭头 | 整体端为菱形 |
| 组合 | 实心菱形 + 箭头 | 整体端为菱形 |
| 泛化 | 实线 + 空心三角箭头 | 子类指向父类 |
| 实现 | 虚线 + 空心三角箭头 | 类指向接口 |
| 依赖 | 虚线箭头 | 最弱的关系 |
| 包含 | 虚线 + <<include>> | 基本用例指向被包含用例 |
| 扩展 | 虚线 + <<extend>> | 扩展用例指向基本用例 |
| 参与者 | 火柴人图标 | 用例图中的外部角色 |
| 用例 | 椭圆 | 用例名写在椭圆内 |
9.3 多重性表示法
关联关系中的多重性(Multiplicity)表示关联一端的对象数量:
| 表示 | 含义 |
1 | 恰好 1 个 |
0..1 | 0 或 1 个 |
* | 0 个或多个 |
1..* | 1 个或多个 |
n..m | n 到 m 个 |
9.4 消息类型(顺序图)
同步消息
- 实线 + 实心三角箭头
- 发送方等待接收方处理完
- 常见于方法调用
异步消息
- 实线 + 开放箭头
- 发送方不等待,继续执行
- 常见于事件/信号发送
9.5 交互片段操作符(顺序图)
| 操作符 | 含义 | 对应编程概念 |
alt | 条件分支(互斥) | if-else |
opt | 可选执行 | if(无 else) |
loop | 循环 | for / while |
par | 并行执行 | 多线程并发 |
break | 中断 | break |
critical | 临界区 | synchronized |
ref | 引用其他交互 | 函数调用 |
✅ 总结要点
- UML 共 14 种图,分结构图(6 种)和行为图(8 种)
- 用例图只有 3 种关系:包含、泛化、扩展
- 类图有 6 种关系:依赖、泛化、关联、聚合、组合、实现
- 聚合 vs 组合的核心区别:生命周期是否相同
- 顺序图 vs 通信图:信息等价,强调点不同
- 选图看关键词:功能需求→用例图、业务流程→活动图、状态变化→状态图
- 4+1 视图:逻辑、开发、进程、物理 + 场景(用例图)
相关笔记:[[需求工程总结]] | [[UML关系区别]] | [[4+1视图]]
📅 创建时间:2026 年 5 月 15 日 | 基于 [[UML图总结]] 和 [[UML关系区别]] 整理补充