九种常见UML图

类图(Class Diagram)
> 统一建模语言(UML)中最基础、最常用的结构建模图,用于描述系统的静态结构。
1. 核心定义
类图通过展示
类 | 接口 | 属性 | 操作 | 关系
来刻画面向对象系统的静态结构,是
- 可视化工具
- 设计蓝图
- 代码生成的直接依据
- 文档与沟通标准
2. 组成元素
| 元素 | 语法片段 | 说明 |
|---|---|---|
| 类 | ClassName |
封装属性+操作的对象模板 |
| 接口 | <<interface>> InterfaceName |
仅定义操作规范,无实现 |
| 属性 | - name : Type [multiplicity] |
对象状态 |
| 操作 | + method(p : T) : R |
对象行为 |
| 关系 | 见下表 | 类与类之间的语义连接 |
3. 关系类型速查
| 关系 | 箭头/线 | 语义 | 示例 |
|---|---|---|---|
| 关联 | A ── B |
长期知道/使用 | 学生 — 课程 |
| 聚合 | A ◇─ B |
整体-部分(弱) | 大学 ◇— 学院 |
| 组合 | A ◆─ B |
整体-部分(强) | 房子 ◆— 房间 |
| 继承 | A △─> B |
一般/特殊 | 猫 △—> 动物 |
| 实现 | A △-- B |
类实现接口 | Service △-- Runnable |
| 依赖 | A ···> B |
临时使用 | 参数、局部变量 |
4. 可见性符号
| 符号 | 可见性 | 语言关键字 |
|---|---|---|
+ |
public | public |
- |
private | private |
# |
protected | protected |
~ |
package | (default) |
5. 建模层次
- 概念层 – 业务领域实体(无技术细节)
- 说明层 – 系统职责与接口(分析)
- 实现层 – 接近代码(类型、可见性、方法签名)
6. 典型用途
- 面向对象系统设计(OOD)
- 数据库概念建模(可转 ER)
- 框架 / API 设计
- 代码逆向工程(生成图)
- 教学、文档、评审
7. 一句话总结
> 类图是面向对象系统的 “骨架图”,定义了谁由什么组成、如何协作,是连接需求、设计与代码的桥梁。
类图图示

车的类图结构为<>,表示车是一个抽象类;
它有两个继承类:小汽车和自行车;它们之间的关系为实现关系,使用带空心箭头的虚线表示;
小汽车为与SUV之间也是继承关系,它们之间的关系为泛化关系,使用带空心箭头的实线表示;
小汽车与发动机之间是组合关系,使用带实心箭头的实线表示;
学生与班级之间是聚合关系,使用带空心箭头的实线表示;
学生与身份证之间为关联关系,使用一根实线表示;
学生上学需要用到自行车,与自行车是一种依赖关系,使用带箭头的虚线表示;
对象图(Object Diagram)
> UML 结构建模图之一,描述系统在某一具体时刻(快照)存活的对象及其相互关系。
1. 核心定义
- 对象图是类图的实例化(Instance Level)。
- 展示 “此刻有哪些对象、对象的当前值、对象之间的链接”。
- 仅反映静态快照,不表达交互顺序;随系统运行而动态变化,因而生命周期有限。
2. 与类图的 3 句话对比
| 维度 | 类图 | 对象图 |
|---|---|---|
| 抽象级别 | 类型层(Type) | 实例层(Instance) |
| 内容 | 类、接口、属性模板、操作、关系 | 对象、属性当前值、链接 |
| 存在时间 | 设计期永久有效 | 运行期某一时刻快照 |
3. 组成元素
| 元素 | 语法片段 | 说明 |
|---|---|---|
| 对象 | objectName : ClassName 或 :ClassName |
类的实例,可匿名 |
| 属性值 | attribute = value |
对象在快照时刻的具体状态 |
| 链接(Link) | 实线 ─ |
实例级别的关联,称为 Link(类图是 Association) |
| 槽(Slot) | 属性-值对列表 | 存储在对象分栏内 |
4. 关系表示速查
| 关系 | 符号 | 语义 | 示例 |
|---|---|---|---|
| 链接 | obj1 ── obj2 |
实例间引用/连接 | alice ── cs101 |
| 继承实例 | 无特殊符号 | 通过对象类型隐式体现 | :Cat 对象即 :Animal 的子实例 |
| 实现实例 | 同上 | 对象实现某接口 | printer : Printable |
5. 可见性 & 多重性
- 无可见性符号(对象已封装,仅展示当前值)。
- 多重性在对象图中不出现(每个对象都是单个实例)。
6. 建模层次与用途
| 层次 | 目的 | 场景示例 |
|---|---|---|
| 分析 | 验证类图是否满足业务场景 | “注册课程”快照:学生 alice 链接课程 cs101 |
| 设计 | 演示复杂数据结构在内存中的映像 | 树、图、链表某一时刻布局 |
| 测试 | 作为单元测试期望状态的可视化 | 执行某方法后对象图应如右图 |
7. 生命周期特点
- 只在系统运行的一段区间内有效;
- 可随调试器、日志、序列化数据捕获;
- 常被用作运行时验证类图设计的合理性。
8. 一句话总结
> 对象图是类图的 “快照”:把抽象模板具体化,让开发者在某一真实时刻看到活生生的对象与链接,用于验证、讲解与测试。
对象图图示

