引言
在软件工程领域,理解对象之间如何通信,与了解这些对象本身同样重要。尽管UML顺序图被广泛用于追踪随时间变化的交互,通信图则提供了互补的视角——优先关注对象之间的结构关系。本案例研究通过一个真实的酒店预订场景,探讨了通信图的目的、符号表示及实际应用。到最后,您将了解这些图如何帮助建模消息传递、识别类与操作,并验证架构设计。

UML通信图展示了对象之间的交互方式,通过添加消息和序列号来扩展对象图。
案例研究:酒店预订系统
背景
一家酒店连锁希望设计一个在线预订系统。需求包括检查房间可用性、预订房间以及发送确认信息。开发团队需要建模软件对象之间的交互(例如,ReservationGUI, ReservationController, RoomDatabase)而不忽视它们在静态类图中的关联关系。
应用通信图
团队选择使用通信图的原因有两个:
-
为了可视化对象之间的关系(例如,哪个对象知道哪个)。
-
为了使用十进制编号来记录消息的传递顺序。
第一步——识别对象和链接
-
对象:
客户,ReservationGUI,ReservationController,RoomDatabase -
链接(对象之间的连线)表示类图中已存在的关联关系。
步骤 2 – 添加带序列号的消息
-
消息
1: makeReservation()从客户→ReservationGUI -
消息
1.1: checkAvailability()从ReservationGUI→ReservationController -
消息
1.1.1: queryRoom()从ReservationController→RoomDatabase -
消息
1.2: confirmReservation()从 返回ReservationController→ReservationGUI -
消息
1.3: displayConfirmation()从ReservationGUI→客户
十进制编号表示嵌套:消息 1.1 发生在消息处理过程中 1,以及 1.1.1 是 的一部分1.1。这取代了顺序图中出现的“控制焦点”矩形。
生成的通信图

每个箭头都标有序号。最顶层的消息是 1。嵌套消息使用小数,清晰地显示调用层次结构。
通信图与顺序图对比——一个图书馆逾期示例
为了进一步说明两者的区别,考虑一个图书馆系统,其中一名 图书管理员 为一名 借阅者.
顺序图(时间导向)

垂直方向清晰地显示了时间顺序。控制焦点矩形表示每个对象的激活时间。
自动生成的通信图(关系导向)

显示了相同的交互,但现在对象之间的连接(例如, 借阅者 连接到 借阅 连接到 书籍)变得可见。这使得更容易检查类图是否支持所有必要的协作。
关键要点:
-
顺序图 → 更适合详细的时间和顺序分析。
-
通信图 → 更适合理解对象之间的关系并验证静态模型。
总结表格:顺序图 vs. 通信图
这里是一个全面的 顺序图 vs. 通信图 比较表格,基于文章内容和UML最佳实践。
| 特性 | 顺序图 | 通信图 |
|---|---|---|
| 主要维度 | 时间(垂直轴) | 空间(对象布局) |
| 对象排列 | 沿生命线从上到下 | 可自由放置在图表的任何位置 |
| 消息顺序 | 从上到下阅读(按时间顺序) | 序列号(例如,1、1.1、2) |
| 控制焦点 | 显式 – 高而窄的矩形(激活) | 隐式 – 通过消息嵌套的十进制表示 |
| 对象关系(链接) | 不可见(仅生命线) | 明确显示为对象之间的连接线 |
| 读取时间顺序的难易程度 | 优秀 – 立即呈现视觉时间线 | 需要跟踪序列号 |
| 查看对象链接的难易程度 | 较差 – 关系必须推断得出 | 优秀 – 链接可直接查看 |
| 类图验证 | 困难 – 无法验证关联 | 简单 – 每个链接必须与类图中的关联匹配 |
| 自消息 | 生命线上的激活循环 | 自链接上的循环图标 |
| 条件消息 | alt和opt带守卫的片段 |
带条件的编号(例如,1.1 [条件] message()) |
| 并行消息 | par带并行框的片段 |
相同小数前缀但不同后缀(例如,1.1a, 1.1b) |
| 空间效率 | 低 – 长垂直图 | 高 – 紧凑,空间优化 |
| 复杂度处理 | 更适合复杂分支和循环 | 深度嵌套时可能变得杂乱 |
| 流行度/使用情况 | 非常高(80%以上的交互图) | 低到中等(20%或更少) |
| 最佳使用场景 | 记录时间关键流程、实时系统和详细逻辑流程 | 验证静态模型,展示对象关系,架构评审 |
| 可相互生成 | 是——可以从顺序图生成通信图 | 是——可以从通信图生成顺序图 |
| 语义等价 | 相同信息——可互换 | 相同信息——可互换 |
快速视觉对比
| 方面 | 顺序图 | 通信图 |
|---|---|---|
| 图示形状 | 高而窄 | 方形/紧凑 |
| 关键元素 | 生命线 + 激活条 | 对象 + 链接 |
| 消息标签 | message()仅此一项(时间顺序隐含) |
1: message()(需编号) |
| 嵌套消息 | 激活条内嵌另一个激活 | 十进制数字1.1 |
| 对象关系 | 未绘制 | 实线(链接) |
何时使用哪种(决策指南)
| 场景 | 推荐的图表 | 原因 |
|---|---|---|
| 你需要向非技术利益相关者展示 | 顺序图 | 从上到下阅读更轻松 |
| 你想验证你的类图是否支持所有交互 | 通信图 | 链接能揭示缺失的关联 |
| 你空间有限(例如幻灯片或文档) | 通信图 | 更紧凑 |
你有复杂的分支(如果/否则,循环) |
顺序图 | 片段和框架能更好地处理复杂性 |
| 你需要确定哪些类需要新增操作 | 两者 | 消息在两者中都成为方法名 |
| 你在建模实时约束 | 顺序图 | 时间维度是明确的 |
示例:同一交互在两者中展示
图书馆逾期检查(来自文章):
| 顺序图 | 通信图 |
|---|---|
显示生命线:图书管理员 → 借阅者 → 借阅记录 → 图书 |
显示通过链接连接的对象 |
| 激活条显示每个对象处于忙碌状态的时间 | 无激活条——嵌套数字显示忙碌时段 |
| 易于理解:“首先发生这件事,然后发生那件事” | 易于理解:“借阅者与借阅记录相连,而借阅记录又与图书相连” |
文章中的注释: “如果你比较这两个图,你会发现它们都包含对象和消息。通过查看顺序图,更容易确定消息的时间顺序;而通过查看通信图,更容易看出对象之间的关系。”
总结表——关键要点
| 顺序图 | 通信图 | |
|---|---|---|
| 关注点 | ⏱️ 何时消息发生的时间 | 🔗 谁了解谁 |
| 优势 | 时间顺序清晰 | 结构验证 |
| 劣势 | 隐藏对象关系 | 隐藏时间顺序(需要解码数字) |
| 最适合 | 详细逻辑、实时性、分支结构 | 架构审查、模型验证、空间受限的文档 |
通信图元素详解

