在这篇文章中,我们讨论序列图。统一建模语言 (UML)是软件工程领域的一种建模语言,旨在设置标准方法来可视化系统设计。 UML 指导创建多种类型的图,例如交互图、结构图和行为图。
序列图是最常用的交互图。
交互图——
交互图用于显示系统的交互行为。由于可视化系统中的交互可能是一项繁琐的任务,因此我们使用不同类型的交互图来捕获系统中交互的各种特征和方面。
序列图 –
序列图只是按顺序描述对象之间的交互,即这些交互发生的顺序。我们还可以使用术语事件图或事件场景来指代序列图。序列图描述系统中的对象如何以及以何种顺序函数。这些图表被商人和软件开发人员广泛用于记录和理解新系统和现有系统的需求。
序列图符号 –
- 参与者——UML 图中的参与者代表一种角色,它与系统及其对象进行交互。这里需要注意的是,参与者总是在我们打算使用 UML 图建模的系统范围之外。
图 –演员的符号 我们使用演员来描绘各种角色,包括人类用户和其他外部主体。我们使用棒人符号表示 UML 图中的演员。我们可以在一个序列图中有多个参与者。
例如——这里座位预订系统中的用户被显示为一个演员,它存在于系统之外而不是系统的一部分。图 –与座位预订系统交互的演员 - 生命线——生命线是一个命名元素,它在序列图中描绘了一个单独的参与者。所以基本上序列图中的每个实例都由一条生命线表示。生命线元素位于序列图中的顶部。 UML 中为生命线命名的标准遵循以下格式 – 实例名称:类名称
图 –生命线 我们在名为 head 的矩形中显示一条生命线及其名称和类型。如上图所示,头部位于垂直虚线(称为茎部)的顶部。如果我们想为一个未命名的实例建模,我们遵循相同的模式,除了现在生命线名称的部分留空。
生命线和演员之间的区别——生命线总是描绘系统内部的对象,而演员则用于描绘系统外部的对象。下面是一个序列图的例子:
图 –一个序列图 - 消息——对象之间的通信使用消息来描述。消息按顺序出现在生命线上。我们使用箭头表示消息。生命线和消息构成了序列图的核心。
消息大致可以分为以下几类:图 –具有不同类型消息的序列图 - 同步消息——同步消息在交互可以继续之前等待回复。发送方一直等到接收方完成对消息的处理。调用方只有在知道接收方已经处理了前一条消息时才继续,即它接收到一条回复消息。面向对象编程中的大量调用是同步的。我们使用实心箭头表示同步消息。
图 –使用同步消息的序列图 - 异步消息——异步消息不等待接收者的回复。无论接收者是否处理先前的消息,交互都会向前移动。我们使用带线的箭头来表示异步消息。
- 创建消息——我们使用创建消息在序列图中实例化一个新对象。在某些情况下,特定的消息调用需要创建一个对象。它用虚线箭头表示,并在其上标有创建字,以指定它是创建消息符号。
例如 – 在电子商务网站上创建新订单需要创建 Order 类的新对象。图 –使用 create message 的情况 - 删除消息——我们使用删除消息来删除一个对象。当一个对象被释放内存或在系统内被销毁时,我们使用删除消息符号。它破坏了系统中对象的出现。它由一个以 x 结尾的箭头表示。
例如 – 在下面的场景中,当用户收到订单时,可以销毁订单类的对象。图 –使用删除消息的场景 - 自我消息——在某些情况下可能会出现对象需要向自己发送消息的情况。此类消息称为自我消息,并用 U 形箭头表示。
图 –自我讯息 例如 – 考虑设备想要访问其网络摄像头的场景。这样的场景使用 self 消息表示。
图 –一个使用 self 消息的场景 - 回复消息 –回复消息用于显示从接收方发送到发送方的消息。我们使用带虚线的开放箭头表示返回/回复消息。只有当接收者发送回复消息时,交互才会向前移动。
图——回复消息 例如 – 考虑设备向用户请求照片的场景。这里显示正在发送的照片的消息是回复消息。
图 –使用回复消息的场景 - Found Message – Found 消息用于表示未知来源发送消息的场景。它使用从端点指向生命线的箭头表示。例如: 考虑硬件故障的场景。
图 –发现消息 这可能是由于多种原因造成的,我们不确定是什么导致了硬件故障。
图 –使用找到的消息的场景 - 丢失消息 –丢失消息用于表示系统不知道收件人的情况。它使用从生命线指向终点的箭头表示。例如: 考虑生成警告的场景。
图 –丢失的消息 可能为用户或生命线与之交互的其他软件/对象生成警告。由于目的地事先未知,我们使用丢失消息符号。
图 –使用丢失消息的场景
- 同步消息——同步消息在交互可以继续之前等待回复。发送方一直等到接收方完成对消息的处理。调用方只有在知道接收方已经处理了前一条消息时才继续,即它接收到一条回复消息。面向对象编程中的大量调用是同步的。我们使用实心箭头表示同步消息。
- Guards –为了对条件进行建模,我们在 UML 中使用了Guards 。当我们需要以满足条件为借口限制消息流时使用它们。守卫在让软件开发人员了解附加到系统或特定进程的约束方面发挥着重要作用。
例如:为了能够提取现金,余额大于零是必须满足的条件,如下所示。
图 –使用警卫的序列图
基于情感的音乐播放器的序列图 –
上面的序列图描绘了基于情感的音乐播放器的序列图:
- 首先,应用程序由用户打开。
- 然后设备可以访问网络摄像头。
- 网络摄像头捕捉用户的图像。
- 该设备使用算法来检测面部并预测情绪。
- 然后它请求数据库以获取可能的情绪字典。
- 从数据库中检索心情。
- 心情被显示给用户。
- 从数据库中请求音乐。
- 生成播放列表并最终显示给用户。
序列图的用途——
- 用于对复杂函数、操作或程序背后的逻辑进行建模和可视化。
- 它们还用于显示 UML 用例图的详细信息。
- 用于了解当前或未来系统的详细功能。
- 可视化消息和任务如何在系统中的对象或组件之间移动。
参考 –
序列图 – IBM
序列图 – sparxsystems