上面的对象图代表订单管理系统,顾客在一个特定的时间下单。它具有顾客、订单、特殊订单和一般订单四个对象。现在客户对象(C)是与三个订单对象(O1,O2和O3)。这些订单对象相关联的特殊订单和一般订单对象(S1,S2和N1)。顾客具有以下三个具有不同数目的订单(12,32和40),用于所考虑的特定的时间。
UML 组件图(Component Diagram)
> 又称构件图,描述软件系统物理的、可替换的、可部署的模块(组件)及其接口、依赖、组装关系,提供高层次架构视图与实现路标。
1. 核心定义
组件图展示运行时物理模块(如 DLL、JAR、EXE、微服务镜像)如何
- 实现和使用接口
- 通过端口与连接器组装
- 支持增量式开发、独立部署与热替换
2. 组成元素速查
| 元素 | 表示法 | 说明 |
|---|---|---|
| 组件(Component) | <<component>> 矩形或「组件」图标 |
物理可替换模块,封装实现 |
| 接口(Interface) | 圆圈(供给)或半圆(需求) | 组件对外/对内契约 |
| 端口(Port) | 小正方形置于边界 | 组件的交互点,可命名 |
| 连接器(Connector) | 实线/装配链/委托链 | 端口-端口、组件-接口之间的运行时连接 |
| 关系(Relationship) | 依赖、装配、委托 | 见下表 |
3. 关系类型
| 关系 | 符号 | 语义 | 示例 |
|---|---|---|---|
| 装配(Assembly) | ●──○ |
需求接口连接到供给接口 | OrderService ●──○ PaymentAPI |
| 委托(Delegation) | 实线+<<delegate>> | 把外部调用转发到内部组件 | 容器组件委托到子模块 |
| 依赖(Dependency) | 虚线箭头 | 编译/运行时依赖 | WebApp ···> Logging.jar |
4. 层级化视图
- 黑盒 – 仅显示组件名与接口(对外可见)
- 灰盒 – 暴露端口与关键接口(架构评审)
- 白盒 – 展开内部子组件与连线(详细设计)
5. 典型用途
| 阶段 | 用途 |
|---|---|
| 架构设计 | 划分可执行/可部署单元,定义对外契约 |
| 任务分配 | 按组件切分团队/模块,明确依赖与接口责任人 |
| 构建脚本 | 指导 Maven/Gradle 模块、Docker 镜像划分 |
| 部署规划 | 映射到节点、容器、微服务拓扑 |
| 遗留系统 | 反向工程得到现有 JAR/DLL 依赖图 |
6. 与其他图的区别
| 图 | 关注点 |
|---|---|
| 类图 | 静态类型结构(类、继承、关联) |
| 组件图 | 物理模块划分与接口组装 |
| 部署图 | 节点/硬件上的实际部署位置 |
7. 一句话总结
> 组件图是 “物理拼装说明书”:它告诉开发者系统由哪些可替换的二进制构件构成,它们通过何种接口、端口与连接器协同工作,为增量交付、独立部署提供架构路标。
组件图图示

