引言
在软件工程与业务流程建模领域,捕捉系统的动态行为与定义其静态结构同样关键。统一建模语言(UML)为此提供了标准化的词汇,在其图表套件中,活动图是可视化工作流的首选工具。

无论您是在记录复杂的业务规则、设计多线程软件算法,还是规划用户旅程,活动图都能弥合抽象需求与具体实现之间的鸿沟。本综合指南将深入探讨活动图的结构,演示如何建模并发与对象状态,并提供实用的 PlantUML 示例,助您掌握这一关键的 UML 工件。
活动图的核心概念
在深入复杂示例之前,理解核心符号至关重要。活动图本质上是带有特定 UML 语义(用于并行性和对象流)的高级流程图。

| 组件 | 符号说明 | 用途 |
|---|---|---|
| 活动 | 圆角矩形 | 表示一个工作单元、任务或操作。 |
| 初始节点 | 实心黑色圆点 | 工作流的起点。 |
| 终止节点 | 靶心(带点的圆圈) | 表示整个活动的终止。 |
| 决策节点 | 菱形 | 根据守卫条件(如 if/else)分支控制流程。 |
| 合并节点 | 菱形 | 将多个互斥路径重新合并为单一流程。 |
| 分支节点 | 粗水平/垂直条 | 将单一流程拆分为并发并行流程。 |
| 汇合节点 | 粗水平/垂直条 | 将并发流同步回单一路径。 |
| 泳道 | 垂直或水平分区 | 将责任分配给特定的参与者、类或部门。 |
| 对象节点 | 带有状态的矩形[状态] |
显示流程中特定点的数据/对象可用性。 |
建模并发与条件流
活动图相较于标准流程图的一个显著优势是它们能够建模并发。在现实世界的系统中,任务经常同时发生,或者某些任务仅在并行分支内的特定条件下触发。
剧院售票处工作流程示例
下图展示了一个工作流程,详细说明了剧院售票处处理订单的各个步骤。该流程包含一个分支决策,随后根据订单是订阅还是单张门票进行合并。此外,还有一个分支机制,启动在概念上同时发生的并发活动,尽管它们的实际执行可能重叠也可能不重叠。这种并发随后由一个匹配的汇合点终止。

理解逻辑
-
条件线程:在此过程中,从分支点产生一个条件线程。该线程评估订阅者是否为会员,作为守卫条件。仅当满足守卫条件时才会启动。
-
非对称同步:如果订阅者是不会员,则仅激活一个线程(座位分配和账户扣款),无需等待奖励线程在汇合点的同步。
-
执行顺序:在仅涉及一个人的情况下,并发活动可以按任意顺序执行,前提是它们无法在物理上同时进行,尽管模型允许这样做。然而,依赖关系仍然存在;例如,账户扣款必须在座位分配之后才能发生。
PlantUML 表示:剧院工作流程
以下是上述逻辑的 PlantUML 表示,展示了分支/汇合条和受守卫的转换。

@startuml
title 剧院售票处订单处理
start
:接收订单;
if (订阅类型?) then (个人)
:处理个人票;
else (订阅)
:处理订阅;
endif
fork
:分配座位;
:扣款;
fork again
if (是否为会员?) then (是)
:奖励积分;
else (否)
' 守卫条件防止进入或跳过操作
endif
end fork
:生成收据;
stop
@enduml
泳道与对象流状态
控制流显示何时事情发生,泳道显示谁执行它们,以及对象节点显示哪些数据正在被转换。
服务请求工作流示例
下图展示了使用泳道将活动划分为三个不同区域,每个区域对应流程中涉及的不同利益相关者。尽管 UML 并未要求这些区域必须与对象对齐,但在本例中,可以明显看出某些类与每个区域完美对应。这些类通常负责在最终模型中执行与每个活动相关的操作。

解读对象流
该图表包含对象流符号,用于描绘“订单”对象在遍历活动网络时所处的不同状态:
-
状态跟踪:
Order[placed]符号表示在计算的该时刻,订单已在“请求服务”活动中转换为“已下单”状态,但尚未被“接单”活动消费。 -
数据生命周期顺序: “接单”活动结束后,订单进入“已录入”状态。此实例中的所有对象流代表同一对象在其生命周期中的不同阶段。由于它们代表同一对象,因此不能同时存在。
-
输入/输出语义:虚线箭头将活动的输出转换连接到对象流(输出),而另一条虚线箭头将对象流连接到输入转换(输入)。
PlantUML 表示:泳道与对象节点
此代码演示了如何定义分区并在操作之间传递类型化对象。

@startuml
标题:带对象流的服务请求
|客户|
开始
:提交请求;
:订单[已放置];
|服务代表|
:接收订单;
:订单[已录入];
|系统|
:验证库存;
if (有库存?) then (是)
:预留商品;
:订单[已预留];
else (否)
:通知缺货;
:订单[待处理];
endif
|服务代表|
:确认详情;
|客户|
:接收确认;
结束
@enduml 创建活动图的最佳实践
为确保您的图表始终是有效的沟通工具而非混淆之源,请遵循以下准则:
-
从简单开始:在添加异常处理或复杂并发之前,先从主要成功场景(快乐路径)开始。
-
明智地使用泳道:仅在责任分配能增加价值时使用分区。过多的泳道会使图表难以阅读。
-
平衡分叉与汇合:每个分叉理想情况下都应有对应的汇合。不平衡的并行通常表明存在建模错误或缺失的同步约束。
-
清晰标注守卫条件:决策节点应在出边上标注清晰的布尔表达式。避免使用如“是”等缺乏上下文的模糊标签。
-
区分控制流与对象流:使用实线箭头表示控制流,使用虚线箭头(或钉标记)表示对象/数据流,以避免歧义。
-
与利益相关者验证:与实际执行该流程的人员一起审查图表,以发现边缘情况和隐性知识。
结论
UML 中的活动图对于建模系统的动态脉搏不可或缺。通过结合控制流、并发机制和对象状态跟踪,它们提供了一个丰富的画布,可用于描述从简单的顺序算法到复杂的多角色业务流程的一切内容。
掌握各个组件——活动、决策、分叉、汇合、泳道和对象节点——将使您能够创建精确且无歧义的模型,这些模型可作为开发和文档的蓝图。无论您是在优化剧院售票处的工作流程,还是在设计分布式服务架构,本指南中概述的原则都将帮助您充分发挥活动图的全部潜力。
推荐资源:Visual Paradigm
如需进一步阅读和工具支持,Visual Paradigm 提供的以下资源对 UML 活动图及相关建模技术进行了深入介绍:
- 理解序列图:软件交互的可视化蓝图: 将序列图作为一种补充的行为图,用于建模对象之间按时间顺序的交互。
- 驾驭开发之海:IT 系统中用例图、序列图和活动图的综合使用指南: 提供活动图如何在整个软件开发生命周期中与用例图和序列图集成的整体视图。
- 可视化在线购买交互:掌握 Visual Paradigm 中的 AI 通信图生成器: 展示用于生成电子商务工作流通信图和活动图的现代 AI 辅助方法。
- UML 活动图符号指南:符号、规则与最佳实践: 关于官方 UML 2.x 符号标准、语法规则及需避免的常见建模陷阱的权威参考。












