该篇文章是UML知识的扩充。
什么是通讯图
源文链接:https://www.visual-paradigm.com/guide/uml-unified-modeling-language/what-is-communication-diagram/
UML
通讯图,就像序列图
(一种交互图)一样,显示了对象如何交互。通讯图是对象图的扩展,它显示了对象以及从一个到另一个传播的消息。除了对象之间的关联之外,通讯图还显示了对象相互发送的消息。
一、通讯图的目的
- 对传递用例和操作功能的对象或角色之间的消息传递进行建模
- 系统架构设计中的模型机制
- 捕获显示协作场景中对象和角色之间传递消息的交互
- 对涉及不同对象和交互的协作的用例或操作中的替代场景进行建模
- 支持识别参与用例的对象(因此是类)及其属性(消息参数)和操作(消息)
二、通讯图概览
在通讯图的符号示例中,对象(用例中的参与者)由矩形表示。在示例中(通用通讯图):
- 对象是 Object1、Object2、Object…、ObjectN-1 …和 ObjectN。
- 对象之间传递的消息由带标签的箭头表示,这些箭头以发送对象(actor)开始,以接收对象结束。
- 对象之间传递的示例消息标记为 1:message1、2:message2、3:message3 等,其中消息名称的数字前缀表示其在序列中的顺序。
- Object1 首先向 Object2 发送消息 message1,Object2 依次向 ObjectN-1 发送消息 message2,以此类推。
- 对象发送给自己的消息被表示为循环(例如,消息 message5)。
三、通讯图示例
3.1 酒店预订
- 通讯图中的每条消息都有一个序列号。
- 顶级消息编号为 1。
- 同一呼叫期间发送的消息具有相同的十进制前缀,但后缀为 1、2 等,具体取决于它们发生的时间。
3.2 通讯图与序列图
通讯图和时序图类似。它们在语义上是等价的,即呈现相同的信息,您可以将通讯转换为序列图,反之亦然。它们之间的主要区别在于,通讯图是按空间排列元素,顺序图是按时间排列。
在两种类型的交互图中,序列图的使用似乎远远超过通讯图。那么,为什么要使用通讯图呢?首先,它们对于可视化协作执行特定任务的对象之间的关系非常有用。这很难从序列图中确定。此外,通讯图还可以帮助您确定静态模型(即类图)的准确性。
示例 - 序列图与通讯(库项目过期)
如果你在 Visual Paradigm 中打开这个序列图,你可以自动生成如下图所示的通讯图:
注意:如果您比较这两个图表,您会发现它们都包含对象和消息。很明显,通过查看序列图更容易确定消息的时间顺序,通过查看通讯图更容易看到对象之间的关系。
3.3 通讯图元素
参与协作的对象有两种形式:供应商和客户。
- 供应商对象是提供被调用方法并因此接收消息的对象。
- 客户端对象调用供应商对象的方法,因此发送消息。
链接
- 通讯图中的对象之间绘制的连接线是链接。
- 这些链接将通讯图与序列图区分开来。它们使您能够查看对象之间的关系。
- 每个链接代表了对象之间的一种关系,象征着对象相互发送消息的能力。
- 如果一个对象向自己发送消息,则携带这些消息的链接将表示为一个循环图标。这个循环可以在 UI 对象和 Transaction 对象上看到。
通讯图中的消息显示为从 Client 对象指向 Supplier 对象的箭头。通常,消息表示客户端调用供应商对象上的操作。它们可以通过以下方式与对象一起建模:
- 消息图标具有与之关联的一条或多条消息。
- 消息由以序列号为前缀的消息文本组成。
- 此序列号指示消息的时间顺序。
例如下图的通讯图中,可以按照序号来确定对象之间的消息顺序:
3.4 了解通讯图中的消息编号
- 通讯图中的第一条消息始终编号为 1,第二条消息编号为 2,依此类推。
- 您可以通过将小数点和递增数字添加到父消息的序列号来指示消息嵌套在父消息之下。
例如:
基于上面的示例,“CalAmtCanBorrow”消息是“EnquireBorrower”下的第一个嵌套消息,并被赋予序列号 1.1。“EnquireBorrower”下的第二个嵌套消息是“DisplayInvalidMsg”,因此它的序列号为 1.2。
3.5 示例 - 从序列图到通讯图
请注意:
- 控制焦点:也称为执行发生/激活。它在生命线上显示为又高又细的矩形,表示元素执行操作的时间段。
- 矩形的顶部和底部分别与开始时间和完成时间对齐。
- 在通讯图中,控制的焦点是明确的,因此可以用消息嵌套编号来表示。