在购买一件商品时,我们首先是浏览商品,了解商品详情。在商品详细页面上,我们可以看到一个“加入购物车”。可以绘制网上商城组件图,如上图所示:购物车、订单、库存、支付管理组件。
UML 部署图(Deployment Diagram)
> 描述系统运行时刻的物理拓扑:有哪些节点(Node)、硬件配置、通信路径,以及软件制品(Artifact)如何部署到节点上。
1. 核心定义
- 唯一的一张静态部署视图(每个系统通常只维护一份)。
- 面向分布式、嵌入式、云原生环境,帮助架构师评估性能、容错、伸缩、安全等物理约束。
- 是运维、DevOps、自动化部署脚本的可视化输入。
2. 组成元素
| 元素 | 表示法 | 说明 |
|---|---|---|
| 节点(Node) | <<device>> 立方体或 <<executionEnvironment>> 矩形 |
物理或虚拟计算资源(服务器、手机、传感器、容器、Pod) |
| 制品(Artifact) | <<artifact>> 矩形+文档图标 |
可部署的物理单元:JAR、DLL、Docker 镜像、AI 模型、脚本 |
| 通信路径(Communication Path) | 实线 | 节点之间的网络连接,可标注协议与带宽 |
| 部署(Deployment) | 虚线箭头 ···> 或嵌套 |
制品“驻留”于节点 |
| 设备(Device) | <<device>> |
硬件实体,如 EC2 裸金属 |
| 执行环境(Execution Environment) | <<executionEnvironment>> |
软件容器,如 JVM、操作系统、Kubernetes |
3. 关系速查
| 关系 | 符号 | 语义 | 示例 |
|---|---|---|---|
| 通信路径 | node1 ── node2 |
网络/总线连接 | WebServer ──{HTTPS}─ DB_Server |
| 部署 | artifact ···> node |
制品部署到节点 | shop.jar ···> WebServer |
| 嵌套 | 节点内部放制品 | 物理包含 | 在 <<device>> RaspberryPi 内放置 firmware.bin |
4. 建模层级
- 纯硬件层 – 服务器、交换机、边缘设备
- 虚拟化层 – VM、容器、Pod、Runtime
- 应用层 – 制品(镜像、JAR、AI 模型)映射到以上资源
5. 典型用途
| 场景 | 价值 |
|---|---|
| 分布式架构评审 | 发现单点故障、网络瓶颈、数据亲和性 |
| 云迁移 | 评估上云粒度与成本(裸金属→VM→容器→Serverless) |
| 安全与合规 | 识别跨区/跨网段流量,满足等保/PCI-DSS |
| 自动化运维 | 生成 Ansible、Terraform、Kubernetes YAML 的“蓝图” |
| 嵌入式系统 | 确认固件烧录位置、CAN 总线连接 |
6. 与其他图的区别
| 图 | 关注点 |
|---|---|
| 组件图 | 软件模块的接口与组装 |
| 部署图 | 这些模块最终“跑在哪些硬件/虚拟节点上”以及“如何联网” |
7. 一句话总结
> 部署图是 “物理地图”:它告诉运维与架构师,软件制品最终驻留在哪台节点、通过什么网络、以何种协议协同工作,为分布式系统的性能、容错与自动化部署提供唯一且权威的静态拓扑视图。
部署图图示

