从基本流程到并行操作与决策建模
引言
活动图是 UML 建模的基石,它以可视化方式呈现工作流程、业务流程和系统行为。无论你是在设计软件架构、记录业务规则,还是规划用户交互,掌握 Visual Paradigm 中的活动图都能让你清晰而精准地传达复杂流程。

本全面指南将带你完成一个结构化的实验练习,旨在帮助你掌握使用 Visual Paradigm for UML 创建、修改和优化活动图的技能。你将学习如何复现课堂示例,使用 Fork/Join 节点建模并行操作,通过守卫和定时事件融入决策逻辑,并应用专业的格式化技巧。完成本指南后,你将兼具理论理解与实践能力,能够为学术、专业或个人项目创建可发表级别的活动图。
核心概念与基础
什么是活动图?
-
一种行为型 UML 图,用于建模从一个活动到另一个活动的控制流或对象流
-
用于表示工作流程、业务流程或操作流程
-
支持并行处理、决策点、对象状态和定时事件
核心 Visual Paradigm 元素
| 元素 | 用途 | 关键提示 |
|---|---|---|
| 活动 | 相关动作的容器 | 尽早调整大小以容纳所有子节点 |
| 动作 | 工作流程中的原子步骤 | 使用描述性强的动词-名词命名 |
| 对象节点 | 表示在动作之间流动的数据/对象 | 为清晰起见,定义类型和输入状态 |
| 活动参数 | 活动的输入/输出边界 | 与对象节点区分开——参数是外部的 |
| 对象流 | 显示节点之间移动的对象/数据 | 用于承载对象的连接 |
| 控制流 | 显示执行顺序,不包含对象传递 | 用于纯粹的控制逻辑 |
| 分叉/合并节点 | 建模并行/并发执行 | 横向布局通常能提高可读性 |
| 决策/合并节点 | 建模条件分支与汇聚 | 始终为守卫添加标签以确保清晰 |
| 接受时间事件 | 建模定时延迟或预定触发 | 在堆叠的动作图标中找到 |
Visual Paradigm 使用技巧
-
颜色与字体: 使用“演示选项”菜单以在各图表间保持一致的样式
-
图标发现: 许多图标(分叉、合并、决策、时间事件)是堆叠的——点击并按住以显示选项
-
导出: 演示使用PNG或SVG;文档使用PDF;始终检查分辨率设置
-
规范面板: 右键单击 → 打开规范以配置类型、状态和守卫
-
对齐: 使用 Visual Paradigm 的对齐辅助线,使节点专业地分布
准备阶段
一般准备
-
打开课程“帮助”页面“Visual Paradigm – 技巧”
-
阅读关于“颜色、字体等…”以建立视觉一致性
-
阅读“查找图标” 以高效地定位堆叠的图表元素
-
复习 “导出图表” 以确保最终输出符合提交要求
专项准备:活动图
-
阅读 “活动图” 节,位于 Visual Paradigm 文档中
-
熟悉 UML 2.5 活动图符号
-
复习讲座示例,以理解预期的结构和语义
第一部分:复现“洗衣”示例

分步实现
-
创建活动容器
-
添加一个新 活动 (不是动作)命名为
"洗衣" -
将其适当放大,以容纳所有后续节点
-
-
添加初始动作和参数
-
添加动作:
"分类衣物" -
添加 活动参数 (不是对象节点):
"脏衣物"作为 输入 -
右键单击
"脏衣物"→ 打开规范 → 通用选项卡 → 设置 类型 = “衣物” → 确定
-
-
连接参数到动作
-
⚠️ 尝试从 添加控制流
"脏衣物"到"分类衣物" -
❓ 会发生什么?为什么?
控制流无法携带对象。由于
"脏衣物"是一个类型化参数(衣物),因此必须使用一个 对象流 来保留类型信息和对象语义。
-
-
添加带状态的对象节点
-
从 添加对象流
"脏衣物"到"分类衣物" -
添加对象节点:
"白色衣物" -
右键单击
"白色衣物"→ 打开规范:-
通用选项卡: 类型 = “衣物”
-
在状态选项卡:添加状态
"脏的"→ 选择它 → 确定
-
-
右键单击
"白色衣物"→ 显示选项 → 显示状态 → 是 -
调整节点大小以清晰显示状态标签
-
对以下内容重复操作:
"彩色衣物"具有相同配置的对象节点
-
-
将分拣连接到洗涤
-
添加对象流:
"分拣衣物"→"白色衣物"和"分拣衣物"→"彩色衣物" -
添加操作:
"洗涤白色衣物"和"洗涤彩色衣物" -
添加对象流:
"白色衣物"→"洗涤白色衣物"和"彩色衣物"→"洗涤彩色衣物"
-
-
⚠️ 关键思维问题
❓ 哪个动作先发生,“洗白色衣物”还是“洗彩色衣物”,还是它们同时发生?

