交互、协作和序列图(附示例)

什么是交互图?

交互图 在 UML 中用于建立对象之间的通信。它不操纵与特定通信路径相关的数据。交互图主要关注消息传递以及这些消息如何构成系统的一项功能。交互图旨在显示对象如何实现系统的特定要求。交互图中的关键组件是生命线和消息。

各种 UML 元素通常都有交互图。可以使用多种符号来显示交互的细节,例如序列图、时序图、通信/协作图。交互图可以捕获任何系统的动态行为。

交互图
交互图的符号

以下是 UML 中定义的不同类型的交互图:

  • 时序图
  • 协作图
  • 时序图

序列图的目的 UML图 是将系统中的消息流顺序可视化。软件工程中的序列图将两条生命线之间的交互显示为按时间顺序排列的事件序列。

UML 中的协作图也称为通信图。协作图的目的是强调系统的结构方面,即系统中各种生命线如何连接。

时间图关注消息从一个对象发送到另一个对象的实例。

交互图的目的

交互图可帮助您直观地了解系统的交互行为。交互图用于表示系统中一个或多个对象如何相互连接和通信。

交互图关注系统的动态行为。交互图为我们提供了系统中一条或多条生命线之间交互的上下文。

In UML,交互图用于以下目的:

  • 交互图用于观察系统的动态行为。
  • 交互图可视化系统中的通信和消息传递顺序。
  • 交互建模图表示系统中各种对象的结构方面。
  • 交互图表示系统内交互的有序序列。
  • 交互图提供了通过 UML 可视化实时数据的方法。
  • UML 交互图可用于解释面向对象或分布式系统的架构。

重要术语

交互图包含生命线、消息、操作符、状态不变量和约束。

生命线

生命线代表交互中的单个参与者。它描述了特定分类器的实例如何参与交互。

生命线表示分类器实例在交互中可能扮演的角色。以下是生命线的各种属性,

  1. 姓名
    1. 它用于引用特定交互中的生命线。
    2. 生命线的名称是可选的。
  2. 类型
    1. 它是生命线代表实例的分类器的名称。
  3. 选择
    1. 它是一个布尔条件,用于选择满足要求的特定实例。
    2. 选择器属性也是可选的。

生命线的符号在符号部分有解释。

收件箱

消息是交互中两条生命线之间的一种特定类型的通信。消息涉及以下活动,

  1. 用于调用某个操作的调用消息。
  2. 创建实例的消息。
  3. 销毁实例的消息。
  4. 用于发送信号。

当生命线收到调用消息时,它充当调用具有与消息中指定的类似签名的操作的请求。当生命线执行消息时,它具有控制焦点。随着交互随时间推移而进行,控制焦点在各个生命线之间移动。这种移动称为控制流。

以下是系统交互图中使用的消息:

消息名称
Sync同步消息 消息的发送者一直等待接收者返回消息执行的控制权。
异步消息 发送方并不等待接收方的返回;而是继续执行下一条消息。
返回信息 早期消息的接收者将控制焦点返回给发送者。
对象创建 发送者创建分类器的实例。
对象销毁 发送者销毁已创建的实例。
找到消息 消息的发送者不在交互范围之内。
丢失消息 信息永远无法到达目的地,并且在交互过程中丢失了。

状态不变量和约束

当实例或生命线收到消息时,它会导致其改变状态。状态是对象生命周期中的一种条件或情况,在该条件下,对象满足某些约束、执行某些操作并等待某些事件。

在交互图中,并非所有消息都会导致实例状态的改变。有些消息没有某些属性的值。它对对象的状态没有副作用。

Opera器

运算符指定操作数的执行方式。UML 中的运算符支持以分支和迭代形式对数据进行操作。可以使用各种运算符来确保在 UML 模型中使用迭代和分支。opt 和 alt 运算符用于分支操作。循环运算符用于确保迭代操作,其中重复执行条件,直到产生令人满意的结果。Break 运算符用于循环或迭代操作中。它确保每当遇到 break 运算符时就终止循环。如果未指定 break 条件,则循环将执行无数次,从而导致程序崩溃。

以下是交互图中使用的运算符:

Opera器 姓名
选择 附加选项 如果条件为真,则执行操作数。
例如,如果其他
其他 可再生 条件为真的操作数将被执行。
例如,切换
循环 循环 它用于在指定的时间内循环执行指令。
午休 午休 如果条件为真或假,它会中断循环并执行下一条指令。
参考 型号参考 它用于指代另一种交互。
当前类目 并行 所有操作数均并行执行。

迭代

在交互图中,我们还可以使用迭代表达式来显示迭代。迭代表达式由迭代说明符和可选迭代子句组成。UML 迭代没有预先指定的语法。

在迭代中,为了表示消息正在并行发送,使用并行迭代说明符。并行迭代说明符用 *// 表示。UML 中的迭代是通过使用循环运算符实现的。

分枝

在交互图中,我们可以通过向消息添加保护条件来表示分支。保护条件用于检查消息是否可以向前发送。只有当消息的保护条件为真时,才会向前发送消息。一条消息可以有多个保护条件,或者多条消息可以有相同的保护条件。UML 中的分支是借助 alt 和 opt 运算符实现的。

这些是一些 最重要的 UML 交互图中使用的术语。

交互图和符号的类型

以下是 UML 中定义的不同类型的交互图:

  • 时序图
  • 协作图
  • 时序图

交互的基本符号是一个矩形,矩形框的左上角有一个五边形。

什么是序列图?

A 顺序图 简单地按顺序描述对象之间的交互。UML 中的序列图的目的是可视化系统中消息流的顺序。序列图将两个生命线之间的交互显示为按时间顺序排列的事件序列。

  • 序列图显示了系统中场景的实现。系统中的生命线在系统执行期间参与。
  • 在序列图中,生命线用垂直线表示。
  • 两个或多个对象之间的消息流用贯穿页面底部的垂直虚线表示。
  • 在序列图中,使用了上面描述的不同类型的消息和操作符。
  • 在序列图中,也使用迭代和分支。
顺序图
序列图中的符号

上述序列图包含生命线符号和序列图中使用的各种消息的符号,例如创建、回复、异步消息等。

序列图示例

下面的序列图示例代表麦当劳的订餐系统:

顺序图
麦当劳订餐系统顺序图

给定序列图中的事件的有序序列如下:

  1. 下订单。
  2. 到收银台付款。
  3. 订单确认。
  4. 订单准备。
  5. 点菜。

如果改变操作顺序,则可能导致程序崩溃。还可能导致生成不正确或有缺陷的结果。上面给出的序列图中的每个序列都使用不同类型的消息表示。不能使用相同类型的消息来表示图中的所有交互,因为这会使系统变得复杂。

在为任何特定交互选择消息符号时,必须小心谨慎。符号必须与图表内的特定序列相匹配。

序列图的好处

  • 序列图用于探索任何实际应用程序或系统。
  • 序列图用于表示从一个对象到另一个对象的消息流。
  • 序列图更易于维护。
  • 序列图更容易生成。
  • 序列图可以根据系统内的变化轻松更新。
  • 序列图允许反向工程和正向工程。

序列图的缺点

  • 当系统涉及太多生命线时,序列图会变得复杂。
  • 如果消息序列的顺序发生变化,则会产生不正确的结果。
  • 每个序列需要使用不同的消息符号来表示,这可能有点复杂。
  • 消息的类型决定了图表内的序列类型。

什么是协作图?

合作图 描述软件对象之间的关系和交互。它们用于理解系统内的对象架构,而不是序列图中的消息流。它们也称为“通信图”。

根据面向对象编程 (OOP),对象实体具有与其关联的各种属性。通常,面向对象系统内有多个对象,每个对象都可以与系统内的任何其他对象相关联。协作图用于探索系统内对象的架构。可以使用协作图表示对象之间的消息流。

协作图的好处

  • 它也被称为通信图。
  • 它强调交互图的结构方面——生命线如何连接。
  • 其语法与序列图类似,只是生命线没有尾部。
  • 传递的消息的排序是通过对每条消息进行分层编号来表示的。
  • 与序列图相比,通信图在语义上较弱。
  • 对象图是通信图的特例。
  • 它使您能够专注于元素,而不是专注于序列图中描述的消息流。
  • 序列图可以很容易地转换为协作图,因为协作图的表现力不强。
  • 在根据序列图对协作图进行建模时,某些信息可能会丢失。