UML 用例图(Use-Case Diagram)
> 以动态行为视角展示系统边界外可见的功能单元(用例),并刻画主角(Actor) 与这些 功能之间的需求关系,是需求捕获与沟通的核心入口。
1. 核心定义
- 描述系统 “做什么”(What),而非 “怎么做”(How)。
- 从外部观察者角度建立功能需求模型,为后续分析、测试、UI 原型提供契约。
- 是用户、客户、开发、测试四方对齐的“最小共识图”。
2. 组成元素
| 元素 | 表示法 | 说明 |
|---|---|---|
| 主角(Actor) | 火柴人图标 | 与系统交互的角色:用户、外部系统、硬件、时间触发器 |
| 用例(Use Case) | 椭圆 + 动宾短语 | 系统提供的可观测、可度量的业务功能 |
| 系统边界(System Boundary) | 矩形框 + <<system>> 名称 |
划定研究范围,框内=当前系统,框外=Actor |
| 关系(Relationship) | 见下表 | 描述 Actor↔用例、用例↔用例之间的合法交互 |
3. 关系类型速查
| 关系 | 符号 | 语义 | 示例 |
|---|---|---|---|
| 关联(Association) | 实线 | Actor 参与用例 | 用户 ─ 下单 |
| 包含(Include) | <<include>> 虚线箭头 |
公共/必 reused 行为 | 下单 ··> 检查库存 |
| 扩展(Extend) | <<extend>> 虚线箭头 |
条件性、可选增强 | 支付 ··> 使用优惠券 |
| 泛化(Generalization) | 空心三角箭头 | Actor 或用例的继承 | 会员 △─> 用户 |
4. 建模粒度层次
- 业务用例图 – 组织级视角,描述业务价值(如“获得贷款”)。
- 系统用例图 – 软件级视角,描述系统功能(如“提交贷款申请”)。
- 子功能用例图 – 对复杂用例再分解,辅助迭代规划。
5. 典型用途
| 阶段 | 价值 |
|---|---|
| 需求获取 | 快速捕获谁需要什么功能,避免“功能蔓延” |
| 范围界定 | 通过边界框明确 MVP 与二期功能 |
| 测试设计 | 每个用例可直接映射验收标准(Acceptance Criteria) |
| UI 原型 | 用例→任务流→界面故事板 |
| 项目估算 | 用例点数(UCP)作为工期/成本输入 |
6. 最佳实践一句话
> “用例图是用户故事的‘鸟瞰版’:一个椭圆就是一张用户故事卡片,一条实线就是一次对话入口。”
7. 常见误区提醒
| 误区 | 正确做法 |
|---|---|
| 把步骤当用例 | 用例=目标,步骤应放到活动图/用例描述文本 |
| 出现 CRUD 四个椭圆 | 合并为“管理××”或用活动图展开 |
| 画成菜单树 | 用例应体现业务价值,而非 UI 层级 |
8. 一句话总结
> 用例图是 “需求雷达”:让所有人一眼看清谁(Actor) 通过什么功能(用例)与系统边界交互,为后续分析、设计、测试、交付提供可追溯、可验收的功能契约。
用例图图示