答案: 在没有显式的分叉/汇合节点的情况下,UML 语义允许按任意顺序执行或并行执行。该图暗示了潜在的并发性,但并未强制执行。若需保证并行性,请使用分叉节点(将在第二部分中介绍)。
-
完成洗涤循环
-
添加输出的对象节点:
"白色衣物 [干净, 湿润]"和"彩色衣物 [干净, 湿润]" -
从洗涤动作添加对象流到这些节点
-
添加动作:
"烘干衣物"(调整大小以与"分类衣物") -
从两个
[干净, 湿润]节点添加对象流到"烘干衣物"
-
-
⚠️ 同步问题
❓ “烘干衣物”动作何时可以/开始?

答案: “烘干衣物”只能在两者都“洗白色衣物”和“洗彩色衣物”完成后并产生它们的
[干净, 湿润]输出。如果没有Join节点,这种依赖关系是隐式的,但并未强制执行——这又是使用显式同步(第二部分)的另一个原因。 -
完成图表
-
如有需要,添加输出活动参数(例如,
"干净衣物") -
确保所有流程都已正确标记类型和标签
-
验证视觉对齐和可读性
-
第二部分:使用分叉/连接建模并行操作

增强并发性
-
准备画布
-
增加垂直尺寸:
"洗衣服"活动 -
如有需要,移动输入/输出参数以避免重叠
-
选择下方所有节点
"白色衣物 [脏]"/"彩色衣物 [脏]"并向下移动以留出间距
-
-
插入分叉节点以实现并行
-
删除现有的对象流进入
"洗白色衣物"和"洗彩色衣物" -
找到分叉节点图标(与决策/连接节点堆叠在一起——展开堆叠以选择)
-
将分叉节点放置在两个节点下方
[脏]对象节点 -
设置方向为水平;调整宽度以覆盖两个输入流
-
添加对象流:
"白色衣物 [脏]"→ 分叉并"彩色衣物 [脏]"→ 分叉 -
添加控制流:分叉 →
"洗涤白色衣物"和 分叉 →"洗涤彩色衣物"
-
-
插入连接节点以实现同步
-
删除流入
"干燥衣物" -
添加 连接节点 下方
"白色衣物 [干净, 湿]"和"彩色衣物 [干净, 湿]" -
设置水平方向;调整大小
-
从两个
[干净, 湿]节点 → 连接 -
添加控制流:连接 →
"干燥衣物"
-
-
⚠️ 并发性验证
❓ 现在,哪个操作先发生,“洗涤白色衣物”还是“洗涤彩色衣物”,还是它们同时发生?

答案: 通过分叉节点明确地分割控制权,“洗白色衣物”和“洗彩色衣物”并行执行。汇合节点确保“晾干衣物”等待两者都完成。
-
⚠️ 现实世界建模反思
❓ 在现实世界中,是否总是可以同时洗涤白色和彩色衣物?

答案: 不一定。物理限制(一台洗衣机、资源有限)可能阻止真正的并行执行。这突显了一个关键的建模原则:图表表示的是预期逻辑,而非物理现实。为了建模资源限制,可以添加条件判断、资源池或顺序约束。
第三部分:建模决策与定时事件

添加条件逻辑和基于时间的行为
-
扩展活动画布
-
增加其垂直和水平尺寸
“洗衣服”
-
-
预分类准备阶段
-
删除流入
“分类衣物” -
添加动作:
“将衣物放入篮中”上方“分类衣物” -
添加对象流:
“脏衣物”参数 →“将衣物放入篮中” -
添加动作:
“前往洗衣房”下方"把衣服放进篮子里"
-
-
带守卫的决策节点
-
添加 决策节点 下方
"去洗衣房"(展开堆叠的图标) -
添加控制流:
"去洗衣房"→ 决策 -
添加控制流:决策 →
"分类衣服"-
右键单击流程 → 打开规范 → 守卫:
"两台洗衣机可用"
-
-
添加操作:
"离开洗衣房"在决策的右侧 -
添加控制流:决策 →
"等待一小时"-
设置守卫:
"否则"
-
-
-
定时事件处理
-
添加 接受时间事件操作:
"等待一小时"上方"离开洗衣房"(堆叠的操作图标) -
添加控制流:
"离开洗衣房"→"等待一小时"
-
-
⚠️ 流程设计陷阱
❓ 你可能会倾向于从“把衣服放进篮子”添加一条控制流到“去洗衣房”,再从“等待一小时”添加一条控制流到“去洗衣房”。为什么这样做不合适?

答案: 这会创建一个没有明确收敛的循环,可能暗示无限循环或模糊的重新进入。UML要求收敛路径有明确的合并点,以保持确定性语义。
-
⚠️ 解决方案策略
❓ 我们该如何解决这个问题?

