火龙果●整理 uml.org.cn 顺序图 1.概述 顺序图(Sequence Diagram)是交互图的一种,它按照交互发生的时间顺序,利用对象 的“生命线”和消息描述对象之间的交互。通常用来描述一个用例的行为,完成对系统的动 态行为建模。顺序图主要目的是定义事件序列,产生一些希望的输出,其重点不是消息本身, 而是消息产生的顺序。一个典型的顺序图如图1所示, sd Delete User Accoun Administrator 1.0 select Delete user 1 ref 1.6 Close Account 图1.顺序图 2.基本元素 顺序图的基本元素有生命线、消息、活动者、对象、组合片断。 2.1生命线(Lifeline) 一条生命线代表着顺序图中的一个参与者,表示建模的角色或对象实例。在UML中, 上海交通大学软件学院饶若楠,“面向对象分析与设计”课程资料,请勿外传
上海交通大学软件学院 饶若楠, “面向对象分析与设计”课程资料 ,请勿外传 顺序图 1. 概述 顺序图(Sequence Diagram)是交互图的一种,它按照交互发生的时间顺序,利用对象 的“生命线”和消息描述对象之间的交互。通常用来描述一个用例的行为,完成对系统的动 态行为建模。顺序图主要目的是定义事件序列,产生一些希望的输出,其重点不是消息本身, 而是消息产生的顺序。一个典型的顺序图如图 1 所示, 图 1. 顺序图 2. 基本元素 顺序图的基本元素有生命线、消息、活动者、对象、组合片断。 2.1 生命线(Lifeline) 一条生命线代表着顺序图中的一个参与者,表示建模的角色或对象实例。在 UML 中
火龙果●整理 uml.org.cn 生命线画作一个方格,一条虚线从上而下,通过底部边界的中心,生命线对象的名字放置在 方格里,如图2所示, sd Lifelines Self Lifeline Instance :Class 图2.生命线(1) 通常,顺序图属于某个用例时,顺序图中会包含有参与者的生命线。边界类、控制类、 实体类都可以拥有生命线,如图3所示, sd More Lifelines Actor Boundary Control Entity 图3.生命线(2) 2.2消息(Messages) 消息是对象之间的一种通信,它可以传递信息并期望相关的动作被执行。顺序图的第一 个消息总是从顶端开始,并且一般位于图的左边。然后继发的消息加入图中,稍微比前面的 消息低些。在UML中,一个对象传递一个消息给另一个对象,画一条线指向接收对象,包 括一个实心箭头(表示同步调用操作)或一个棍形箭头(表示一个异步信号)。消息或方法 名字放置在带箭头的线上面。 如图4所示,第一个消息是一个同步消息,隐式返回。第二个消息表示异步,第三个消 息即是异步消息的返回的消息。 上海交通大学软件学院饶若楠,“面向对象分析与设计”课程资料,请勿外传
上海交通大学软件学院 饶若楠, “面向对象分析与设计”课程资料 ,请勿外传 生命线画作一个方格,一条虚线从上而下,通过底部边界的中心,生命线对象的名字放置在 方格里,如图 2 所示, 图 2. 生命线(1) 通常,顺序图属于某个用例时,顺序图中会包含有参与者的生命线。边界类、控制类、 实体类都可以拥有生命线,如图 3 所示, 图 3. 生命线(2) 2.2 消息(Messages) 消息是对象之间的一种通信,它可以传递信息并期望相关的动作被执行。顺序图的第一 个消息总是从顶端开始,并且一般位于图的左边。然后继发的消息加入图中,稍微比前面的 消息低些。在 UML 中,一个对象传递一个消息给另一个对象,画一条线指向接收对象,包 括一个实心箭头(表示同步调用操作)或一个棍形箭头(表示一个异步信号)。消息或方法 名字放置在带箭头的线上面。 如图 4 所示,第一个消息是一个同步消息,隐式返回。第二个消息表示异步,第三个消 息即是异步消息的返回的消息
火龙果●整理 uml.org.cn sd Messages Source Target return:=message(parameter) message(parameter) message(return) 图4.消息 生命线上的瘦矩形表示消息执行发生或一个控制焦点的激活,表明对象在某一时间点开 始执行活动。在图4中,有三个执行发生。 调用本身的消息可用于表示一个操作的递归调用,或者同一对象中一个方法对另一个方 法的调用,如图5所示, sd Reoursion Source selfmessage 图5.调用自身消息 2.3约束(Constraints) 当为对象的交互建模时,有时候,必须满足一个条件,消息才会传递给对象。约束在各 个不同的UML图中,用于控制流。UML1.x及UML2.0两者的约束有所区别:UML2.0 通过一个叫组合片断(Combined Fragments)的符号表示必要的逻辑;而在UMLl.x中, 一个约束只可能被分配到一个单一消息,为了在一个序列图上画一个约束,要把约束元件放 在约束的消息线上,消息名字之前。在UML中,约束的符号很简单,用一个“D”表示。 图6显示序列图的一个片段,消息addStudent方法上有一个约束。通过这个消息上的约束, 如果应收帐系统返回一个零点的逾期平衡,addStudent消息才会被传递。 上海交通大学软件学院饶若楠,“面向对象分析与设计”课程资料,请勿外传
上海交通大学软件学院 饶若楠, “面向对象分析与设计”课程资料 ,请勿外传 图 4. 消息 生命线上的瘦矩形表示消息执行发生或一个控制焦点的激活,表明对象在某一时间点开 始执行活动。在图 4 中,有三个执行发生。 调用本身的消息可用于表示一个操作的递归调用,或者同一对象中一个方法对另一个方 法的调用,如图 5 所示, 图 5. 调用自身消息 2.3 约束(Constraints) 当为对象的交互建模时,有时候,必须满足一个条件,消息才会传递给对象。约束在各 个不同的 UML 图中,用于控制流。UML 1.x 及 UML 2.0 两者的约束有所区别:UML 2.0 通过一个叫组合片断(Combined Fragments)的符号表示必要的逻辑;而在 UML 1.x 中, 一个约束只可能被分配到一个单一消息,为了在一个序列图上画一个约束,要把约束元件放 在约束的消息线上,消息名字之前。在 UML 中,约束的符号很简单,用一个“[]”表示。 图 6 显示序列图的一个片段,消息 addStudent 方法上有一个约束。通过这个消息上的约束, 如果应收帐系统返回一个零点的逾期平衡,addStudent 消息才会被传递
果 火龙果●整理 uml.org.cn register Registeroffice ar AccountsReceivable drama:Class getPastDueBalance studentld pastDueBalance [pastDueBalance=0]addStudent (studentld 图6.约束 2.4时间约束(Duration and Time Constraints) 在实时系统的建模或者有时间域限制的业务处理过程中,必须考虑活动的时间长度,这 时可以对消息设置时间约束。如图7所示,在消息的后面加入时间约束限制。 sd Time Source Targ世 call [>10ms) call {>10ms) reply5m. reply [>5ms} 图7.时间约束 2.5组合片断(Combined Fragments) 复合片段是一个抽象符号,用来表示许多普遍的交互单元。使用复合片段机制可以为顺 序图增加一定程度的处理逻辑,这些处理逻辑在复合片段下面。一个复合片段是一个或者多 个封装在一个框架中并且一定的命名环境中执行的时序。UML2.0规范指明了组合片断的 11种交互类型。如下: 上海交通大学软件学院饶若楠,“面向对象分析与设计”课程资料,请勿外传
上海交通大学软件学院 饶若楠, “面向对象分析与设计”课程资料 ,请勿外传 图 6. 约束 2.4 时间约束(Duration and Time Constraints) 在实时系统的建模或者有时间域限制的业务处理过程中,必须考虑活动的时间长度,这 时可以对消息设置时间约束。如图 7 所示,在消息的后面加入时间约束限制。 图 7. 时间约束 2.5 组合片断(Combined Fragments) 复合片段是一个抽象符号,用来表示许多普遍的交互单元。使用复合片段机制可以为顺 序图增加一定程度的处理逻辑,这些处理逻辑在复合片段下面。一个复合片段是一个或者多 个封装在一个框架中并且一定的命名环境中执行的时序。UML 2.0 规范指明了组合片断的 11 种交互类型。如下:
果 火龙果●整理 uml.org.cn ●变体(Alternative Fragment),记作“alt”,用于描述if.then...else的逻辑结构,指 明在两个或更多的消息序列之间的、互斥的选择,如图8所示, bank Barks account i checkingAccount balance Cam3atnt】 roturnchodk thochock 图8.变体 ●选项(Option Fragment),记作“opt”,用于描述switch结构,给予一个特定条件, 将会发生或者不发生,如图9所示, atr:Registeroffic线 盖t4 ccount Recevab 生am2C getPastDueBalance (studenid addstudent studentld getcostofclass ( c9gs0o chargeForclass ( 图9.选项 ●中断(Break Fragment),记作“break'”。当一个中断组合片断的消息运行时,封闭 的交互作用的其他消息将不会执行。跳转很像C+或Java的编程语言中的break 关键字。中断最常用来做模型异常处理,可以是变体或循环的一部分,发生中断后, 变体或循环被退出,如图10所示, 上海交通大学软件学院饶若楠,“面向对象分析与设计”课程资料,请勿外传
上海交通大学软件学院 饶若楠, “面向对象分析与设计”课程资料 ,请勿外传 变体(Alternative Fragment),记作“alt”,用于描述 if…then…else 的逻辑结构,指 明在两个或更多的消息序列之间的、互斥的选择,如图 8 所示, 图 8. 变体 选项(Option Fragment),记作“opt”,用于描述 switch 结构,给予一个特定条件, 将会发生或者不发生,如图 9 所示, 图 9. 选项 中断(Break Fragment),记作“break”。当一个中断组合片断的消息运行时,封闭 的交互作用的其他消息将不会执行。跳转很像 C++ 或 Java 的编程语言中的 break 关键字。中断最常用来做模型异常处理,可以是变体或循环的一部分,发生中断后, 变体或循环被退出,如图 10 所示
果 火龙果●整理 uml.org.cn sd Cash Check bank:Bank thecheck:check account:CheckingAccount getAmount ( amount getBalance ( break balance<amount] addinsuffientFundFee ( noteReturnedchedk thecheck returncheck(theChedk)】 addDebitTransaction (check Number,amount) storePhotoofched球(theCheck) cash 图10.中断 ●并行(Parallel Fragment),记作“par”,描述并行处理,框架内的每个操作元表示 一个在并行运行的线程,如图11所示, b也ngnPerson:Person ven Microwaveven par ””””” yummyFood 图1.并行 ●弱顺序(Weak Sequencing Fragment),记作“seq”,包括一组顺序,其所有消息必 须在下部分开始之前被处理,但对同一部分内不共享一条生命线的消息不强加任何 顺序。 ●强顺序(Strict Sequencing Fragment).,记作“strict'”,包含的所有消息都必须按给 定顺序处理。 上海交通大学软件学院饶若楠, “面向对象分析与设计”课程资料,请勿外传
上海交通大学软件学院 饶若楠, “面向对象分析与设计”课程资料 ,请勿外传 图 10. 中断 并行(Parallel Fragment),记作“par”,描述并行处理,框架内的每个操作元表示 一个在并行运行的线程,如图 11 所示, 图 11. 并行 弱顺序(Weak Sequencing Fragment),记作“seq”,包括一组顺序,其所有消息必 须在下部分开始之前被处理,但对同一部分内不共享一条生命线的消息不强加任何 顺序。 强顺序(Strict Sequencing Fragment),记作“strict”,包含的所有消息都必须按给 定顺序处理
火龙果●整理 uml.org.cn ●否定(Negative Fragment),记作“neg”,包含一系列无效的消息。 ●关键(Critical Fragment),记作“critical”,表示这部分消息是关键消息。 ●忽略(Ignore Fragment),记作“ignore”,表明在目前情况下出现的消息可以忽略。 ●考虑(Consider Fragment),记作“consider”,与忽略片断(Ignore Fragment)相反, 不被包括在内的消息可以忽略。 ●断言(Assertion Fragment),记作“assert”,表明任何与断言操作所示的顺序不同 的将被视为无效。 ●循环(Loop Fragment),记作“loop”,包含一组被重复执行的消息,可以在约束条 件里说明循环的次数,如图12所示, sd Fragment UserInterface Data Control DataSource request_array request_array_size send(aray-.size) loop n [array_size] request_item(n) send(array_item) send(aray) 图12.循环 2.6引用(Reference) 引用,记作“rf”,表示引用框类似于一个组合片断,当前的顺序图可以用它来引用另 外一个顺序图。在UML中,引用框左上角注明“rf”,中间注明引用的顺序图名称,如图 13所示, ref N 图13.引用 上海交通大学软件学院饶若楠, “面向对象分析与设计”课程资料,请勿外传
上海交通大学软件学院 饶若楠, “面向对象分析与设计”课程资料 ,请勿外传 否定(Negative Fragment),记作“neg”,包含一系列无效的消息。 关键(Critical Fragment),记作“critical”,表示这部分消息是关键消息。 忽略(Ignore Fragment),记作“ignore”,表明在目前情况下出现的消息可以忽略。 考虑(Consider Fragment),记作“consider”,与忽略片断(Ignore Fragment)相反, 不被包括在内的消息可以忽略。 断言(Assertion Fragment),记作“assert”,表明任何与断言操作所示的顺序不同 的将被视为无效。 循环(Loop Fragment),记作“loop”,包含一组被重复执行的消息,可以在约束条 件里说明循环的次数,如图 12 所示, 图 12. 循环 2.6 引用(Reference) 引用,记作“ref”,表示引用框类似于一个组合片断,当前的顺序图可以用它来引用另 外一个顺序图。在 UML 中,引用框左上角注明“ref”,中间注明引用的顺序图名称,如图 13 所示, 图 13. 引用
火龙果●整理 uml.org.cn 2.7门(Gate) 门可以视作是片断内外消息的连接点,为在顺序图和它的上下文之间的传递消息建模。 一个门只是一个消息,表示收到的消息的来源或发出消息的目标。在UML中,门表示为一 个小方框。如图14所示,注意图中的门的消息箭头指向rf,不需要在前头一端加方框。 sd Top Level Diagram Object1 Object2 Object3 Nested Diagram 图14.门 2.8状态常量(State Invariant) 状态常量是在生命线上的运行限制,可以用于指定变量值、扩展状态等。它可以用来具 体化一系列不同类型的约束:属性或者变量的值,内部或者外部状态等。状态常量是一个交 互片段,它定位在一条生命线上。在UML中,表示方法如图15所示, sd State Invariant :Lifeline p=10] 图15.状态常量 上海交通大学软件学院饶若楠,“面向对象分析与设计”课程资料,请勿外传
上海交通大学软件学院 饶若楠, “面向对象分析与设计”课程资料 ,请勿外传 2.7 门(Gate) 门可以视作是片断内外消息的连接点,为在顺序图和它的上下文之间的传递消息建模。 一个门只是一个消息,表示收到的消息的来源或发出消息的目标。在 UML 中,门表示为一 个小方框。如图 14 所示,注意图中的门的消息箭头指向 ref,不需要在前头一端加方框。 图 14. 门 2.8 状态常量(State Invariant) 状态常量是在生命线上的运行限制,可以用于指定变量值、扩展状态等。它可以用来具 体化一系列不同类型的约束:属性或者变量的值,内部或者外部状态等。状态常量是一个交 互片段,它定位在一条生命线上。在 UML 中,表示方法如图 15 所示, 图 15. 状态常量
火龙果●整理 uml.org.cn 3.应用举例 图16显示一个顾客在ATM机上取款的部分顺序图。它引用了顺序图“Balance Lookup'” 和“Debit Account'”。序列从左上角开始,客户传递一个消息给teller对象,teller对象传递 一个消息给theirBank对象。那时,调用Balance Lookup序列图,而accountNumber作为一 个参数传递。Balance Lookup序列图返回balance变量,然后检验选择项组合片断的约束条 件,确认余额大于金额变量。在余额比金额更大的情况下,调用Debit Account序列图,给 它传递参数accountNumber和amount。在那个序列完成后,withdrawCash消息为客户返回 cash。 ut:Qst如me teller:ATM therBank Bank withdrawCash accountNumber. amount getBalance accountNumber ref Balance Lookup(accountNumber): Real balance debit accountNumber,amount ref Debit Account (accountNumber, amount) cash 图16.顺序图示例 上海交通大学软件学院饶若楠,“面向对象分析与设计”课程资料,请勿外传
上海交通大学软件学院 饶若楠, “面向对象分析与设计”课程资料 ,请勿外传 3. 应用举例 图 16 显示一个顾客在 ATM 机上取款的部分顺序图。它引用了顺序图“Balance Lookup” 和“Debit Account”。序列从左上角开始,客户传递一个消息给 teller 对象,teller 对象传递 一个消息给 theirBank 对象。那时,调用 Balance Lookup 序列图,而 accountNumber 作为一 个参数传递。Balance Lookup 序列图返回 balance 变量,然后检验选择项组合片断的约束条 件,确认余额大于金额变量。在余额比金额更大的情况下,调用 Debit Account 序列图,给 它传递参数 accountNumber 和 amount。在那个序列完成后,withdrawCash 消息为客户返回 cash。 图 16. 顺序图示例