UML 序列图(Sequence Diagram)
> 又称时序图 / 顺序图,是一种行为动态图;
> 专注于时间维度,通过对象之间交换消息的严格顺序来可视化单个场景或用例控制流。
1. 核心定义
- 描述一组生命线上对象在某一用例/场景时间流中如何协作完成目标。
- 每条水平消息 = 一次调用或信号,对应类操作、状态机触发事件或异步信号。
- 属于动态建模,与活动图(控制流)、状态机图(对象状态)互补。
2. 组成元素
| 元素 | 表示法 | 说明 |
|---|---|---|
| 对象(Object) | 对象名:类名 矩形 |
交互实体,可为实例、组件、参与者 |
| 生命线(Lifeline) | 向下虚线 | 对象存在的时间区间 |
| 激活条(Activation Bar) | 细高矩形 | 对象正在执行某段代码或活动 |
| 消息(Message) | 水平箭头 + 文字 op(arg) |
交互单元,分同步、异步、返回、创建、销毁等 |
3. 消息类型速查
| 消息 | 箭头 | 语义 | 示例 |
|---|---|---|---|
| 同步调用 | 实心三角 + 实线 | 阻塞等待返回 | calculateTotal() |
| 异步调用 | 开放三角 + 实线 | 立即继续 | sendAsync() |
| 返回 | 虚线 + 开放三角 | 显式或隐式结果 | ← total:Money |
| 创建 | «create» 虚线 |
实例化新对象 | «create» :Order |
| 销毁 | «destroy» 或 X |
生命周期结束 | 生命线底部打 X |
| 自消息 | 箭头折回自身 | 内部调用 | validate() |
| 循环 / 可选 / 并行 | 交互框 alt/opt/loop/par |
组合片段 | alt[amount>0] |
4. 常用组合片段(Combined Fragment)
| 操作符 | 用途 | 示例 |
|---|---|---|
alt |
多分支条件 | alt [paid] / [unpaid] |
opt |
可选执行 | opt [express] |
loop |
迭代 | loop [for each item] |
par |
并行 | par 线程1, 线程2 |
ref |
引用其他序列图 | ref :AuthSubDiagram |
5. 建模步骤(最佳实践)
- 选一个用例或一个场景(如“下单”主成功路径)。
- 确定左侧启动者(Actor/边界对象)。
- 按时间顺序从左→右、上→下依次放置关键对象。
- 画出消息链,确保返回消息可省略以降噪。
- 对分支/循环使用组合片段,避免“瀑布”式长图。
- 与类图对照:每条消息应能在目标类中找到对应操作。
6. 典型用途
| 阶段 | 价值 |
|---|---|
| 需求分析 | 把用例文本转为可视化故事板,验证场景完整性 |
| 设计 | 精化类 public 方法签名,发现遗漏操作 |
| 测试 | 直接生成单元/集成测试用例(Given-When-Then) |
| 文档 | 为API、协议、时序敏感算法提供精确描述 |
| 调试 | 与日志时间戳对齐,快速定位调用链故障点 |
7. 与其他交互图对比
| 图 | 关注点 |
|---|---|
| 序列图 | 时间顺序(突出调用链) |
| 通信图(协作图) | 对象结构(突出连接拓扑) |
| 时序图(Timing Diagram) | 绝对时间/状态变化(实时系统) |
8. 一句话总结
> 序列图是 “交互电影胶片”:把对象当演员,消息当台词,按时间轴放映一次完整协作,让调用顺序、并发、分支、返回一目了然,为理解、设计、测试、调试提供精确动态脚本。
序列图图示

UML 协作图(Communication Diagram)
> 又名通信图,是交互图的一种,与序列图语义等价但视角不同:
> 突出对象间的空间结构(链接拓扑),弱化严格时间顺序,通过编号表达消息次序。
1. 核心定义
- 描述一组对象在某一用例/场景中如何通过现有链接交换消息完成协作。
- 属于动态建模,但图形式更接近类图的实例层(对象+链接)。
- 消息序号 = 唯一时间线索,可嵌套(1.1、1.2、1.2.1)。
2. 组成元素
| 元素 | 表示法 | 说明 |
|---|---|---|
| 对象(Object) | obj:Class 矩形 |
交互实例,与序列图一致 |
| 链接(Link) | 实线 | 实例级别的关联,允许自反 |
| 消息(Message) | 带编号箭头 1: op(arg) |
沿链接传递的调用或信号 |
3. 消息编号规则
| 风格 | 示例 | 场景 |
|---|---|---|
| 顺序编号 | 1 → 2 → 3 |
简单线性流 |
| 嵌套编号 | 1 → 1.1 → 1.2 → 2 |
体现调用-返回层次 |
| 并行编号 | 1.1a / 1.1b |
并发分支(可选扩展) |
4. 与序列图快速对比
| 维度 | 序列图 | 协作图 |
|---|---|---|
| 焦点 | 时间顺序(生命线垂直) | 空间拓扑(对象布局自由) |
| 时间表达 | 几何位置(上→下) | 数字编号 |
| 链接显式 | ❌ 隐含 | ✅ 显式画出,可一眼看出对象间连接 |
| 适合 | 复杂算法、实时协议 | 对象网络、设计模式、结构验证 |
5. 建模最佳实践
- 先画对象与现有链接(可复用类图关联)。
- 从启动对象开始,沿链接依次标注编号+消息。
- 使用嵌套编号体现调用层次,避免箭头交叉过多。
- 对循环/分支可用
*[for each] 4: doX()简短注解。 - 与序列图互为视图:结构疑问→协作图;时序疑问→序列图。
6. 典型用途
| 阶段 | 价值 |
|---|---|
| 设计评审 | 验证对象间链接是否足够支持用例 |
| 模式文档 | 展示 GoF 设计模式(如 Observer、Chain of Responsibility)的运行时对象网 |
| 逆向工程 | 从代码快速生成对象+调用链拓扑 |
| 教学沟通 | 让初学者一眼看清“谁连谁、谁调谁” |
7. 一句话总结
> 协作图 = “带消息编号的对象拓扑图”:用空间视角揭示对象如何通过现有链接协作完成场景,为结构验证、模式说明、代码走查提供清晰直观的动态蓝图。
示例:
keyPress(key) [key==ESC] / beep() ^ selfDestruct()
协作图图示