协作图符号
协作图符号

上述协作图符号包含生命线以及协作图中使用的连接器、自循环、前向和反向消息。

协作图的缺点

  • 当系统中存在太多对象时,协作图会变得复杂。
  • 探索系统内部的每个对象非常困难。
  • 协作图非常耗时。
  • 程序终止后,对象被销毁。
  • 对象的状态瞬间发生变化,这使得跟踪系统对象内发生的每一个变化变得困难。

协作图示例

下图表示学生管理系统的排序:

合作图

学生管理系统协作图

上面的协作图代表了一个学生信息管理系统。上图中的通信流程如下:

  1. 学生通过登录系统请求登录。
  2. 软件的身份验证机制检查请求。
  3. 如果数据库中存在学生条目,则允许访问;否则,返回错误。

什么是时序图?

时序图 是用于描述生命线在任何时间点的状态的波形或图形。它用于表示对象从一种形式转换为另一种形式。时序图不包含序列图和协作图中所需的符号。使用波形表示软件程序在不同时间点之间的流程。

  • 它是交互的正确表示,重点关注各个对象之间发送消息的具体时间。
  • 时间图用于解释特定对象的详细时间处理。
  • 时间图用于解释对象在其生命周期内如何变化。
  • 时间图主要用于分布式和嵌入式系统。
  • 在 UML 中,时序图是根据左边缘指定的生命线名称从左到右读取的。
  • 时间图用于表示生命线内时常发生的各种变化。
  • 时序图用于显示单位时间内生命线各种状态的图形表示。
  • UML 提供了各种符号来简化单位时间内两条生命线之间的转换状态。

时序图示例

下面给出的时序图表示 软件开发生命周期.

时序图

时序图示例

在上图中,软件首先经过需求阶段,然后是设计阶段,最后是开发阶段。在给定时间点,前一阶段的输出将作为输入提供给第二阶段。因此,时间图可用于在 UML 中描述 SDLC(软件开发生命周期)。

时序图的好处

  • 时间图用于表示对象在特定时间点的状态。
  • 时序图允许逆向工程和正向工程。
  • 时间图可用于跟踪系统内部的每个变化。

时序图的缺点

  • 时序图难以理解。
  • 时序图难以维护。

如何绘制交互图?

交互图用于表示系统的交互行为。交互图侧重于系统的动态行为。交互图为我们提供了系统中一条或多条生命线之间交互的上下文。

要绘制交互图,首先必须确定要绘制交互图的场景。确定情况后,确定将涉及交互的各种生命线。对所有生命线元素进行分类并探索它们以确定可能的连接以及生命线如何相互关联。要绘制交互图,需要以下事项:

  1. 参与互动的生命线总数
  2. 是系统内各个对象内的一系列消息流。
  3. 各种操作符可以简化交互图的功能。
  4. 多种类型的消息,使交互更加清晰、精准的展示。
  5. 消息的有序序列。
  6. 对象的组织和结构。
  7. 对象的各种时间构造。

交互图的使用

交互图由序列图、协作图和时序图组成。以下是交互图的具体用途:

  • 序列图用于探索任何实际应用程序或系统。
  • 交互图用于探索和比较序列图、协作图和时间图的使用。
  • 交互图用于捕捉系统的行为。它显示系统的动态结构。
  • 序列图用于表示从一个对象到另一个对象的消息流。
  • 协作图用于了解系统的对象架构而不是消息流。
  • 交互图用于将系统建模为按时间顺序排列的事件序列。
  • 交互图可用于逆向工程和正向工程。
  • 交互图用于组织交互元素的结构。

总结

  • 交互只是分类器行为的单位。
  • 交互图中的关键元素是生命线和消息。
  • 交互图主要关注消息传递。
  • 交互图捕获任何系统的动态行为。
  • 交互图包含序列图、时间图、通信/协作图。
  • 序列 UML 图用于可视化系统中消息流的序列。
  • 协作图的目的是强调结构方面。
  • 时间图关注消息从一个对象发送到另一个对象的实例。