电子商务系统分析与设计
上QQ阅读APP看书,第一时间看更新

3.7 顺序图

顺序图(Sequence Diagram)描述了与用例相关的多个对象及其之间的动态交互关系,通常用于解释系统用例的实现过程。顺序图强调对象间交互的时间和顺序,它将对象间的交互关系表示为一个二维图,水平轴表示参与交互的各个对象,垂直轴表示时间。顺序图中的对象用一个带有垂直虚线的矩形框表示,其中矩形框里标有对象名和类名,垂直虚线是对象的生命线,用于表示在某段时间内对象是存在的,对象间的交互通过在对象的生命线之间画消息来表示。如图3-30所示是“用户登录”用例的顺序图。

978-7-111-50752-9-Chapter03-33.jpg

图3-30 “用户登录”用例顺序图

在UML中,顺序图由活动者、对象、生命线、激活、消息5类元素组成。

3.7.1 活动者

活动者是指用例的执行者,使用执行者的人形符号来表示。

3.7.2 对象

对象是用例实现过程中的参与者,用一个矩形框表示,使用标准的UML格式“name:ClassName”来标记,其中表示对象名的“name”是可选的,表示对象所属类名的“Class-Name”必须标明,但当一个顺序图中包含几个同属一个类的对象时,则必须为该类的所有对象命名以进行区分。在顺序图中,活动者和对象都是位于图的顶部,通常应尽量把交互频繁的对象放在一起。

3.7.3 生命线

生命线表示对象存在的时间,用一条从对象图标向下延伸的虚线表示。生命线从对象创建时开始到对象消亡时终止,对象只有在其生命线所标示的时间范围内才能参与交互。

3.7.4 激活

激活表示对象参与交互时执行相应操作的时间段,用替换生命线的双道线表示,激活期双道线的上端与过程的开始时间齐平,下端与过程的结束时间齐平。处于激活期的对象正在因响应或发送消息而执行某个动作或活动,不在激活期的对象处于休眠状态,要等待新的消息来激活它。

3.7.5 消息

在面向对象方法中,对象间的交互是通过传递消息来完成的,消息是对象间的一种通信方式,UML中定义的消息包括以下4种。

1)简单消息:表示简单的控制流,用于描述控制流如何在对象间进行传递,而不考虑通信的细节。

2)调用消息:传递了要求接收对象执行某种操作或调用某个方法的请求。发送对象发出消息后必须等待消息返回,只有处理消息的操作执行完毕后,发送对象才可以继续执行下一步操作。调用消息的格式为:操作(参数列表)。

3)返回消息:调用消息中的操作完成后,由接收对象返回给发送对象的说明执行结果的回应消息,一个调用消息通常对应一个返回消息。

4)异步消息:是一种不需等待返回消息的特殊调用消息。异步消息主要用于描述实时系统中的并发行为,发送对象发出消息后可立刻进行下一步操作。

在UML中,消息用带箭头的线条表示,线条上方标明具体的消息内容,箭头从发送对象指向接收对象,不同的箭头表示不同的消息,如图3-31所示。顺序图强调的是对象交互的时间顺序,故消息可带有发送顺序号,但由于消息按照发送的先后在时间纵轴上形成了从高到低的排列顺序,因此通常消息前无需标明发送顺序号。

978-7-111-50752-9-Chapter03-34.jpg

图3-31 顺序图各类元素图标

在图3-30所示的“用户登录”用例顺序图中,活动者“:User”向对象“:Login-GUI”传递的“用户名和密码”是一个不带有明显操作请求的简单消息,而“:LoginGUI”向对象“:LoginCheckAction”传递的是要求执行用户验证操作的调用消息,当密码验证不一致时,“:LoginCheckAction”将向“:LoginGUI”返回“密码错误”的消息,如密码正确则向对象“:UserDB”发送异步消息要求更改用户状态为“已登录”,同时将“用户信息”返回到对象“:MainGUI”进行显示。

3.7.6 顺序图的基本技术

除了5类基本元素外,顺序图还包括一些以元素为基础的拓展技术,这些技术使得顺序图能更准确完整地解释用例实现过程。

1)创建和销毁对象:对象可以在传递消息之前就存在,也可以在交互过程中由其他对象创建或销毁。如图3-32a所示,创建对象操作使用调用消息的箭头表示,箭头指向被创建对象的矩形框,新创建的对象也具有生命线,可以和其他对象一样发送和接收消息;当某个对象被销毁时,需要在其生命线底端标上“X”符号,销毁对象操作也可使用调用消息的箭头表示。