UML 活动图(Activity Diagram)
> UML 动态行为图之一,以“控制流+数据流”为核心,描述从活动到活动的流程、分支、并发与约束;
> 是状态图的流化特化,强调动作序列而非状态停留,广泛用于业务过程、用例实现、工作流、算法建模。
1. 核心定义
- 展示满足用例/业务目标所需各项活动及其执行顺序、条件分支、并行分叉、同步合并。
- 可嵌套调用其他活动(可重用子流程),也可引用对象节点表达数据流动。
- 天然支持并行识别与资源瓶颈分析,是流程再造、自动化编排、程序实现的直接输入。
2. 主要元素速查
| 元素 | 表示法 | 说明 |
|---|---|---|
| 初始节点(Initial Node) | ● 实心圆 | 流程唯一入口 |
| 活动(Activity) | 圆角矩形 动词+宾语 |
原子或分解的可执行单元 |
| 动作(Action) | 最小圆角矩形 | 不可再分的单步任务 |
| 控制流(Control Flow) | 实线箭头 | 执行顺序 |
| 对象流(Object Flow) | 虚线箭头 | 数据/对象在动作间传递 |
| 决策/合并(Decision/Merge) | 菱形 | 条件分支或多进单出 |
| 分叉/汇合(Fork/Join) | 粗黑条 | 并发分叉与同步汇合 |
| 泳道(Swimlane) | 矩形分区 | 按角色、部门、组件划分职责 |
| 终止节点(Activity Final) | ⊙ 牛眼 | 流程结束 |
| 发送/接收信号(Send/Receive Signal) | 五边形 | 事件驱动或异步交互 |
| 可中断活动区(Interruptible Region) | 虚线框 | 允许外部事件中断流程 |
| 扩展区(Expansion Region) | 虚线框+关键字 | 对集合元素批量处理 |
3. 控制节点与并发
| 场景 | 节点组合 | 价值 |
|---|---|---|
| 条件路由 | Decision → [guard] → 分支 → Merge |
支持if-else/switch |
| 并行处理 | Fork → 多分支 → Join |
识别可并行任务,优化吞吐量 |
| 循环 | Merge → 决策 → [继续] → 活动 → Merge |
显式while/for |
4. 建模步骤(最佳实践)
- 选一条用例路径或业务流程(如“客户下单”)。
- 找出起点→主要活动→终点,列出业务动作动词。
- 按泳道划分责任人/系统组件,暴露跨部门等待点。
- 对并行任务使用
Fork/Join,对异常/超时使用可中断区。 - 标注对象节点(订单、发票),验证数据一致性。
- 与序列图互补:活动图=流程全景,序列图=对象交互细节。
5. 典型用途
| 阶段 | 价值 |
|---|---|
| 业务分析 | 现状(As-Is) vs 未来(To-Be)流程可视化,发现冗余、等待、瓶颈 |
| 用例实现 | 把用例描述转为可实现的活动流,指导类/服务/微服务划分 |
| 工作流引擎 | 直接导出 BPMN / WF XML 可执行模型 |
| 并发设计 | 识别可并行路径,指导多线程、消息队列、事件驱动实现 |
| 算法教学 | 替代传统流程图,支持对象流+并发 |
6. 与其他图对比
| 图 | 关注点 |
|---|---|
| 状态图 | 状态中心(对象在某一状态停留) |
| 序列图 | 时间中心(对象间消息顺序) |
| 活动图 | 流程中心(动作序列、并发、数据流) |
7. 一句话总结
> 活动图是 “可并发的流程图++”:用活动节点+控制/数据流+分叉汇合+泳道,让业务、用例、算法、工作流的执行顺序、并行性、数据传递一目了然,为优化、自动化、编码提供可直接落地的流程蓝图。
活动图图示

