交互、协作和顺序图及示例
什么是交互图?
交互图在 UML 中用于建立对象之间的通信。它不操纵与特定通信路径相关的数据。交互图主要关注消息传递以及这些消息如何构成系统的一个功能。交互图旨在显示对象如何实现系统的特定需求。交互图的关键组件是生命线和消息。
各种 UML 元素通常拥有交互图。交互的细节可以使用多种表示法来显示,例如顺序图、时序图、通信/协作图。交互图捕获任何系统的动态行为。

以下是 UML 中定义的几种交互图类型
- 顺序图
- 协作图
- 时序图
顺序图在 UML 图中的目的是可视化系统中消息流的顺序。软件工程中的顺序图显示了两个生命线之间作为时间顺序事件的交互。
UML 中的协作图也称为通信图。协作图的目的是强调系统的结构方面,即系统中各种生命线如何连接。
时序图侧重于消息从一个对象发送到另一个对象的实例。
交互图的目的
交互图可帮助您可视化系统的交互行为。交互图用于表示系统中一个或多个对象如何相互连接和通信。
交互图侧重于系统的动态行为。交互图为我们提供了系统中一个或多个生命线之间交互的上下文。
在 UML 中,交互图用于以下目的
- 交互图用于观察系统的动态行为。
- 交互图可视化系统中的通信和消息传递顺序。
- 交互建模图表示系统中各种对象的结构方面。
- 交互图表示系统中交互的有序序列。
- 交互图提供了一种通过 UML 可视化实时数据的方法。
- UML 交互图可用于解释面向对象或分布式系统的体系结构。
重要术语
交互图包含生命线、消息、运算符、状态不变量和约束。
生命线
生命线代表交互中的单个参与者。它描述了特定分类器的实例如何在交互中参与。
生命线代表了分类器实例在交互中可能扮演的角色。以下是生命线的各种属性,
- 名称
- 它用于在特定交互中引用生命线。
- 生命线的名称是可选的。
- 类型
- 它是生命线所代表的分类器的名称。
- 选择器
- 这是一个布尔条件,用于选择满足要求的特定实例。
- 选择器属性也是可选的。
生命线的表示法在表示法部分进行了解释。
消息
消息是交互中两条生命线之间的特定类型的通信。消息涉及以下活动,
- 用于调用操作的调用消息。
- 创建实例的消息。
- 销毁实例的消息。
- 用于发送信号。
当生命线接收到调用消息时,它充当请求,调用一个签名与消息中指定的签名类似的操作。当生命线执行消息时,它具有一个控制焦点。随着交互随着时间推移,控制焦点在各种生命线之间移动。这种移动称为控制流。
系统交互图中使用的消息如下
消息名称 | 含义 |
---|---|
同步消息 | 消息的发送者会等待接收者从消息执行中返回控制。 |
异步消息 | 发送者不等待接收者的返回;而是继续执行下一条消息。 |
返回消息 | 早期消息的接收者将控制焦点返回给发送者。 |
对象创建 | 发送者创建分类器的实例。 |
对象销毁 | 发送者销毁创建的实例。 |
已找到消息 | 消息的发送者超出交互范围。 |
丢失的消息 | 消息未到达目的地,并在交互中丢失。 |
状态不变量和约束
当实例或生命线接收到消息时,它可能导致其状态发生变化。状态是对象生命周期中的一个条件或情况,在此期间它满足某些约束,执行某些操作,并等待某些事件。
在交互图中,并非所有消息都会导致实例状态发生变化。有些消息没有某些属性的值。它对对象的状态没有副作用。
运算符
运算符指定了操作数如何执行的操作。UML 中的运算符支持以分支和迭代形式对数据进行操作。可以使用各种运算符来确保 UML 模型中使用迭代和分支。opt 和 alt 运算符用于分支操作。loop 运算符用于确保迭代操作,其中一个条件被重复执行,直到产生令人满意的结果。Break 运算符用于循环或迭代操作内部。它确保在遇到 break 运算符时循环终止。如果未指定 break 条件,则循环会无限次执行,从而导致程序崩溃。
交互图中使用以下运算符
运算符 | 名称 | 含义 |
---|---|---|
Opt | 选项 | 如果条件为真,则执行操作数。 例如:If else |
Alt | 替代 | 执行条件为真的操作数。 例如:switch |
循环 | 循环 | 它用于在指定的时间段内循环指令。 |
Break | Break | 如果条件为真或为假,它会中断循环,并执行下一条指令。 |
Ref | 参考 | 它用于引用另一个交互。 |
Par | 并行 | 所有操作数都并行执行。 |
迭代
在交互图中,我们还可以使用迭代表达式来显示迭代。迭代表达式包含迭代说明符和可选的迭代子句。UML 迭代没有预定义的语法。
在迭代中,为了显示消息是并行发送的,使用了并行迭代说明符。并行迭代说明符用 *// 表示。UML 中的迭代是通过使用 loop 运算符实现的。
分支
在交互图中,我们可以通过为消息添加保护条件来表示分支。保护条件用于检查消息是否可以向前发送。只有当保护条件为真时,才会向前发送消息。一条消息可以有多个保护条件,或者多条消息可以有相同的保护条件。UML 中的分支是通过 alt 和 opt 运算符实现的。
这些是 UML 交互图中使用的一些最重要的术语。
交互图的类型和表示法
以下是 UML 中定义的几种交互图类型
- 顺序图
- 协作图
- 时序图
交互的基本表示法是一个矩形,在矩形框的左上角有一个五边形。
什么是顺序图?
顺序图仅按顺序描述对象之间的交互。顺序图在 UML 中的目的是可视化系统中消息流的顺序。顺序图显示了两个生命线之间作为时间顺序事件的交互。
- 顺序图显示了系统中场景的实现。系统中的生命线在系统执行期间参与其中。
- 在顺序图中,生命线由垂直条表示。
- 两个或多个对象之间的消息流使用从页面底部延伸的垂直虚线表示。
- 在顺序图中,使用了上面描述的各种类型的消息和运算符。
- 在顺序图中,也使用了迭代和分支。
上面的顺序图包含生命线表示法和顺序图中各种消息的表示法,例如创建、回复、异步消息等。
顺序图示例
以下顺序图示例代表了麦当劳的订购系统
给定顺序图中的事件顺序如下
- 下单。
- 将钱支付给收银台。
- 订单确认。
- 订单准备。
- 订单服务。
如果改变操作顺序,则可能导致程序崩溃。它还可能导致生成不正确或有 bug 的结果。上面给出的顺序图中的每个序列都使用不同类型的消息表示。不能使用相同类型的消息来表示图中的所有交互,因为它会在系统中造成复杂性。
在为任何特定交互选择消息表示法时,您必须小心。表示法必须与图中的特定序列匹配。
顺序图的好处
- 顺序图用于探索任何实际应用程序或系统。
- 顺序图用于表示消息从一个对象到另一个对象的流。
- 顺序图更易于维护。
- 顺序图更容易生成。
- 根据系统中的更改,可以轻松更新顺序图。
- 顺序图允许逆向工程和正向工程。
顺序图的缺点
- 当系统中涉及太多生命线时,顺序图可能会变得复杂。
- 如果更改消息顺序,则会产生不正确的结果。
- 每个序列都需要使用不同的消息表示法来表示,这可能有点复杂。
- 消息的类型决定了图中序列的类型。
什么是协作图?
协作图描绘了对象之间的关系和交互。它们用于理解系统内的对象体系结构,而不是像顺序图那样关注消息流。它们也被称为“通信图”。
根据面向对象编程 (OOPs),对象实体具有与之相关的各种属性。通常,面向对象系统中存在多个对象,其中每个对象都可以与系统内的任何其他对象相关联。协作图用于探索系统内对象的体系结构。对象之间的消息流可以使用协作图来表示。
协作图的好处
- 它也称为通信图。
- 它强调了交互图的结构方面——生命线如何连接。
- 其语法类似于顺序图,只是生命线没有尾部。
- 通过为每条消息分层编号来指示消息传递的顺序。
- 与顺序图相比,通信图在语义上较弱。
- 对象图是通信图的特例。
- 它允许您专注于元素,而不是像顺序图中所述专注于消息流。
- 顺序图可以轻松转换为协作图,因为协作图的表达能力不强。
- 在建模协作图相对于顺序图时,可能会丢失一些信息。
上面的协作图表示法包含了协作图中使用生命线以及连接器、自环、向前和向后消息。
协作图的缺点
- 当系统中存在太多对象时,协作图可能会变得复杂。
- 很难探索系统中的每个对象。
- 协作图非常耗时。
- 程序终止后,对象即被销毁。
- 对象的状态会瞬时变化,这使得跟踪系统中对象发生的每一个微小变化变得困难。
协作图示例
下图表示学生管理系统的排序
上述协作图表示一个学生信息管理系统。图中通信流程如下:
- 学生通过登录系统请求登录。
- 软件的身份验证机制会检查请求。
- 如果数据库中存在学生条目,则允许访问;否则,将返回错误。
什么是时序图?
时序图是用于描述生命线在任何时间点的状态的波形或图形。它用于表示对象从一种形式到另一种形式的转换。时序图不包含顺序图和协作图所需的表示法。通过波形表示了软件程序在不同时间点的流程。
- 它是交互的正确表示,侧重于不同对象之间消息发送的特定时间。
- 时序图用于解释特定对象的详细时间处理。
- 时序图用于解释对象在其生命周期内的变化。
- 时序图主要与分布式和嵌入式系统一起使用。
- 在 UML 中,时序图根据左边缘指定的生命线名称从左到右读取。
- 时序图用于表示生命线随时间发生的变化。
- 时序图用于显示生命线在单位时间内各种状态的图形表示。
- UML 提供了各种表示法来简化单位时间内两条生命线之间的过渡状态。
时序图示例
下图的时序图代表了软件开发生命周期的几个阶段。
在上图中,首先,软件经历需求阶段,然后是设计阶段,最后是开发阶段。在给定时间点,前一阶段的输出作为输入提供给第二阶段。因此,时序图可用于在 UML 中描述 SDLC(软件开发生命周期)。
时序图的好处
- 时序图用于表示对象在特定时间点的状态。
- 时序图允许逆向工程和正向工程。
- 时序图可用于跟踪系统中的每一次变化。
时序图的缺点
- 时序图难以理解。
- 时序图难以维护。
如何绘制交互图?
交互图用于表示系统的交互行为。交互图侧重于系统的动态行为。交互图为我们提供了系统中一个或多个生命线之间交互的上下文。
要绘制交互图,您首先需要确定要绘制交互图的场景。确定场景后,识别将参与交互的各种生命线。对所有生命线元素进行分类,并探索它们以识别可能的连接以及生命线之间的关系。要绘制交互图,需要以下内容
- 将要成为交互一部分的生命线的总数
- 是系统中各种对象之间消息流的序列。
- 各种运算符,以简化交互图的功能。
- 各种类型的消息,以更清晰、更精确的方式显示交互。
- 消息的有序序列。
- 对象的组织和结构。
- 对象的各种时间构造。
交互图的用途
交互图包括顺序图、协作图和时序图。以下是交互图的具体目的
- 顺序图用于探索任何实际应用程序或系统。
- 交互图用于探索和比较顺序图、协作图和时序图的使用。
- 交互图用于捕获系统的行为。它显示了系统的动态结构。
- 顺序图用于表示消息从一个对象到另一个对象的流。
- 协作图用于理解系统的对象体系结构,而不是消息流。
- 交互图用于将系统建模为有序的时间序列事件。
- 交互图用于逆向工程和正向工程。
- 交互图用于组织交互元素的结构。
摘要
- 交互只是分类器行为的单元。
- 交互图中的关键元素是生命线和消息。
- 交互图主要侧重于消息传递。
- 交互图捕获任何系统的动态行为。
- 交互图包含顺序图、时序图、通信/协作图。
- 顺序 UML 图的目的是可视化系统中消息流的顺序。
- 协作图的目的是强调结构方面。
- 时序图侧重于消息从一个对象发送到另一个对象的实例。