2)设置对象状态:对象的生命线上可以用圆角矩形框标示对象当前所处的状态。在顺序图中,对象状态可以在交互之前就存在,也可以在对象的交互过程中由其他对象设置。

3)分支和从属流:当一个对象需要根据不同条件向另一个或另几个对象传递不同消息时,可以通过传递分支消息来实现;当分支消息接收对象为同一个时,还要在该接收对象的生命线上添加从属流,也可称为生命线分支。如图3-32c所示,当condition1成立时,ob-ject1向object2传递消息operation1,当condition2成立时,object1向object2传递消息opera-tion2,为了接收两个不同走向的消息,在object2的生命线上添加了一条从属流。消息分支表示在下一步的流程中,其中一个分支消息将被执行,各分支消息在时间纵轴上的开始位置是相同的,其结束“高度”也应是相同的。

978-7-111-50752-9-Chapter03-35.jpg

图3-32 顺序图基本技术图示

a)创建和消毁对象 b)设置对象状态 c)分支和从属流

3.7.7 顺序图的基本画法

在UML中,顺序图存在两个轴,如图3-33所示,水平轴表示参与交互的不同对象,垂直轴表示对象交互的时间顺序,对象间传递的消息按照时间先后在垂直轴上从高到低依次排列。

978-7-111-50752-9-Chapter03-36.jpg

图3-33 顺序图基本画法

在电子商务系统分析与设计阶段,系统用例涉及的对象主要分为边界类对象、控制类对象和实体类对象,根据这3类对象在用例执行过程中所起的作用,可总结出画相应顺序图的基本流程为:活动者向边界类对象传递要求执行用例的请求(简单消息),边界类对象根据请求形成相应的调用消息传递给控制类对象,控制类对象在完成请求过程中通常会向实体类对象发送要求调用某具体方法的消息,实体类对象收到后调用并执行自身的相应方法,并将执行结果返回给控制类对象,控制类对象进一步处理完毕后将最终结果返回给边界类对象。

案例3-6

“取款”用例由客户(:Customer)、系统界面(:ATMGUI)、取款操作(:MoneyWithdraw)、账户(:Account)和交易记录(:TransactionRecord)五类对象交互完成,对象之间的交互过程为:客户在ATM系统界面上选择“取款”,系统提示输入取款金额,客户输入取款金额。系统先验证金额数字的有效性,如果无效则要求重新输入,如果有效则系统进一步查询账户余额并确定余额是否充足:如果余额不足则提示“余额不足”;如果余额充足则更新账户余额并添加一条取款交易记录,系统提示“操作成功”并询问客户是否要打印凭条。

根据以上过程可绘制“取款”用例的顺序图,如图3-34所示,整个取款过程共进行了三次判断,根据不同的判断结果(条件)在系统界面上显示不同的内容,因此在“AT-MGUI”对象生命线上需要添加一条分支。

978-7-111-50752-9-Chapter03-37.jpg

图3-34 “取款”用例顺序图

案例3-7

如图3-35所示是“审核订单”用例的顺序图,其基本运作过程是:订单处理员(:Or-der Handler)查看客户提交的新订单,在订单明细界面(:OrderDetailGUI)输入自己的信息并保存(:EditOrderAction)到客户订单(:CustomerOrder)以标明订单的负责人。如果未能保存,系统将提示“保存失败”;否则若订单未支付,则系统直接提示“保存成功”,若订单已支付,则系统进一步转到生产订单界面(:ProduceOrderGUI),由订单处理员填写下单生产相关信息,形成生产订单发送给生产部门(:Production Department),同时更新客户订单状态为“生产中”,系统提示“发送成功”。

978-7-111-50752-9-Chapter03-38.jpg

图3-35 “审核订单”用例顺序图

3.7.8 建立顺序图的步骤

在系统分析与设计阶段,建立顺序图的步骤如下。

1)确定对象交互的上下文。

2)找出参与交互的活动者及对象。

3)为活动者和对象各自设置一条垂直向下的生命线。

4)从初始化交互的信息开始,自顶向下在对象的生命线之间安置消息。

5)在生命线上绘出对象的激活期。