UML 状态图(State Machine Diagram)
> 专用于描述单个对象(或子系统)在生命周期内因事件、条件、动作而转换状态的动态行为模型;
> 是 UML 对 Harel 状态机 的实现,可直接生成代码、用于嵌入式、UI、后端状态管理等场景。
1. 核心定义
- 刻画“对象在什么状态下”“收到什么事件”“满足什么条件”后“执行什么动作”并“进入下一状态”。
- 由 5 大核心元素构成:状态、转换、事件、活动、动作。
- 与活动图互补:状态图以状态为中心,活动图以流程为中心。
2. 五要素详解
| 要素 | 说明 | 示例 |
|---|---|---|
| 状态(State) | 对象满足某条件、等待某事件、执行某活动的有限时间段 | Idle、Connected、Printing |
| 转换(Transition) | 源状态 → 目标状态的有向关系,附事件[条件]/动作 | connect() [signal OK] / initialize() |
| 事件(Event) | 在时间/空间上对状态机有意义的** occurrence** | 信号、调用、时间到、异常、对象创建/销毁 |
| 活动(Activity) | 非原子、可中断的持续行为(do/) |
do / 加热到60℃ |
| 动作(Action) | 原子、不可中断的瞬时计算或副作用 | entry / startMotor、exit / logEvent |
3. 常用元素速览
| 元素 | 表示法 | 说明 |
|---|---|---|
| 初态(Initial) | ● 实心圆 | 唯一默认入口 |
| 终态(Final) | ⊙ 牛眼 | 生命周期结束 |
| 简单状态 | 圆角矩形 + 名称 | 无子结构 |
| 复合状态 | 嵌套状态图 | 支持层次化 |
| 并发区(Region) | 虚线分栏 | 同一级别并行状态 |
| 浅/深历史 | H / H* |
记忆上次离开的子状态 |
| 转换字符串 | 事件(参数)[条件]/动作 |
例:doorClosed[timeout]/buzz() |
| 内部转换 | 状态内箭头 | 不离开当前状态:inc()/counter++ |
4. 转换标签完整语法
事件(参数) [守卫条件] / 效果动作 ^ 发送事件
示例:
keyPress(key) [key==ESC] / beep() ^ selfDestruct()
5. 建模步骤(最佳实践)
- 列出对象所有稳定状态(名词)。
- 找出触发状态变化的事件(动词/信号)。
- 补充守卫条件与动作/活动。
- 对复杂状态拆分子状态或并发区,避免“平面大饼”。
- 与类图对照:每个状态通常对应一组属性值;与序列图对照:事件来源自外部消息。
6. 典型用途
| 阶段 | 价值 |
|---|---|
| 需求分析 | 揭示对象生命周期规则与异常场景(订单取消、设备故障) |
| 设计 | 直接生成状态模式、switch-case、Spring StateMachine 代码 |
| 嵌入式 | 描述固件状态机,保证实时性与可预测性 |
| 前端/移动端 | 管理UI 状态流(加载、空数据、错误、刷新) |
| 测试 | 一条转换路径 = 一个测试用例,可自动生成状态切换表 |
7. 与其他图对比
| 图 | 关注点 |
|---|---|
| 活动图 | 流程/算法步骤(无明确状态停留) |
| 序列图 | 对象间消息顺序(不突出状态) |
| 状态图 | 单个对象状态变迁(以状态为中心) |
8. 一句话总结
状态图是“对象生命周期的故事板”:用状态=幕、事件=情节转折、动作=台词,让任何外部或内部刺激如何改变对象面貌一目了然,为代码、测试、运维提供可执行、可验证、可优化的动态行为契约。
状态图图示

注:部分图示摘自网络,仅作为个人学习使用。

浙公网安备 33010602011771号