Read this post in: de_DEen_USes_ESfr_FRhi_INid_IDjapl_PLpt_PTru_RUvizh_TW

映射对话:UML通信图如何在系统设计中阐明对象之间的交互

引言

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

How UML Communication Diagrams Clarify Object Interactions in System Design

UML通信图展示了对象之间的交互方式,通过添加消息和序列号来扩展对象图。


案例研究:酒店预订系统

背景

一家酒店连锁希望设计一个在线预订系统。需求包括检查房间可用性、预订房间以及发送确认信息。开发团队需要建模软件对象之间的交互(例如,ReservationGUIReservationControllerRoomDatabase)而不忽视它们在静态类图中的关联关系。

应用通信图

团队选择使用通信图的原因有两个:

  1. 为了可视化对象之间的关系(例如,哪个对象知道哪个)。

  2. 为了使用十进制编号来记录消息的传递顺序。

第一步——识别对象和链接

  • 对象: 客户ReservationGUIReservationControllerRoomDatabase

  • 链接(对象之间的连线)表示类图中已存在的关联关系。

步骤 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。这取代了顺序图中出现的“控制焦点”矩形。

生成的通信图

Communication Diagram Example: Hotel Reservation

每个箭头都标有序号。最顶层的消息是 1。嵌套消息使用小数,清晰地显示调用层次结构。


通信图与顺序图对比——一个图书馆逾期示例

为了进一步说明两者的区别,考虑一个图书馆系统,其中一名 图书管理员 为一名 借阅者.

顺序图(时间导向)

Sequence Diagram

垂直方向清晰地显示了时间顺序。控制焦点矩形表示每个对象的激活时间。

自动生成的通信图(关系导向)

Communication Diagram generated from Sequence Diagram

显示了相同的交互,但现在对象之间的连接(例如, 借阅者 连接到 借阅 连接到 书籍)变得可见。这使得更容易检查类图是否支持所有必要的协作。

关键要点:

  • 顺序图 → 更适合详细的时间和顺序分析。

  • 通信图 → 更适合理解对象之间的关系并验证静态模型。

总结表格:顺序图 vs. 通信图

这里是一个全面的 顺序图 vs. 通信图 比较表格,基于文章内容和UML最佳实践。

特性 顺序图 通信图
主要维度 时间(垂直轴) 空间(对象布局)
对象排列 沿生命线从上到下 可自由放置在图表的任何位置
消息顺序 从上到下阅读(按时间顺序) 序列号(例如,1、1.1、2)
控制焦点 显式 – 高而窄的矩形(激活) 隐式 – 通过消息嵌套的十进制表示
对象关系(链接) 不可见(仅生命线) 明确显示为对象之间的连接线
读取时间顺序的难易程度 优秀 – 立即呈现视觉时间线 需要跟踪序列号
查看对象链接的难易程度 较差 – 关系必须推断得出 优秀 – 链接可直接查看
类图验证 困难 – 无法验证关联 简单 – 每个链接必须与类图中的关联匹配
自消息 生命线上的激活循环 自链接上的循环图标
条件消息 altopt带守卫的片段 带条件的编号(例如,1.1 [条件] message())
并行消息 par带并行框的片段 相同小数前缀但不同后缀(例如,1.1a1.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()

Communication Diagram elements

在此图中,1: EnquireBorrower之后是嵌套的消息1.11.2左侧对象上的循环表示一个自消息。


从顺序图到通信图——控制焦点映射

顺序图使用高而窄的矩形(激活条)来表示对象执行操作的时刻。通信图没有这样的矩形——相反,消息嵌套传达了相同的信息。

Sequence Diagram to Communication Diagram

映射规则:

  • 顺序图中的每个激活条在通信图中都变成一个十进制嵌套层级。

  • 如果生命线有两个嵌套的激活,你将看到类似这样的序列号11.11.1.1.


结论

UML通信图不仅仅是顺序图的替代品——它们是验证系统架构的强大工具。通过强调对象之间的链接,它们迫使设计者确保发送的每条消息都对应于类图中的实际关联。十进制编号系统优雅地取代了控制焦点矩形,使嵌套调用变得明确。

在实践中,使用顺序图当需要向利益相关者展示事件的清晰时间线时。使用通信图当你想要检查静态模型的准确性,或者对象的空间布局比每个消息的确切时刻更重要时。在上面的酒店预订和图书馆逾期示例中,通信图准确揭示了哪些类必须提供哪些操作——将交互设计转化为可执行的类设计。


相关链接

  1. 什么是统一建模语言?
  2. 专业的UML工具
  3. 什么是通信图?——Visual Paradigm: 介绍UML中的通信图,解释其在通过传递消息来建模对象之间交互时的目的。涵盖了参与者、对象、链接和消息序列等基本元素。
  4. 协作图(通信图)——Visual Paradigm 图库: 一个视觉图库条目,展示了协作(通信)图的示例,说明在软件设计中如何对不同对象交互场景进行建模。
  5. 通信图——Visual Paradigm Circle 文档: 官方文档详细说明了在Visual Paradigm环境中通信图的定义和使用,包括其与系统建模语言(SysML)的关系。
  6. AI生成UML通信图——Visual Paradigm 探索: 一篇文章讨论如何利用人工智能自动生成UML通信图,从而简化开发人员的绘图流程。
  7. 通信图的局限性——Visual Paradigm 论坛: 论坛上的社区讨论,探讨了使用通信图与其他UML交互图(如顺序图)相比所面临的局限性和挑战。
  8. 通信图——Visual Paradigm 用户指南: Visual Paradigm 用户手册中的详细章节,解释了在该工具界面中通信图的结构和组成部分。
  9. 如何绘制通信图——Visual Paradigm 教程: 一份逐步教程指南,介绍如何在Visual Paradigm中创建通信图,包括添加参与者、对象、链接和消息的说明。
  10. 绘制通信图——Visual Paradigm 用户指南: 用户指南中的另一参考内容,专门聚焦于绘制通信图的技术方面,包括编辑工具和格式选项

Leave a Reply