UML之序列图事件时刻与轨迹

序列图的生命线代表了时间的流逝,但沿着生命线从上向下移动时,时间在生命线上的分布并不是均匀的,而且不同生命线上时间流逝的速度通常也是不同的。此外,不同生命线在同一水平位置的时刻一般也并不相同。

在生命线上某个时刻发送或者接收消息,可以看作是当前生命线在该时刻上发生的事件。

生命线之间是相互独立的,并且不同生命线上时间流逝的速度不同,因此当一系列事件在不同的生命线上发生时,通常很难确定它们的发生顺序。只有事件发生在同一条生命线时,从上到下的事件才表明它们发生时间顺序。

关于生命线上的消息、事件和时间有如下几个规则:

  1. 消息的结束(接收消息)必须发生在消息开始(发送消息)之后。这是基本的因果关系规则。
  2. 单条生命线上的事件从上到下按时间顺序排列。这是生命线的定义。此规则强制规定了生命线上事件的严格顺序。
  3. 如果消息有返回值,消息的返回只能在原始消息被接收之后发生。这是规则1和2的必然结果。

表示消息的箭头可以是向下倾斜的。可以利用这种倾斜来表示消息从一条生命线传递到另一条生命线时涉及了时间的流逝。当然,根据上述规则1,消息从一条生命线传递到另一条生命线,无论这个过程多快都一定会产生时间的流逝,它与消息箭头是水平还是倾斜没有关系。图 1使用向下倾斜的箭头描述了两条相互交叉的消息。

图 1 交叉的消息

根据前述规则,序列图允许存在事件发生的多条时间路径。就整个图而言,事件形成一个偏序关系。每个有效的事件序列称为一个"轨迹(TRACE)"。当消息像图 1这样相互交叉时,就会产生多个轨迹的可能性。

建模者通常使用"!"标记消息发送事件,使用"?"标记消息接收事件,轨迹则通常用尖括号"< >"表示,尖括号内的事件顺序表明事件发生时间的顺序。

以下尝试分析图 1中的事件与轨迹。

根据规则1,消息m和n都遵循先发送后接收的事件顺序,因而消息m的发送(m!)早于消息m的接收(m?),消息n的发送(n!)早于消息n的接收(n?),即轨迹中存在<m!, m?>、<n!, n?>。

根据规则2,可知在生命线lifeline1上消息m的发送(m!)早于消息n的接收(n?),在轨迹中存在<m!, n?>;在生命线lifeline2上消息n的发送(n!)早于消息m的接收(m?),在轨迹中存在<n!, m?>。

消息m和n的发送事件分别发生于生命线lifeline1和lifeline2,所以这两个发送事件的时间先后顺序存在两种可能,消息m先于消息n发出或者消息n先于消息m发出,即轨迹中存在两种可能<m!, n!>或<n!, m!>。类似地,消息m和n的接收事件轨迹也存在两种可能<m?, n?>或<n?, m?>。

综上,图 1所表达的序列存在四种可能的轨迹:

<m!, n!, m?, n?>

<m!, n1, n?, m?>

<n!, m!, m?, n?>

<n!, m!, n?, m?>

根据上述讨论可知,如果序列图中只有两条生命线并且没有消息交叉,那么序列图中的事件只可能有一种轨迹。然而,当序列图中存在多于两条生命线时,存在的轨迹也将不是唯一的。例如在图 2中,存在几种可能的轨迹?

图 2 多条生命线上的交互

序列图图 2中,可以根据生命线:Server确定消息m的接收事件发生于消息n的接收事件之前,即<m?, n?>。而生命线client1:和client2:上消息m的发送事件m!和消息n的发送事件n!,由于不同生命线的时刻及时间流逝速度不同,并不能依据它们在序列图生命线上的位置确定事件发生的时刻顺序,因而消息m和消息n的发送存在两种可能,即<m!, n!>或<n!, m!>。

类似地,综合上述分析,可知序列图图 2存在以下三种可能的轨迹。

<m!, m?, n!, n?>

<m!, n!, m?, n?>

<n!, m!, m?, n?>

UML -- 光头颜说IThttps://gtyan.com/archives/category/uml

本UML专栏https://blog.csdn.net/mboy2008/category_12860871.html

相关推荐
莫桑晚-为尚天10 小时前
触控芯片核心:DRV与SENS信号解析
嵌入式硬件·硬件工程·软件工程
_清浅1 天前
软件工程(速成笔记)
软件工程
PcVue China1 天前
PcVue X 工控——工厂数字化转型与落地巡回研讨会圆满举行
人工智能·软件工程·scada·监控平台·工控网
雾江流2 天前
RikkaHub 1.6.11 | 开源的本地大型语言模型聚合应用,支持多种AI服务提供商
人工智能·语言模型·自然语言处理·软件工程
記億揺晃着的那天3 天前
六大 API 架构风格
架构·软件工程·graphql·rest api
rolt3 天前
[pdf、epub]350道《软件方法》强化自测题业务建模需求分析共298页(202511更新)
产品经理·架构师·uml
云知谷3 天前
【经典书籍】《代码整洁之道》第六章“对象与数据结构”精华讲解
c语言·开发语言·c++·软件工程·团队开发
okjohn5 天前
《架构师修炼之路》——②对架构的基本认识
java·架构·系统架构·软件工程·团队开发
雾江流5 天前
Aloha浏览器 7.10.1 |私人浏览器,极速上网,资源嗅探
软件工程
小哈里6 天前
【软考架构】2025H2系统架构设计师考试复习.jpg(软件架构、软件工程、数据库、Web开发、高项)
数据库·架构·系统架构·软件工程·后端开发