1. 对象
-
客户端 – 发送消息(例如,
预订GUI) -
供应商 – 接收并处理消息(例如,
预订控制器)
2. 链接
-
以对象之间的连线表示。
-
每个链接必须在类图中作为关联存在。如果缺少链接,通信图将揭示静态模型中的缺陷。
3. 消息
-
从客户端指向供应商的箭头。
-
标签格式:
序列号:消息名称(参数) -
自消息以循环形式显示。
4. 消息编号规则
| 规则 | 示例 |
|---|---|
第一条消息是1 |
1: login() |
第二条顶层消息是2 |
2: logout() |
嵌套在1 → 1.1 |
1.1: validateUser() |
进一步嵌套 →1.1.1 |
1.1.1: checkPassword() |

在此图中,1: EnquireBorrower之后是嵌套的消息1.1和1.2左侧对象上的循环表示一个自消息。
从顺序图到通信图——控制焦点映射
顺序图使用高而窄的矩形(激活条)来表示对象执行操作的时刻。通信图没有这样的矩形——相反,消息嵌套传达了相同的信息。

映射规则:
-
顺序图中的每个激活条在通信图中都变成一个十进制嵌套层级。
-
如果生命线有两个嵌套的激活,你将看到类似这样的序列号
1,1.1,1.1.1.
结论
UML通信图不仅仅是顺序图的替代品——它们是验证系统架构的强大工具。通过强调对象之间的链接,它们迫使设计者确保发送的每条消息都对应于类图中的实际关联。十进制编号系统优雅地取代了控制焦点矩形,使嵌套调用变得明确。
在实践中,使用顺序图当需要向利益相关者展示事件的清晰时间线时。使用通信图当你想要检查静态模型的准确性,或者对象的空间布局比每个消息的确切时刻更重要时。在上面的酒店预订和图书馆逾期示例中,通信图准确揭示了哪些类必须提供哪些操作——将交互设计转化为可执行的类设计。
相关链接
- 什么是统一建模语言?
- 专业的UML工具
- 什么是通信图?——Visual Paradigm: 介绍UML中的通信图,解释其在通过传递消息来建模对象之间交互时的目的。涵盖了参与者、对象、链接和消息序列等基本元素。
- 协作图(通信图)——Visual Paradigm 图库: 一个视觉图库条目,展示了协作(通信)图的示例,说明在软件设计中如何对不同对象交互场景进行建模。
- 通信图——Visual Paradigm Circle 文档: 官方文档详细说明了在Visual Paradigm环境中通信图的定义和使用,包括其与系统建模语言(SysML)的关系。
- AI生成UML通信图——Visual Paradigm 探索: 一篇文章讨论如何利用人工智能自动生成UML通信图,从而简化开发人员的绘图流程。
- 通信图的局限性——Visual Paradigm 论坛: 论坛上的社区讨论,探讨了使用通信图与其他UML交互图(如顺序图)相比所面临的局限性和挑战。
- 通信图——Visual Paradigm 用户指南: Visual Paradigm 用户手册中的详细章节,解释了在该工具界面中通信图的结构和组成部分。
- 如何绘制通信图——Visual Paradigm 教程: 一份逐步教程指南,介绍如何在Visual Paradigm中创建通信图,包括添加参与者、对象、链接和消息的说明。
- 绘制通信图——Visual Paradigm 用户指南: 用户指南中的另一参考内容,专门聚焦于绘制通信图的技术方面,包括编辑工具和格式选项











