顺序图和协作图_第1页
顺序图和协作图_第2页
顺序图和协作图_第3页
顺序图和协作图_第4页
顺序图和协作图_第5页
已阅读5页,还剩105页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第第6 6章章 顺序图和协作图顺序图和协作图 6.1 交互图概述交互图概述6.2 顺序图顺序图6.3 帧化顺序图(补充知识)帧化顺序图(补充知识)6.4 顺序图的例子顺序图的例子6.5 顺序图的建模技术及应用顺序图的建模技术及应用 6.6 协作图协作图6.1 交互图概述交互图概述 Interaction diagram,是描述对象之间的关系,是描述对象之间的关系和对象之间的信息传递的图;和对象之间的信息传递的图; 通常用来描述一个用例的行为,实现一个用例,通常用来描述一个用例的行为,实现一个用例,完成对系统的动态行为建模;完成对系统的动态行为建模; 包含两种:包含两种: 顺序图(或时序图,顺序

2、图(或时序图,sequence diagram) 协作图(或合作图,通信图协作图(或合作图,通信图collaboration diagram) 顺序图顺序图 面向时间描述对象交互的图面向时间描述对象交互的图 协作图协作图 对象间消息的结构化视图对象间消息的结构化视图6.2 顺序图顺序图 按照时间顺序显式对象之间交互的图按照时间顺序显式对象之间交互的图 顺序图用来表示用例中的行为顺序。当执行一个用例行顺序图用来表示用例中的行为顺序。当执行一个用例行为时,顺序图中的每条消息对应了一个类操作或状态机为时,顺序图中的每条消息对应了一个类操作或状态机中引起转换的事件。中引起转换的事件。 顺序图展示对象之

3、间的交互,这些交互是指在场景或用顺序图展示对象之间的交互,这些交互是指在场景或用例的事件流中发生的。例的事件流中发生的。 顺序图属于动态建模。顺序图属于动态建模。 顺序图的重点在消息序列上,也就是说,描述消息是如顺序图的重点在消息序列上,也就是说,描述消息是如何在对象间发送和接收的,表示了对象之间传送消息的何在对象间发送和接收的,表示了对象之间传送消息的时间顺序。时间顺序。 浏览顺序图的方法是:从上到下查看对象间交换的消息。浏览顺序图的方法是:从上到下查看对象间交换的消息。6.2.1 顺序图的组成顺序图的组成 参与者(参与者(actor)或者)或者 对象(对象(object) 生命线(生命线(

4、lifeline) -坐标轴纵向的虚线表示对象在序列中的执坐标轴纵向的虚线表示对象在序列中的执行情况行情况(即发送和接收的消息,对象的活动即发送和接收的消息,对象的活动)这条虚线称为对象的这条虚线称为对象的“生命线生命线”。 激活期激活期/ 控制焦点控制焦点 消息(消息(message) 消息用从一个对象的生命线到另一个对象生消息用从一个对象的生命线到另一个对象生命线的箭头表示命线的箭头表示6.2.2 参与者或对象参与者或对象 参与者和对象按照从左到右的顺序排列参与者和对象按照从左到右的顺序排列 一般最多两个参与者,他们分列两端。启动这个用例的活一般最多两个参与者,他们分列两端。启动这个用例的

5、活动者往往排在最左边;接收消息的活动者则排在最右端;动者往往排在最左边;接收消息的活动者则排在最右端; 对象从左到右按照重要性排列或按照消息先后顺序排列。对象从左到右按照重要性排列或按照消息先后顺序排列。6.2.2 参与者或对象 对象的命名方式有三种:对象的命名方式有三种: 包括对象名和类名包括对象名和类名 类名(匿名对象)类名(匿名对象) 对象名(不关心类)对象名(不关心类)6.2.3 生命线生命线 生命线(生命线(Lifeline):): 每个对象都有自己的生命线,用来表示在该用例中一个对每个对象都有自己的生命线,用来表示在该用例中一个对象在一段时间内的存在象在一段时间内的存在 垂直的虚线

6、垂直的虚线 如果对象生命期结束,则用注销符号表示如果对象生命期结束,则用注销符号表示 对象默认的位置在图顶部,表示对象在交互之前已经存在对象默认的位置在图顶部,表示对象在交互之前已经存在 如果是在交互过程中由另外的对象所创建,则位于图的中如果是在交互过程中由另外的对象所创建,则位于图的中间某处。间某处。6.2.4 激活期 激活期激活期/控制焦点控制焦点 对象在一段时间内获得了焦点,也称激活期对象在一段时间内获得了焦点,也称激活期 对象执行某个动作的时期对象执行某个动作的时期 空心矩形条空心矩形条 激活期的长短意味着对象执行某个动作的时间有多长,激活期的长短意味着对象执行某个动作的时间有多长,可

7、以通过约束可以通过约束10ms来限制执行时间的长短。来限制执行时间的长短。6.2.5 顺序图的基本内容顺序图的基本内容 另外在消息的创建过程中还存在一些其他的内容,比如说另外在消息的创建过程中还存在一些其他的内容,比如说创建对象、撤销对象、自关联消息等。创建对象、撤销对象、自关联消息等。 创建(创建(create)对象)对象 一个对象可以通过发送消息来创建另一个对象,即创建对一个对象可以通过发送消息来创建另一个对象,即创建对象,如图象,如图6.10所示。对象在创建消息发生后才能存在,对所示。对象在创建消息发生后才能存在,对象的生命线也是在创建消息后才存在。象的生命线也是在创建消息后才存在。6.

8、2.5 顺序图的基本内容 撤销(撤销(destroy)对象)对象 当一个对象被删除或自我删除时,该对象用当一个对象被删除或自我删除时,该对象用“”标记,即撤销对象,如图标记,即撤销对象,如图6.11所示。所示。 6.2.6 消息 面向对象方法中,消息是对象间交互信息的主要方面向对象方法中,消息是对象间交互信息的主要方式。式。 结构化程序设计中,模块间传递信息的方式主要是结构化程序设计中,模块间传递信息的方式主要是过程(或函数)调用。过程(或函数)调用。 对象对象A向对象向对象B发送消息,可以简单地理解为对象发送消息,可以简单地理解为对象A调用对象调用对象B的一个操作,的一个操作,就是调用箭头指

9、向的对象所就是调用箭头指向的对象所在类的在类的 一个一个操作操作。订单类发消息给客户类调用客订单类发消息给客户类调用客户类中的户类中的“验证客户验证客户”操作操作6.2.6 消息 顺序图中,尽力保持消息的顺序是从左到右排列顺序图中,尽力保持消息的顺序是从左到右排列的。的。 一个顺序图的消息流开始于左上方,消息一个顺序图的消息流开始于左上方,消息2的位的位置比消息置比消息1低,这意味着消息低,这意味着消息2的顺序比消息的顺序比消息1要要迟。因为西方的阅读习惯是从左到右。迟。因为西方的阅读习惯是从左到右。 顺序图中消息编号可显示,也可不显示。协作图顺序图中消息编号可显示,也可不显示。协作图中必须显

10、示。中必须显示。6.2.6 消息 UML三种消息:三种消息: 调用(调用(Procedure Call) 异步(异步(Asynchronous) 返回(返回(Return) Rose扩充:扩充: 阻止(阻止(Balking) 超时(超时(Time-out)6.2.6 消息 UML三种消息:三种消息: 调用(调用(Procedure Call) 发送者把消息发送后,等待直到接收者返回控制,发送者把消息发送后,等待直到接收者返回控制,可以表示同步;可以表示同步; 实心箭头符号实心箭头符号class classC public void action2() public void action3()

11、 public class classB private classC C=new classC(); public void action1() C.action2(); C.action3(); 6.2.6 消息 异步(异步(Asynchronous) 消息发送后,发送者继续操作,不等待,常用于并消息发送后,发送者继续操作,不等待,常用于并发;发;6.2.6 消息消息 返回(返回(Return) 表示消息的返回。消息上方放置返回值表示消息的返回。消息上方放置返回值 同步消息的返回可以画出(如果想明确表达返回值),也同步消息的返回可以画出(如果想明确表达返回值),也可以不画出,直接隐含。可以

12、不画出,直接隐含。 异步消息可以有返回,也可以没有。(可以响应异步消息,异步消息可以有返回,也可以没有。(可以响应异步消息,也可以不响应该异步消息。)也可以不响应该异步消息。) 如果顺序图上显示有编号,则返回消息的编号和当初发送如果顺序图上显示有编号,则返回消息的编号和当初发送消息的编号完全一样。消息的编号完全一样。 虚线箭头表示,和依赖关系不要混淆虚线箭头表示,和依赖关系不要混淆6.2.6 消息示例6.2.6 消息 自调用(又叫递归,自调用(又叫递归,Self Call) 某对象自己调用自己的操作某对象自己调用自己的操作 UML标记标记 (嵌套的矩形条)(嵌套的矩形条) Rose标记标记 当

13、一个操作调用它自身时,所产生的消息当一个操作调用它自身时,所产生的消息总是同步的,因此在顺序图中总是将递归总是同步的,因此在顺序图中总是将递归的消息绘制成同步消息。的消息绘制成同步消息。嵌套消息嵌套消息非嵌套消息非嵌套消息注意以下区别注意以下区别12嵌套消息的画法嵌套消息的画法 Rose 还对消息类型做了扩充,增加了还对消息类型做了扩充,增加了阻止消阻止消息(息(Balking)和和超时消息(超时消息(Timeout)。 阻止消息阻止消息是指消息发送者发送消息给接收者,是指消息发送者发送消息给接收者,如果接收者无法立即接收消息,则发送者放弃如果接收者无法立即接收消息,则发送者放弃这个消息。这个

14、消息。 Rose中用折回的箭头表示阻止消息。中用折回的箭头表示阻止消息。6.2.6 消息 超时消息超时消息指消息发送者发出消息给接收者并指消息发送者发出消息给接收者并按指定时间等待。如果接收者无法在指定时按指定时间等待。如果接收者无法在指定时间内接受消息,则发送者放弃这个消息。间内接受消息,则发送者放弃这个消息。问题问题:阻止消息和超时消息属于同步消息还是异步消息?阻止消息和超时消息属于同步消息还是异步消息?6.2.6 消息消息 格式格式 前缀前缀守卫条件守卫条件顺序表达式顺序表达式返回值返回值:=消息名消息名(参数列表参数列表) 例:例: 2: display () 简单消息简单消息 1.3

15、.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) 语法:消息序列号语法:消息序列号,消息序列号消息序列号, . / 前缀是一个

16、用来同步线程或路径的表达式前缀是一个用来同步线程或路径的表达式 意思是在发送当前消息之前指定序列号的消息被意思是在发送当前消息之前指定序列号的消息被处理处理(必须连续执行必须连续执行) 消息序列号之间用逗号隔开,用斜杠结束消息序列号之间用逗号隔开,用斜杠结束 例如例如 1.1a, 1.1b/1.2: continue() ,在发送消息,在发送消息1.2之前必须已经同时发送并发消息之前必须已经同时发送并发消息1.1给线程给线程a和和b6.2.5 消息之守卫条件守卫条件(guard-condition) 语法语法: 条件短语条件短语 条件短语通常用伪代码或真正的程序语言来表示,条件短语通常用伪代码

17、或真正的程序语言来表示,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 | name recurrence :integerinteger为指定消息顺序的序列号,消息为指定

18、消息顺序的序列号,消息1 1是消息序列的是消息序列的开始消息,开始消息,1.11.1是消息是消息1 1的处理过程中的第一条嵌套的消的处理过程中的第一条嵌套的消息,消息息,消息1.21.2是消息是消息1 1的处理过程中的第二条嵌套的消息,的处理过程中的第二条嵌套的消息,一个消息序列的例子如一个消息序列的例子如1, 1.1, 1.2, 1.2.1, 1.2.2, 1, 1.1, 1.2, 1.2.1, 1.2.2, 1.3, 1.3, 等。这样的序列号不仅能够表示消息的顺序而且还等。这样的序列号不仅能够表示消息的顺序而且还能表示消息的嵌套关系能表示消息的嵌套关系( (当消息是异步消息时,消息为嵌当

19、消息是异步消息时,消息为嵌套的操作调用及返回套的操作调用及返回) )namename表示并发控制线程,例如表示并发控制线程,例如1.2a1.2a和和1.2b1.2b为同时发送的为同时发送的并发消息并发消息 recurrence表示一个条件或迭代的执行有两种选择表示一个条件或迭代的执行有两种选择 * 循环子句循环子句 循环子句循环子句(iteration-clause)用来指定一个循环用来指定一个循环(重复执重复执行行)例如:一个包括循环的消息例如:一个包括循环的消息 1.1 *x = 1.10 : doSomething() 条件子句条件子句 条件子句一般用来表示分枝而不是用作守卫条件条件子句

20、一般用来表示分枝而不是用作守卫条件x0是两个可以用来分枝的条件子句这两个条件只能有是两个可以用来分枝的条件子句这两个条件只能有一个为真因而只有一个分枝被执行一个为真因而只有一个分枝被执行(即发送与分枝有即发送与分枝有关的消息关的消息) 条件子句和循环子句都可以用伪代码或真正的编程语言条件子句和循环子句都可以用伪代码或真正的编程语言来表示来表示 序列表达式用冒号结束序列表达式用冒号结束6.2.6 消息 返回值、消息名和参数表返回值、消息名和参数表 返回值表示一个操作调用返回值表示一个操作调用(即一个消息即一个消息)的结果的结果6.3 补充知识补充知识帧化顺序图:帧化顺序图:UML2.0中的顺序图

21、中的顺序图 UML2.0针对顺序图添加了一个有用的改动。针对顺序图添加了一个有用的改动。 帧化一个顺序图:用一个边框包围它,并在其左帧化一个顺序图:用一个边框包围它,并在其左上角添加一个间隔区。这个间隔区包含了识别该上角添加一个间隔区。这个间隔区包含了识别该顺序图的信息。顺序图的信息。 间隔区中,有操作符(描述帧中的图的类型的表间隔区中,有操作符(描述帧中的图的类型的表达式)和图所描绘的交互的名字。达式)和图所描绘的交互的名字。最外层是框架元件或叫间隔区:最外层是框架元件或叫间隔区:对于顺序图,操作符是对于顺序图,操作符是 sd (sequence diagram),), BuySoda是图的

22、名字是图的名字 帧化的概念很有用,有多种应用方法,不同的应帧化的概念很有用,有多种应用方法,不同的应用帧化类型(间隔区操作符)对应不同。用帧化类型(间隔区操作符)对应不同。交互片段(交互片段(interaction fragment) 交互片段是交互片段是UML2.0中对一个顺序图的某一段的称呼。中对一个顺序图的某一段的称呼。 画法和帧化整个顺序图是相似的。只是在画法和帧化整个顺序图是相似的。只是在间隔区中,间隔区中,不同类不同类型的交互片段,其片段类型(操作符)也不同。型的交互片段,其片段类型(操作符)也不同。 ConditionloopuserInterfacedataControldat

23、aSource1 : requestArray()2 : requestArryLength()3 : returnArrayLength4 : requestArrayItem()5 : returnArrayItem6 : sendArray交互片段类型交互片段类型作用作用ref分解大型的顺序图,类似于用例关系中的分解大型的顺序图,类似于用例关系中的include(程序设计语言中的文件包含)(程序设计语言中的文件包含)loop循环执行该片段内的交互,直到判断条件为假。循环执行该片段内的交互,直到判断条件为假。类似于程序设计语言中的循环语句。类似于程序设计语言中的循环语句。opt包含在此片段

24、中的交互只有在判断条件为真时才包含在此片段中的交互只有在判断条件为真时才执行。执行。alt根据判断条件,选择片段中的一个交互执行。类根据判断条件,选择片段中的一个交互执行。类似与程序设计语言中的似与程序设计语言中的if.else语句语句par片段中的各个交互并行执行。片段中的各个交互并行执行。break当包含在当包含在break片段中的交互发生时,则退出任片段中的交互发生时,则退出任何一个交互。类似于程序设计语言中的何一个交互。类似于程序设计语言中的break语语句句。ref 交互片段交互片段-(reference) 为一个用例的多个场景创建实例顺序图,图和图之间为一个用例的多个场景创建实例顺

25、序图,图和图之间的相当一部分内容是重复的。的相当一部分内容是重复的。 ref交互片段能够在一张顺序图中快速容易地复用另交互片段能够在一张顺序图中快速容易地复用另一张顺序图的部分内容。一张顺序图的部分内容。 使用方法:使用使用方法:使用ref交互片段并写明引用的交互图的交互片段并写明引用的交互图的名称。名称。 ref交互片段也叫做交互事件(交互片段也叫做交互事件(interaction occurrence)。)。 理想场景的帧化理想场景的帧化DeliverSoda交互名交互名特殊场景中复用交互事件特殊场景中复用交互事件loop交互片段交互片段-(循环)(循环)此交互片段被循环执行多次此交互片段

26、被循环执行多次loop布尔表达式Loop(minint,maxint)opt交互片段交互片段-(可选)(可选) 包含在此片段中的交互只有在判断条件为真时才执行。包含在此片段中的交互只有在判断条件为真时才执行。交互片段的组合交互片段的组合 可以用多种方式来组合交互片段。操作符可以用多种方式来组合交互片段。操作符表示了不用的组合方类型。表示了不用的组合方类型。 为了表示这种组合,将整个片段帧化,再为了表示这种组合,将整个片段帧化,再用一条虚线表示邻接交互片段的边界。用一条虚线表示邻接交互片段的边界。 被广泛使用的组合类型有两种,这两种类被广泛使用的组合类型有两种,这两种类型的操作分别被标注为型的操

27、作分别被标注为alt和和par操作符操作符。 在在alt组合组合中,每个片段都是一种可选情况中,每个片段都是一种可选情况,只能在一定的条件下执行。保护条件指,只能在一定的条件下执行。保护条件指明了哪个片段将会执行。明了哪个片段将会执行。 根据判断条件,选择片段中的一个交互执根据判断条件,选择片段中的一个交互执行。类似于程序设计语言中的行。类似于程序设计语言中的ifelse语语句。句。 在在par组合组合中,组合片段并列工作而不会互中,组合片段并列工作而不会互相交互。用于各个片段并行执行。相交互。用于各个片段并行执行。顺序图例子顺序图例子顺序图例子顺序图例子- 58 -顺序图与用例图和类图的关系

28、顺序图与用例图和类图的关系图6.12 顺序图与用例图和类图之间关系图 - 59 -顺序图顺序图-复杂的例子复杂的例子信息亭售票中心信用卡服务从这个例子中可以看出:从这个例子中可以看出:Kjosk类中的操作有类中的操作有 Show Available (seat-list) Demand Payment (cost) print tickets (performance, seats) eject cardBox Office中的操作有中的操作有 Request (count, performance) Select Seats Insert Card (Card Number) authori

29、zedCredit Card Service类中的操作有类中的操作有 charge(card number, cost)- 60 -信息亭售票中心信用卡服务 此图是描述购票这个用例的顺序图。顾客在信息亭与售票中心通话触发了这个用例的执行。此图是描述购票这个用例的顺序图。顾客在信息亭与售票中心通话触发了这个用例的执行。顺序图中付款这个用例包括售票中心与信息亭和信用卡服务处使用消息进行通信过程。顺序图中付款这个用例包括售票中心与信息亭和信用卡服务处使用消息进行通信过程。此图中存在的事物有: 对象对象(信息亭信息亭 Kjosk ,售票中心,售票中心 Box Office, 信用卡服务信用卡服务 Cr

30、edit Card Service ),生命线,生命线,消息符号。消息符号。信息亭发信息亭发Request (count, performance)消息给售票中心,表示调用售票中心类的消息给售票中心,表示调用售票中心类的Request (count, performance)操作,来查询演出的信息。操作,来查询演出的信息。售票中心发售票中心发Show Available(seat-list)消息给信息亭,表示调用信息亭类中的消息给信息亭,表示调用信息亭类中的Show Available(seat-list)操作,给出可用的座位表。操作,给出可用的座位表。- 61 -1 指出左图中的参与者?指出

31、左图中的参与者?A B C D2 哪些是对象?哪些是对象?A B C D3 Server类调用了类调用了CreditService类中的什么操作?类中的什么操作?A B C D4.5 练习题练习题1. A 2. B 3. B 6.4.1 案例:存款分析级别的顺序图,粗略,双斜杠忽略消息同步异步类别也无妨Add title 新增书目和图书操作6.4.2 练习用户打印文件,计算机向打印服务器发送打印命令,打印机如果空闲,用户打印文件,计算机向打印服务器发送打印命令,打印机如果空闲,则直接打印,否则把打印文件存储在打印队列中。则直接打印,否则把打印文件存储在打印队列中。6.4.2 练习 管理员通过课

32、程管理器打印课程管理员通过课程管理器打印课程UML的信息的信息 顺序图制作提示:顺序图制作提示: 只关注核心对象只关注核心对象 顺序图用于描述顺序图用于描述某个某个用例的用例的部分部分交互细节交互细节 管理员通过课程管理器打印所有课程信息管理员通过课程管理器打印所有课程信息6.5 顺序图的建模技术及应用顺序图的建模技术及应用 使用顺序图对系统建模时,可以遵循如下策略:使用顺序图对系统建模时,可以遵循如下策略:(1)设置交互语境,这些语境可以是系统、子系统、操作、类、用)设置交互语境,这些语境可以是系统、子系统、操作、类、用例和协作的一个脚本;例和协作的一个脚本;(2)通过识别对象在交互中扮演的

33、角色,根据对象的重要性,将其)通过识别对象在交互中扮演的角色,根据对象的重要性,将其从左向右的方向放置在顺序图中。从左向右的方向放置在顺序图中。(3)设置每个对象的生命线。一般情况下对象存在于交互的整个过)设置每个对象的生命线。一般情况下对象存在于交互的整个过程,但它可以在交互过程中创建和撤销;程,但它可以在交互过程中创建和撤销;(4)从引发某个交互的信息开始,在生命线之间从上向下的顺序画)从引发某个交互的信息开始,在生命线之间从上向下的顺序画出随后的信息;出随后的信息;(5)设置对象的激活期,这可以可视化实际计算发生时的时间点、)设置对象的激活期,这可以可视化实际计算发生时的时间点、可视化消

34、息嵌套等;可视化消息嵌套等;(6)如果需要设置时间或空间约束,可以为每个消息附上合适的约)如果需要设置时间或空间约束,可以为每个消息附上合适的约束;束;(7)给控制流的每个消息附上前置或后置条件,这可以更详细的说)给控制流的每个消息附上前置或后置条件,这可以更详细的说明这个控制流。明这个控制流。 6.5 顺序图的建模技术及应用 根据以上策略,画顺序图的一般步骤是:根据以上策略,画顺序图的一般步骤是: (1)确定交互的范围)确定交互的范围 (2)确定参与交互过程的活动者与对象)确定参与交互过程的活动者与对象 (3)确定活动者、对象的生存周期)确定活动者、对象的生存周期 (4)确定交互中产生的消息

35、)确定交互中产生的消息 (5)细化消息的内容)细化消息的内容 6.5 顺序图的建模技术及应用 【例例6.1】大家比较熟悉那种能够遥控锁车、开锁、大家比较熟悉那种能够遥控锁车、开锁、打开后备箱的钥匙。当按下打开后备箱的钥匙。当按下“锁车锁车”按钮的时候,按钮的时候,汽车会自动上锁,闪动一下车灯并发出一声蜂鸣,汽车会自动上锁,闪动一下车灯并发出一声蜂鸣,说明车门上锁了。这里涉及到三个类:说明车门上锁了。这里涉及到三个类:CarOwner(车主)、(车主)、CarKey(车钥匙)和(车钥匙)和Car(车)。现在我们就用这个实例介绍顺序图的设(车)。现在我们就用这个实例介绍顺序图的设计。计。 6.5

36、顺序图的建模技术及应用 应用场景应用场景 该建模场景的描述如下:该建模场景的描述如下: 从从CarOwner到到CarKey的请求,要求的请求,要求CarKey实现实现getButtonPress(b)操作,登记下操作,登记下CarOwner按下的按钮(通常用按下的按钮(通常用b引用)。引用)。 CarKey发送消息给发送消息给Car,通知,通知Car实现其实现其pressKeyMessage(b)操作,如果按下的按钮操作,如果按下的按钮b是是“lock”,Car就会向自己发送执行就会向自己发送执行lock()操作的操作的请求。然后,请求。然后,Car发送两个信号发送两个信号BlinkLigh

37、ts和和Beep给给CarOwner。 6.5 顺序图的建模技术及应用 实现实现 首先,绘出个匿名对象,它们分别是首先,绘出个匿名对象,它们分别是CarOwner、CarKey和和Car的实例。把它们放的实例。把它们放在顺序图的最顶层,然后从每个对象绘出一条在顺序图的最顶层,然后从每个对象绘出一条生命线,如图生命线,如图6.17所示。所示。 : CarOwner:CarKey:Car6.5 顺序图的建模技术及应用 根据场景描述,绘制顺序图如图根据场景描述,绘制顺序图如图6.18所示。所示。 : CarOwner:CarKey:Car1 : getButtonPress(b)2 : pressK

38、eyMessage(b)3 b=lock : lock()4 b=lock : BlinkLights5 b=lock : Beep图6.18 汽车和车钥匙顺序图 6.5 顺序图的建模技术及应用【例例6.3】在前面几章以图书管理系统为例进行了分在前面几章以图书管理系统为例进行了分析,并且已经对其静态图进行了建模。析,并且已经对其静态图进行了建模。由于图书管理员、系统管理员以及借阅者三个参与由于图书管理员、系统管理员以及借阅者三个参与者的参与,以及对图书的操作内容较多,图书管者的参与,以及对图书的操作内容较多,图书管理系统中的顺序图相对较多,比如有图书管理员理系统中的顺序图相对较多,比如有图书管

39、理员处理借书顺序图、图书管理员处理还书顺序图、处理借书顺序图、图书管理员处理还书顺序图、借阅者查询书目顺序图、系统管理员添加图书顺借阅者查询书目顺序图、系统管理员添加图书顺序图、系统管理员删除书目的顺序图、系统管理序图、系统管理员删除书目的顺序图、系统管理员添加借阅者账户的顺序图等。员添加借阅者账户的顺序图等。 6.5 顺序图的建模技术及应用顺序图的建模技术及应用图书管理员处理借书顺序图图书管理员处理借书顺序图图书管理员收到借阅者的借书申请时,首先验明借阅者的身份,如果没有问题,则查找借阅书目,如果借阅者没有超出最大借阅数量,则开始借阅并更新书籍列表信息,借阅成功。tsg: : 图书管理员ts

40、g:借书页面tsg:书目tsg:列表tsg:借阅tsg:借阅者信息1 : 验证借阅者身份()2 : 身份验证()3 : 正确4 : 创建借阅信息()5 : 验证是够超过最大借阅值()6 : 查找书目()7 : 选择书籍并更新()8 : 借阅成功()6.5 顺序图的建模技术及应用顺序图的建模技术及应用图书管理员处理还书顺序图图书管理员处理还书顺序图 图书管理员处理还书时,借阅者首先向图书管理员发出还书请求,图书管理员将读者的信息和所要还的书籍信息发送到数据库,由系统检查用户的合法性,当借阅者的信息和书籍的信息都得到确认后,工作人员修改书籍信息和借阅者信息,将结果显示处理,完成还书操作。 tsg:

41、 : 借阅者 tsg: : 图书管理员tsg:列表tsg:借阅tsg:还书页面1 : 请求还书()2 : 还书操作()3 : 核对书籍列表()4 : 核对成功5 : 更新书籍列表()6 : 更新借阅()6.5 顺序图的建模技术及应用借阅者查询书籍顺序图借阅者查询书籍顺序图在该系统中,借阅者可以登录页面,查询书籍。在该系统中,借阅者可以登录页面,查询书籍。tsg: : 借阅者tsg:借书页面tsg:列表1 : 查询借阅页面()2 : 查询书目列表()6.5 顺序图的建模技术及应用系统管理员添加图书顺序图系统管理员添加图书顺序图在图书管理系统中,要添加一本新的书籍,系统管理员需要在页面上进行在图书

42、管理系统中,要添加一本新的书籍,系统管理员需要在页面上进行选择添加操作,页面会将管理员的请求发送到书目中进行搜索,该书是选择添加操作,页面会将管理员的请求发送到书目中进行搜索,该书是够为新书,如果为真则将其加入书籍列表中。够为新书,如果为真则将其加入书籍列表中。tsg: : 系统管理员tsg:页面tsg:书目tsg:列表1 : 添加书籍()2 : 查询书目()3 : 返回结果()4 : 添加、创建书籍列表()6.5 顺序图的建模技术及应用系统管理员删除书目的顺序图系统管理员删除书目的顺序图当书籍需要报废处理时,系统管理员可以登录到后台管理,当书籍需要报废处理时,系统管理员可以登录到后台管理,查

43、找到对应的书目,在书籍列表中进行删除,该书目对象查找到对应的书目,在书籍列表中进行删除,该书目对象彻底销毁。彻底销毁。tsg:页面tsg:书目tsg:列表tsg: : 系统管理员1 : 删除书目()2 : 查找书目()3 : 列表中查找()4 : 删除书目()5 : 删除目录()6.5 顺序图的建模技术及应用 在该系统中,如果有新的借阅者,则由系统管理在该系统中,如果有新的借阅者,则由系统管理员登录后台页面,添加借阅者信息。其顺序图如员登录后台页面,添加借阅者信息。其顺序图如图图6.25所示。所示。 tsg:页面tsg: : 系统管理员tsg:借阅者信息1 : 创建借阅者()2 : 添加、更新

44、借阅者()6.6 协作图协作图协作图(又叫(又叫合作图,通信图合作图,通信图)是一种交互图,是一种交互图,描述系描述系统对象(或活动者)如何共同协作实现用例;统对象(或活动者)如何共同协作实现用例;强调的是强调的是发送和接收消息的对象之间发送和接收消息的对象之间的组织结构,使用协作图来的组织结构,使用协作图来说明系统说明系统的动态情况。的动态情况。协作图主要描述协作对象间的交互和链接,协作图主要描述协作对象间的交互和链接,显示对象、显示对象、对象间的链接以及对象间如何发送消息。对象间的链接以及对象间如何发送消息。协作图可以表示类协作图可以表示类操作的实现。操作的实现。一般,顺序图和协作图可以相

45、互转换,一般,顺序图和协作图可以相互转换,Rose提供了转换提供了转换工具。先画顺序图,再转成协作图更容易工具。先画顺序图,再转成协作图更容易6.6 协作图协作图UML- 82 -UML- 82 -协作图中的事物协作图中的事物 事物名称事物名称解释解释图图参与者参与者发出主动操作的对象,负责发送初始消息,启动一发出主动操作的对象,负责发送初始消息,启动一个操作。个操作。对象对象对象是类的实例,负责发送和接收消息,与顺序图对象是类的实例,负责发送和接收消息,与顺序图中的符号相同,冒号前为对象名,冒号后为类名。中的符号相同,冒号前为对象名,冒号后为类名。消息流消息流(由箭头和标签由箭头和标签组成组

46、成)箭头指示消息的流向,从消息的发出者指向接收者。箭头指示消息的流向,从消息的发出者指向接收者。标签对消息作说明,其中,顺序号指出消息的发生标签对消息作说明,其中,顺序号指出消息的发生顺序,并且指明了消息的嵌套关系;冒号后面是消顺序,并且指明了消息的嵌套关系;冒号后面是消息的名字。息的名字。Actorfirstbuton:button标签协作图中的关系协作图中的关系 关系名称解释关系实例链接链接用线条来表示链接,链接表示两个对象共享一个消用线条来表示链接,链接表示两个对象共享一个消息,位于对象之间或参与者与对象之间息,位于对象之间或参与者与对象之间- 83 - 83 - 消息标签消息标签 消息

47、标签的消息标签的Format: 前缀前缀 守卫条件守卫条件 序列表达式序列表达式 返回值返回值 := 消息名消息名 前缀的语法规则:前缀的语法规则: 序列号,序列号,序列号,序列号,序列号,序列号 / (前缀用来同步线程,意思是在发送当前消息之前指定序列号的消息被处理前缀用来同步线程,意思是在发送当前消息之前指定序列号的消息被处理.例:例:1.1a, 1.1b/) 守卫条件的语法规则:守卫条件的语法规则: 条件短句条件短句 说明:条件短句通常用伪代码或真正的程序语言来表示。说明:条件短句通常用伪代码或真正的程序语言来表示。 例:例:x=0 返回值和消息名:返回值表示一个消息的返回结果,消息名指

48、出了消息的名字和返回值和消息名:返回值表示一个消息的返回结果,消息名指出了消息的名字和所需参数。所需参数。 例:例:x:=calc ( n ) 下面是一个完整的消息标签:下面是一个完整的消息标签: 1.1a, 1.1b, 1.1c / x=0 1.2 *i:=1.n : x := calc( n ) 前缀前缀 守卫条件守卫条件 序列表达式序列表达式 返回值返回值 := 消息名消息名6.6 协作图协作图6.6.2 多对象 多对象多对象(Multiple Object)是多个对象组成的集合,是多个对象组成的集合,往往是同一个类的对象;往往是同一个类的对象; 如果消息同时发给多个对象,则用多对象表示

49、;如果消息同时发给多个对象,则用多对象表示; 在顺序图中仍然显示为单对象一样的图标,在顺序图中仍然显示为单对象一样的图标, rose中中multiple instance 协作图中重叠的方框。协作图中重叠的方框。6.6.2 协作图的基本内容 发送给多对象的消息发送给多对象的消息 一个对象可能会向同一个类的多个对象同时发送一个对象可能会向同一个类的多个对象同时发送一个消息。在协作图中,多对象用一个消息。在协作图中,多对象用“一叠向后延一叠向后延伸的多个对象图标伸的多个对象图标”表示。在多对象前面可以加表示。在多对象前面可以加上用上用“ ”括起来的条件,前面加一个括起来的条件,前面加一个“*”,用

50、,用来说明消息发送给多个对象,如图来说明消息发送给多个对象,如图6.29所示。所示。 Object1Object21 *Condition : message(a)图6.29 多对象 6.6.3 活动对象活动对象/主动对象主动对象 主动对象是一组属性和一组方法的封装体,其中至主动对象是一组属性和一组方法的封装体,其中至少有一个方法不需要接收消息就能主动执行(称为少有一个方法不需要接收消息就能主动执行(称为主动方法)主动方法) 主动对象是不需接收消息就可自动启动交互的对象主动对象是不需接收消息就可自动启动交互的对象 除了含有主动方法外,主动对象和被动对象无区别除了含有主动方法外,主动对象和被动对

51、象无区别 UML标记标记 Rose标记标记6.6.3 协作图的基本内容 有时,按顺序发送消息是很重要的。例如,银行有时,按顺序发送消息是很重要的。例如,银行出纳员(出纳员(bank clerk)要按照顾客排队的次序为)要按照顾客排队的次序为排名顾客(排名顾客(customer )服务。可以用)服务。可以用“while”条件表达出消息的顺序(例如条件表达出消息的顺序(例如“line position=l.n”) ,参见图,参见图6.30。 : BankCherk : Customer1 *line positon=1.n : doBankingBusuness()图6.30 一个对象以指定的次序

52、向多对象发送消息 6.6.3 协作图的基本内容 返回结果返回结果消息可能是要求某个对象进行计算并返回结果的值。例如一消息可能是要求某个对象进行计算并返回结果的值。例如一个顾客对象可能请求一个计算器对象计算某项商品的总价,个顾客对象可能请求一个计算器对象计算某项商品的总价,包括该项商品的价格和税款。包括该项商品的价格和税款。UML提供了返回值的表示法。返回值的名字在最左,后跟赋提供了返回值的表示法。返回值的名字在最左,后跟赋值号值号“: =”,接着是操作名和操作的参数。对计算商品价,接着是操作名和操作的参数。对计算商品价格这个例子,可以表示成:格这个例子,可以表示成:totalPrice : =

53、 compute(itemPrice, salesTax)。图)。图6.31说明了在协作说明了在协作图中的返回值的表示法。表达式中赋值号的右边部分被称图中的返回值的表示法。表达式中赋值号的右边部分被称为消息型构。为消息型构。 : Calculator : Customer1 : totalPrice := compute(itemPrice,salesCount)UML- 89 -UML- 89 -协作图与顺序图的区别和联系协作图与顺序图的区别和联系 协作图和顺序图都表示出了对象间的交互作用,但是它们侧协作图和顺序图都表示出了对象间的交互作用,但是它们侧重点不同。重点不同。 顺序图清楚地表示了

54、交互作用中的时间顺序顺序图清楚地表示了交互作用中的时间顺序(强调时间强调时间),但,但没有明确表示对象间的关系。没有明确表示对象间的关系。 协作图清楚地表示了对象间的关系协作图清楚地表示了对象间的关系(强调空间强调空间),但时间顺序,但时间顺序必须从顺序号获得必须从顺序号获得。 协协作作图图和和顺序图可以相互转化。顺序图可以相互转化。- 90 -1. 打印操作的协作图打印操作的协作图actor发送Print消息给Computer,Computer发送Print消息给PrintServer,如果打印机空闲,PrintServer发送Print消息给printer- 91 -2.乘坐电梯的协作图乘

55、坐电梯的协作图:button:Elevator Control:Queue:Elevator:Ordernew : Actor1 : GetElevator(floorid)1.1 *all queues : len:=Length()1.3: Invoke(job)1.2: Create( )2: nextjob:=Get.job( )Push( )图中存在的事物有:图中存在的事物有: 参与者 按钮对象 电梯控制对象 命令对象 工作队列 电梯对象图中存在的关系有图中存在的关系有: 链接 参与者需要乘坐电梯,他从系统外部按下按钮,让电梯到达他想去的楼层。此时,参与者需要乘坐电梯,他从系统外部按

56、下按钮,让电梯到达他想去的楼层。此时,电梯系统的操作被启动,电梯控制对象以循环的方式检查所有的电梯,从中选择电梯系统的操作被启动,电梯控制对象以循环的方式检查所有的电梯,从中选择一个工作队列长度最短的。然后,它创建一个作业命令,并将该命令放入对应电一个工作队列长度最短的。然后,它创建一个作业命令,并将该命令放入对应电梯的工作队列,接着激活队列。电梯对象并发运行,从它的队列中选择一个作业梯的工作队列,接着激活队列。电梯对象并发运行,从它的队列中选择一个作业并执行。电梯是一个活动对象,它与它的控制线程并发执行。并执行。电梯是一个活动对象,它与它的控制线程并发执行。6.6.5 案例:存款- 93 -

57、练习题练习题1.1. 请指出下面的消息标签各部分的内容。请指出下面的消息标签各部分的内容。 1:display( )1:display( ) A. A. 序列表达式序列表达式: :消息名消息名 B.B.返回值:消息名返回值:消息名 mode=display 1.2.3.7: redraw( )mode=display 1.2.3.7: redraw( ) A. A.序列表达式序列表达式 返回值返回值 消息名消息名 B.B.守卫条件守卫条件 序列表达式序列表达式 消息名消息名 2 2 * *n:=a . . z : prim:=nextPrim(prim)n:=a . . z : prim:=n

58、extPrim(prim) A. A. 守卫条件守卫条件 序列表达式序列表达式 消息名消息名 B.B.序列表达式序列表达式 返回值返回值 消息名消息名 3.1 x0 : foo( ) 3.1 x0 : foo( ) A. A.序列表达式序列表达式 守卫条件守卫条件 B.B.守卫条件守卫条件 消息名消息名 C.C.序列表达式序列表达式 消息名消息名 1.1a, 1.1b/1.2 : continue( )1.1a, 1.1b/1.2 : continue( ) A. A. 前缀前缀 序列表达式序列表达式 消息名消息名 B. B. 后缀后缀 守卫条件守卫条件 消息名消息名练习题1答案: A B B

59、 CA- 94 -:button:Elevator Control:Queue:Elevator:Ordernew : Actor1 : GetElevator(floorid)1.1 *all queues : len:=Length()2: nextjob:=Get.job( )1.2: Create( )Push( )1.3: Invoke(job)练习题2答案 AA2. 2. 请对比本章中的协作图与其相应的顺序图,做练习题。请对比本章中的协作图与其相应的顺序图,做练习题。请在下图中指出,循环计算各个电梯的工作队列长度的消息的顺序号。请在下图中指出,循环计算各个电梯的工作队列长度的消息的

60、顺序号。A 1.1 B1.2 C1.3 D2A 1.1 B1.2 C1.3 D2请说明消息请说明消息1.31.3所进行的操作所进行的操作InvokeInvoke(jobjob),应属于哪个类所具有的方法。),应属于哪个类所具有的方法。A QueueA Queue类类 B ElevatorControlB ElevatorControl类类 C ElevatorC Elevator类类 D ButtonD Button类类 6.6.6 协作图建模技术及应用协作图建模技术及应用使用协作图建模时可以遵循如下策略:使用协作图建模时可以遵循如下策略:确定交互过程的上下文;确定交互过程的上下文;确定参与交

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论