答案: 插入一个合并节点之间
"把衣服放进篮子"和"去洗衣房"。将初始路径和等待后的路径都导向该合并节点,然后从合并节点→"去洗衣房"。这明确地建模了收敛。 -
完善决策流程
-
在……之间添加合并节点
"把衣服放进篮子"和"去洗衣房" -
添加控制流:
-
"把衣服放进篮子"→ 合并 -
"等待一小时"→ 合并 -
合并 →
"去洗衣房"
-
-
验证所有守卫、状态和类型是否正确配置
-
技巧、窍门与最佳实践
🎨 视觉清晰度
-
一致的样式: 使用演示选项来统一字体、颜色和线宽
-
战略性间距: 节点之间留出20-30像素间距;使用对齐辅助线
-
为所有内容添加标签: 守卫、状态、类型和参数应清晰可见且易读
-
分层: 使用活动容器以层级方式分组相关操作
⚙️ 技术效率
-
键盘快捷键: 学习VP的快捷键,用于节点创建、复制和对齐
-
模板保存: 为未来项目保存一个已设置样式的活动图模板
-
版本控制: 导出增量版本(v1、v2、最终版)以追踪演变过程
-
验证: 使用Visual Paradigm内置的UML验证器来捕捉语义错误
🧠 建模智慧
-
从简单开始: 首先构建顺序流程,然后再添加并发/决策
-
测试语义: 为每个节点都问“在X之前必须发生什么?”
-
记录假设: 使用注释或说明来表示图中未体现的实际约束
-
迭代: 根据利益相关者的反馈优化图表——清晰度优于完整性
🚫 需避免的常见陷阱
| 陷阱 | 后果 | 解决方案 |
|---|---|---|
| 使用控制流进行对象传递 | 类型信息丢失;语义错误 | 对有类型的数据显示使用对象流 |
| 忘记显示进入状态 | 对象状态不明确 | 始终配置并显示相关状态 |
| 过度使用并行性 | 不切实际的模型;资源冲突 | 使用守卫或资源池建模约束 |
| 未标记的守卫 | 决策逻辑不清晰 | 始终明确指定守卫条件 |
| 缺少合并节点 | 路径汇聚不明确 | 所有汇聚的控制流均使用合并节点 |
结论
掌握 Visual Paradigm 中的活动图不仅仅是学习一个工具,更是培养一种有纪律的方法来建模动态行为。本次实验已使您具备了基础技能:创建有类型的对象流,使用 Fork/Join 建模并发,通过带守卫的决策实现条件逻辑,并处理基于时间的事件。
请记住,有效的图表需要在精确性与可读性之间取得平衡。每个节点、流程和标签都应具有明确的沟通目的。随着您不断进步,应挑战自己在保持清晰的前提下建模日益复杂的流程。可使用 Visual Paradigm 的 AI 功能(如用例到活动图的转换)来加速原型设计,但始终需审查并优化生成的图表,以确保语义准确性。
无论您是在记录洗衣流程,还是设计企业级软件流程,这里所练习的原则——显式类型、清晰同步、带守卫的决策以及视觉一致性——都将成为您专业级 UML 建模的坚实基础。持续尝试,不断优化,让您的图表自信地讲述系统行为的故事。
参考文献
-
Visual Paradigm 用户指南:绘制活动图: 使用 Visual Paradigm 的拖拽界面和资源目录手动创建活动图的分步说明。
-
用例到活动图功能页面: Visual Paradigm官方介绍其AI驱动工具,可即时将文本用例转换为UML活动图。
-
什么是活动图?——Visual Paradigm指南: 对活动图的全面介绍,包括符号、用例和实际示例。
-
Visual Paradigm Online在线导览: Visual Paradigm Online基于网页的绘图功能概览,包括导出选项和协作功能。
-
如何在UML中绘制活动图——教程: 面向初学者的教程,涵盖基本概念和逐步创建图表的过程。
-
活动图教程(旧版文档): 已归档的教程,提供活动图建模技术的基础知识。
-
Visual Paradigm桌面版AI活动图生成功能发布说明: 面向桌面用户的AI驱动图表生成功能的技术细节。
-
YouTube:活动图教程: 视频演示活动图的创建过程及最佳实践。
-
将AI生成的活动图导入Visual Paradigm桌面版: 将AI生成的图表导入桌面项目中的指南。
-
博客:即时从用例生成活动图: AI驱动的用例到活动图功能的发布说明及应用场景。
-
用户故事到活动图教程: 将敏捷用户故事与活动图同步的说明。
-
使用Visual Paradigm Online的活动图入门指南: 面向Visual Paradigm Online新用户的入门级指南。
-
YouTube:高级活动图技术: 视频涵盖高级符号、泳道以及复杂工作流建模。
-
詹姆斯麦迪逊大学:Visual Paradigm活动图实验: 用于练习活动图创建的学术实验作业。
-
SysML活动图指南: 针对系统工程中在SysML内使用活动图的专门指南。
-
AI驱动的用例到活动图生成器: 第三方对利用Visual Paradigm AI工具进行UML建模的评测与教程。










