首页 > 课堂 > 技术开发 > 正文

UML系列内容之八:序列图

2023-06-17 18:00:46
字体:
来源:转载
供稿:网友

序列图(Sequence Diagram),又称顺序图或时序图,它是描述对象行为的一种交互视图。

1 什么是序列图

序列图描述某个业务场景的行为,它关注对象之间消息传送的时间顺序。

如在图书馆借阅系统中,图书馆工作人员帮助读者完成图书借阅的业务场景、帮助读者完成还书的业务场景、读者在线预借图书的场景等。

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

2 序列图的构成

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

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

2.1 对象

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

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

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

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

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

序列图中的对象表示方法

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

2.2 生命线

生命线代表了一次交互中的一个参与对象在一段时间内的存在。

在序列图中,生命线位于每个对象的底部中心位置,显示为一条垂直的虚线,与时间轴平行。

序列图-对象的生命线

2.3 消息

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

在序列图中,消息表示为从一个对象的生命线指向另一个对象的生命线的箭头

消息的类型主要包括简单消息、同步消息、异步消息、返回消息四种。另外,还有一种消息是对象向自己发送消息的自反消息。

消息的类型

(1)简单消息

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

(2)同步消息

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

(3)异步消息

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

(4)自反消息

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

2.4 激活

激活表示一个对象执行一个动作所经历的时间段。

一般情况下,当一个对象收到其它对象发送的消息时被激活,在激活期内处理该消息,激活结束时应该发出一个消息。

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

序列图-对象的激活

2.5 删除标志

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

序列图-对象的删除标志

3 序列图建模

建模顺序:

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

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

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

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

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

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

4 序列图建模案例

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

(1)确定主流程

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

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

读者刷取借阅证;

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

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

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

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

(2)确定序列图中参与交互的对象

主要包括:图书馆工作人员、借阅界面、借阅列表、业务逻辑层、数据库等

(3)绘制序列图

这里只包含基本流程:获取读者信息->扫描图书->保存借阅->结束借阅。

而对于验证读者可借阅册数、是否有超期或是否有欠款信息等可以在额外的序列图中绘制。以免使得序列图变得过于庞大。

S学校图书馆序列图

(4)注意事项

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

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

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

5 一些特殊处理

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

那么在UML1.x中如何恰当的表示这些信息呢?

5.1 循环消息的表示

有可能对象的某个操作需要循环调用消息,这时可以借助下面的方法:

*[for all borrowing books]:scanBooks()

这里表示图书馆工作人员需要对每本待借书籍执行扫描操作,需要多次调用借阅界面的scanBooks()操作。

上面这种适用于调用数量不确定的情形,对于确定调用次数的情形可以使用下面的方法:

*[i:=1..n]: connectServer(connInfo)

这里表示connectServer()消息最多执行n次。

5.2 消息的条件发送

一种方法是可以在条件前加上警戒条件,如:

[borrowNum<=20]:getBookInfo(barCode)

这里表示当借阅图书数量未超过20时,借阅界面才会向业务逻辑层请求获取图书信息。

也可以在序列图中使用下面的方法来表示:

序列图中条件消息

5.3 时间约束

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

序列图-消息的时间约束

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表