免费注册
首页 知识社区 『这就是UML!』系列内容第7讲:时序图

『这就是UML!』系列内容第7讲:时序图

特邀撰稿人:翔宇亭IT乐园 2024-5-29
1063

时序图,又称顺序图或序列图,它是描述对象行为的一种交互视图。主要用来更直观的表现各个对象交互的时间顺序,将体现的重点放在 以时间为参照,各个对象发送、接收消息,处理消息,返回消息的时间流程顺序。

时序图简介

时序图的用途

时序图描述某个业务场景的行为,它关注对象之间消息传送的时间顺序。比如在图书馆借阅系统中,图书馆工作人员帮助读者完成图书借阅的业务场景、帮助读者完成还书的业务场景、读者在线预借图书的场景等。

时序图的主要用途是为用例进行逻辑建模,对用例所表达的需求进行更加精细的表达。

交通信号灯时序图

时序图的构成

时序图主要包括对象、生命线、消息和激活4种元素。

在UML中,时序图将交互关系表示为一张二维图。其中,纵向为时间轴,时间沿竖线向下延伸。横向是对象维,在这一维度上水平排列着参与交互的各个对象。

1. 对象

对象是类的一个实例或一组实例,UML中对象的图形有下面三种情形:

(1)对象名+对象所属的类名

(2)只有对象名(省略类名)

(3)只有类的名称(匿名对象)

三种对象的表示方法如下图所示:

时序图三种对象

不管使用哪种形式的对象,其名称下面都有一条下划线,以表明其是对象元素。

2. 生命线

生命线代表了一次交互中的一个参与对象在一段时间内的存在。在时序图中,生命线位于每个对象的底部中心位置,显示为一条垂直的虚线,与时间轴平行。

时序图生命线

3. 消息

消息是从一个对象(发送者)向另一个对象(接收者)发送信号,或由一个对象(发送者或调用者)调用另一个对象(接收者)的操作。

在时序图中,消息表示为从一个对象的生命线指向另一个对象的生命线的箭头。消息的类型主要包括简单消息、同步消息、异步消息、返回消息四种。另外,还有一种消息是对象向自己发送消息的自反消息。

时序图消息

(1)简单消息

简单消息可以泛指对象之间的任何消息调用或发送,而不必关心是异步还是同步的;

(2)同步消息

对象发送消息后,需要接收消息的对象响应完毕并返回消息时才会进行其余的工作;

(3)异步消息

对象发送消息后,不需要等待接收对象的返回消息可以继续执行其余的工作;

(4)自反消息

也是简单消息的一种,不过是对象向自己发送消息,而不是其它的对象。

4. 激活

激活表示一个对象执行一个动作所经历的时间段。一般情况下,当一个对象收到其它对象发送的消息时被激活,在激活期内处理该消息,激活结束时应该发出一个消息。

在UML中使用处于生命线上的垂直长条矩形来表示。矩形的开始处为对象开始操作动作,底部表示操作动作的结束。

时序图激活

5. 删除标志

删除标志使用一个“×”来表示。其位于对象生命线的低端,表示删除对象。

时序图删除标志

时序图建模

建模步骤:

(1)设置交互的语境:哪个系统?哪些类?哪个用例?用例的哪些脚本?

(2)设置交互场景:识别对象在交互中扮演的角色;

(3)为对象设置生命线:很多建模工具在对序列图建模时,对象自带生命线;

(4)设置消息,从引发交互的消息开始,按时间顺序考虑对象之间产生的消息,及消息的特征(参数、返回值类型等);

(5)设置激活期,有些工具在绘制建模消息时,能够自动创建激活,根据需要可以改变激活期的大小,有些工具需要设计人员专门拖拽一个激活期到对象的生命线上;

(6)设置其它约束及条件。如时间的约束、循环的约束,消息的条件等。

时序图建模案例

S校图书馆借阅系统中,图书管理员处理借阅信息,即用例图中的借阅图书。

(1)确定主流程

· 读者把要借阅的书籍送到借阅台;

· 图书馆工作人员在登录系统后进入图书借阅界面;

· 读者刷取借阅证;

· 系统获取读者信息和已借阅的图书信息列表;

· 在没有欠款、没有超期图书,且已借阅数量未达到限制时,图书馆工作人员使用扫描枪扫描每本待借书籍;

· 系统通过业务逻辑层获取图书的信息,并添加到借阅列表中;

· 图书馆工作人员保存借阅信息,完成借阅。

(2)确定序列图中参与交互的对象,主要包括:图书馆工作人员、借阅界面、借阅列表、业务逻辑层、数据库等。

(3)绘制时序图

这里只包含基本流程:获取读者信息-->扫描图书-->保存借阅-->结束借阅。而对于验证读者可借阅册数、是否有超期或是否有欠款信息等可以在额外的时序图中绘制,以免使得本时序图变得过于庞大。

S校图书馆借阅系统时序图

(4)注意事项

如在建模过程中,用例或业务比较复杂,可以将用例流程拆解为基本流程和若干备选流程,在绘制备选流程中只绘制与主流程不同的地方即可。

如在借阅图书这个用例中,有超期信息及有罚款信息时不能进行借阅,这时可以分别单独绘制序列图。而有罚款信息时,如读者选择图书馆工作人员处理罚款信息,则在序列图中只绘制相关消息,具体的罚款处理可以参考罚款处理的序列图。

序列图可以在分析中获取用户操作的大致过程,这时的序列图可以粗一些,完全可以把系统看成黑盒对象,在设计中可以进一步的细化,使设计人员更能清楚各个类对象之间如何实现交互。

一些特殊处理

在UML2.x中,提供了更加丰富的功能来描述现实中的建模要求,在序列图部分也添加了不少元素,如片段,这样可以帮助建模人员方便的描述循环消息、条件消息、并行消息等。当然UML2.x使建模本身也变得极其复杂。那么在UML1.x中如何恰当地表示这些信息呢?

1. 循环消息的表示

有可能对象的某个操作需要循环调用消息,这时可以借助下面的方法:*[for all borrowing books]:scanBooks() ,这里表示图书馆工作人员需要对每本待借书籍执行扫描操作,需要多次调用借阅界面的scanBooks()操作。

上面这种适用于调用数量不确定的情形,对于确定调用次数的情形可以使用下面的方法:*[i:=1..n]: connectServer(connInfo),这里表示connectServer()消息最多执行n次。

2. 消息的条件发送

一种方法是可以在条件前加上警戒条件,如:[borrowNum<=20]:getBookInfo(barCode),这里表示当借阅图书数量未超过20时,借阅界面才会向业务逻辑层请求获取图书信息。也可以在序列图中使用下面的方法来表示:

时序图消息的条件发送

3. 时间约束

有时,我们可能需要表示发送消息和返回消息之间的间隔要小于指定时间,这时也可以在序列图中使用某种特殊方法来表示。

时序图时间约束

以上内容介绍了UML中序列图的概念、构成元素以及绘制序列图的步骤,并给出了一个样例。希望你读完这篇文章对你的知识海洋有所补充。




往期内容推荐

这就是UML——第1讲 UML简介

这就是UML——第2讲 UML通用知识上:事务、关系和公共机制

这就是UML——第3讲 UML通用知识下:视图和图

这就是UML——第4讲 用例图

这就是UML——第5讲 用例图案例学习

这就是UML——第6讲 类图

免费在线协同思维导图流程图 免费使用