您好,欢迎访问三七文档
第6章顺序图和协作图6.1交互图概述6.2顺序图6.3帧化顺序图(补充知识)6.4顺序图的例子6.5顺序图的建模技术及应用6.6协作图6.1交互图概述•Interactiondiagram,是描述对象之间的关系和对象之间的信息传递的图;•通常用来描述一个用例的行为,实现一个用例,完成对系统的动态行为建模;•包含两种:–顺序图(或时序图,sequencediagram)–协作图(或合作图,通信图collaborationdiagram)•顺序图–面向时间描述对象交互的图•协作图–对象间消息的结构化视图6.2顺序图•按照时间顺序显式对象之间交互的图–顺序图用来表示用例中的行为顺序。当执行一个用例行为时,顺序图中的每条消息对应了一个类操作或状态机中引起转换的事件。–顺序图展示对象之间的交互,这些交互是指在场景或用例的事件流中发生的。顺序图属于动态建模。–顺序图的重点在消息序列上,也就是说,描述消息是如何在对象间发送和接收的,表示了对象之间传送消息的时间顺序。–浏览顺序图的方法是:从上到下查看对象间交换的消息。6.2.1顺序图的组成•参与者(actor)或者对象(object)•生命线(lifeline)•----坐标轴纵向的虚线表示对象在序列中的执行情况(即发送和接收的消息,对象的活动)这条虚线称为对象的“生命线”。•激活期/控制焦点•消息(message)•消息用从一个对象的生命线到另一个对象生命线的箭头表示6.2.2参与者或对象•参与者和对象按照从左到右的顺序排列•一般最多两个参与者,他们分列两端。启动这个用例的活动者往往排在最左边;接收消息的活动者则排在最右端;•对象从左到右按照重要性排列或按照消息先后顺序排列。6.2.2参与者或对象•对象的命名方式有三种:–包括对象名和类名–类名(匿名对象)–对象名(不关心类)6.2.3生命线•生命线(Lifeline):–每个对象都有自己的生命线,用来表示在该用例中一个对象在一段时间内的存在–垂直的虚线–如果对象生命期结束,则用注销符号表示–对象默认的位置在图顶部,表示对象在交互之前已经存在–如果是在交互过程中由另外的对象所创建,则位于图的中间某处。6.2.4激活期•激活期/控制焦点–对象在一段时间内获得了焦点,也称激活期–对象执行某个动作的时期–空心矩形条–激活期的长短意味着对象执行某个动作的时间有多长,可以通过约束{10ms}来限制执行时间的长短。6.2.5顺序图的基本内容•另外在消息的创建过程中还存在一些其他的内容,比如说创建对象、撤销对象、自关联消息等。•①创建(create)对象•一个对象可以通过发送消息来创建另一个对象,即创建对象,如图6.10所示。对象在创建消息发生后才能存在,对象的生命线也是在创建消息后才存在。6.2.5顺序图的基本内容•②撤销(destroy)对象•当一个对象被删除或自我删除时,该对象用“×”标记,即撤销对象,如图6.11所示。6.2.6消息•面向对象方法中,消息是对象间交互信息的主要方式。•结构化程序设计中,模块间传递信息的方式主要是过程(或函数)调用。•对象A向对象B发送消息,可以简单地理解为对象A调用对象B的一个操作,就是调用箭头指向的对象所在类的一个操作。订单类发消息给客户类调用客户类中的“验证客户”操作6.2.6消息•顺序图中,尽力保持消息的顺序是从左到右排列的。•一个顺序图的消息流开始于左上方,消息2的位置比消息1低,这意味着消息2的顺序比消息1要迟。因为西方的阅读习惯是从左到右。•顺序图中消息编号可显示,也可不显示。协作图中必须显示。6.2.6消息•UML三种消息:–调用(ProcedureCall)–异步(Asynchronous)–返回(Return)•Rose扩充:–阻止(Balking)–超时(Time-out)6.2.6消息•UML三种消息:–调用(ProcedureCall)•发送者把消息发送后,等待直到接收者返回控制,可以表示同步;•实心箭头符号classclassC{publicvoidaction2(){}publicvoidaction3(){}}publicclassclassB{privateclassCC=newclassC();publicvoidaction1(){C.action2();C.action3();}}6.2.6消息–异步(Asynchronous)•消息发送后,发送者继续操作,不等待,常用于并发;6.2.6消息–返回(Return)•表示消息的返回。消息上方放置返回值•同步消息的返回可以画出(如果想明确表达返回值),也可以不画出,直接隐含。•异步消息可以有返回,也可以没有。(可以响应异步消息,也可以不响应该异步消息。)•如果顺序图上显示有编号,则返回消息的编号和当初发送消息的编号完全一样。•虚线箭头表示,和依赖关系不要混淆6.2.6消息示例6.2.6消息•自调用(又叫递归,SelfCall)–某对象自己调用自己的操作–UML标记(嵌套的矩形条)Rose标记•当一个操作调用它自身时,所产生的消息总是同步的,因此在顺序图中总是将递归的消息绘制成同步消息。嵌套消息非嵌套消息注意以下区别12嵌套消息的画法•Rose还对消息类型做了扩充,增加了阻止消息(Balking)和超时消息(Timeout)。•阻止消息是指消息发送者发送消息给接收者,如果接收者无法立即接收消息,则发送者放弃这个消息。•Rose中用折回的箭头表示阻止消息。6.2.6消息•超时消息指消息发送者发出消息给接收者并按指定时间等待。如果接收者无法在指定时间内接受消息,则发送者放弃这个消息。问题:阻止消息和超时消息属于同步消息还是异步消息?6.2.6消息•格式–[前缀][守卫条件][顺序表达式][返回值:=]消息名([参数列表])•例:–2:display()简单消息–1.3.1:p:=find()带返回值的嵌套消息–[x0]4:invert(x,color)条件消息–3.1*[x=1..10]:update()循环消息–a3,b4/c2:copy(a,b)线程同步–1.1a,1.1b/1.2:continue()带前缀消息在发送线程c的第2个消息之前,必须先发送线程a的第3个消息和线程b的第4个消息在发送消息1.2之前必须已经同时发送并发消息1.1给线程a和b6.2.5消息之前缀(predecessor)–语法:消息序列号,消息序列号,.../–前缀是一个用来同步线程或路径的表达式–意思是在发送当前消息之前指定序列号的消息被处理(必须连续执行)–消息序列号之间用逗号隔开,用斜杠结束–例如1.1a,1.1b/1.2:continue(),在发送消息1.2之前必须已经同时发送并发消息1.1给线程a和b6.2.5消息之守卫条件(guard-condition)–语法:[条件短语]–条件短语通常用伪代码或真正的程序语言来表示,UML并不规定其语法•例如,若b=1调用类Object2的message1方法;若b=2则调用类Object3的message2方法,如图6.13所示。Object1Object2Object31[b=1]:message1()2[b=2]:message2()序列表达式(sequence-expression)–语法[integer|name][recurrence]:–integer为指定消息顺序的序列号,消息1是消息序列的开始消息,1.1是消息1的处理过程中的第一条嵌套的消息,消息1.2是消息1的处理过程中的第二条嵌套的消息,一个消息序列的例子如1,1.1,1.2,1.2.1,1.2.2,1.3,等。这样的序列号不仅能够表示消息的顺序而且还能表示消息的嵌套关系(当消息是异步消息时,消息为嵌套的操作调用及返回)–name表示并发控制线程,例如1.2a和1.2b为同时发送的并发消息–recurrence表示一个条件或迭代的执行有两种选择•*[循环子句]循环子句(iteration-clause)用来指定一个循环(重复执行)例如:一个包括循环的消息1.1*[x=1..10]:doSomething()•[条件子句]条件子句一般用来表示分枝而不是用作守卫条件[x0]是两个可以用来分枝的条件子句这两个条件只能有一个为真因而只有一个分枝被执行(即发送与分枝有关的消息)–条件子句和循环子句都可以用伪代码或真正的编程语言来表示–序列表达式用冒号结束6.2.6消息•返回值、消息名和参数表•返回值表示一个操作调用(即一个消息)的结果6.3补充知识帧化顺序图:UML2.0中的顺序图•UML2.0针对顺序图添加了一个有用的改动。•帧化一个顺序图:用一个边框包围它,并在其左上角添加一个间隔区。这个间隔区包含了识别该顺序图的信息。•间隔区中,有操作符(描述帧中的图的类型的表达式)和图所描绘的交互的名字。•最外层是框架元件或叫间隔区:•对于顺序图,操作符是sd(sequencediagram),BuySoda是图的名字•帧化的概念很有用,有多种应用方法,不同的应用帧化类型(间隔区操作符)对应不同。交互片段(interactionfragment)•交互片段是UML2.0中对一个顺序图的某一段的称呼。•画法和帧化整个顺序图是相似的。只是在间隔区中,不同类型的交互片段,其片段类型(操作符)也不同。ConditionloopuserInterfacedataControldataSource1:requestArray()2:requestArryLength()3:returnArrayLength4:requestArrayItem()5:returnArrayItem6:sendArray交互片段类型作用ref分解大型的顺序图,类似于用例关系中的include(程序设计语言中的文件包含)loop循环执行该片段内的交互,直到判断条件为假。类似于程序设计语言中的循环语句。opt包含在此片段中的交互只有在判断条件为真时才执行。alt根据判断条件,选择片段中的一个交互执行。类似与程序设计语言中的if..else语句par片段中的各个交互并行执行。break当包含在break片段中的交互发生时,则退出任何一个交互。类似于程序设计语言中的break语句。。。ref交互片段---(reference)•为一个用例的多个场景创建实例顺序图,图和图之间的相当一部分内容是重复的。•ref交互片段能够在一张顺序图中快速容易地复用另一张顺序图的部分内容。•使用方法:使用ref交互片段并写明引用的交互图的名称。•ref交互片段也叫做交互事件(interactionoccurrence)。•理想场景的帧化DeliverSoda交互名特殊场景中复用交互事件loop交互片段---(循环)此交互片段被循环执行多次loop[布尔表达式]Loop(minint,maxint)opt交互片段---(可选)•包含在此片段中的交互只有在判断条件为真时才执行。交互片段的组合•可以用多种方式来组合交互片段。操作符表示了不用的组合方类型。•为了表示这种组合,将整个片段帧化,再用一条虚线表示邻接交互片段的边界。•被广泛使用的组合类型有两种,这两种类型的操作分别被标注为alt和par操作符。•在alt组合中,每个片段都是一种可选情况,只能在一定的条件下执行。保护条件指明了哪个片段将会执行。根据判断条件,选择片段中的一个交互执行。类似于程序设计语言中的if…else…语句。•在par组合中,组合片段并列工作而不会互相交互。用于各个片段并行执行。顺序图例子6.4.顺序图顺序图例子-58-4.3顺序图与用例图和类图的关系图6.12顺序图与用例图和类图之间关系图-59-顺序图---复杂的例子信息亭售票中心信用卡服务从这个例子中可以看出:Kjosk类中的操作有ShowAvailable(seat-list)DemandPayment(cost)printtickets(performance,seats)ejectcardBoxOffice中的操作有Request(count,performan
本文标题:顺序图和协作图
链接地址:https://www.777doc.com/doc-2301723 .html