顺序图和协作图

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

顺序图和协作图交互图概述交互图(interactiondiagram)是用来描述对象之间以及对象与参与者之间的动态协作关系以及协作过程中行为次序的图形文档.交互图通常用于描述一个用例的行为,显示该用例中所涉及的对象及对象之间消息传递情况.交互图包括:(1)顺序图(sequencediagram),描述对象按照时间顺序的消息交换;(2)协作图(collaborationdiagram),描述系统成分如何协同工作.顺序图1.顺序图顺序图也称为时序图,它描述了系统中对象间通过消息进行的交互,它强调了消息在时间轴上的先后顺序。2.顺序图的作用顺序图常用来描述用例的实现,它表明了由哪些对象,通过消息相互协作来实现用例的功能,在顺序图中,标识了消息发生交互的先后顺序。赤壁之战的顺序图顺序图的组成元素参与者(actor)或者对象(object)生命线(lifeline)激活期(activation)/控制焦点(focusofcontrol)消息(message)时间维对象维对象/参与者生命线控制焦点消息参与者或对象参与者和对象按照从左到右的顺序排列;一般最多两个参与者,他们分列两端。启动这个用例的参与者往往排在最左边,接收消息的参与者则排在最右端;对象从左到右按照重要性排列或按照消息先后顺序排列;将对象置于顺序图的顶部意味着在交互开始的时候对象就已经存在了,如果对象的位置不在顶部,那么表示对象是在交互的过程中被创建的。对象的命名方式有三种:包括对象名和类名类名(匿名对象)对象名(不关心类)生命线(Lifeline)每个对象都有自己的生命线,用来表示在该用例中一个对象在一段时间内的存在垂直的虚线如果对象生命期结束,则用注销符号表示消亡点激活期(activation)/控制焦点(focusofcontrol)对象在一段时间内获得了焦点,也称激活期对象执行某个动作的时期空心矩形条激活期的长短意味着对象执行某个动作的时间有多长,可以通过约束{10ms}来限制执行时间的长短。顺序图中的消息面向对象方法中,消息是对象间交互信息的主要方式。结构化程序设计中,模块间传递信息的方式主要是过程(或函数)调用。对象A向对象B发送消息,可以简单地理解为对象A调用对象B的一个操作(operation)。顺序图中,尽力保持消息的顺序是从左到右排列的。一个顺序图的消息流开始于左上方,消息2的位置比消息1低,这意味着消息2的顺序比消息1要迟。顺序图中消息编号可显示,也可不显示。UML1.4后定义的消息有:调用消息procedurecall异步消息asynchronous返回消息returnUML1.3前的消息还有:简单消息simpleRose扩充的消息阻止消息balking超时消息time-out调用消息:消息的发送者把控制传递给消息的接收者,等待接收者返回或放弃控制,可以表示同步。实心箭头符号调用消息必有一个与之配对的返回消息,但是可以不用画出.异步消息:消息的发送者把控制传递给消息的接收者,然后继续自己的工作,不等待接收者返回或放弃控制.UML1.4及以后UML1.3及以前返回消息(Return):表示消息的返回。消息上方放置返回值同步消息的返回可以画出(如果想明确表达返回值),也可以不画出,直接隐含。异步消息可以有返回,也可以没有。(可以响应异步消息,也可以不响应该异步消息。)虚线箭头表示,和依赖关系不要混淆阻止消息:消息的发送者传递消息给接收者,如果接收者无法立即接收,则发送者放弃该消息.超时消息:消息的发送者发出消息给接收者并按指定时间等待,若接收者无法在指定时间内接收,则发送者放弃该消息.自调用(SelfCall)某对象自己调用自己的操作嵌套的矩形条消息的语法格式[前置消息列表][警戒条件][消息顺序表达式][返回值:=]消息名称([参数列表])前置消息列表(predecessor)语法:消息序列号,消息序列号,.../前置消息列表是一个用来同步线程或路径(path)的表达式意思是在发送当前消息之前指定序列号的消息被处理(必须连续执行)消息序列号之间用逗号隔开,用斜杠结束例如1.1a,1.1b/1.2:continue(),在发送消息1.2之前必须已经同时发送并发消息给线程a和b警戒条件(guard-condition)语法:[条件短语]条件短语通常用伪代码或真正的程序语言来表示,UML并不规定其语法例如,[x0]4:invert(x,color)消息顺序表达式(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为同时发送的并发消息消息编号:按消息产生的先后顺序,给消息编号,有两种编号方案,一种是顺序编号,另一种是嵌套编号.(1)顺序编号整个消息的传递过程就形成了一个完整的序列,因此通过在每个消息的前面加上一个用冒号隔开的顺序号(按照消息的先后顺序,从1开始对消息编号)来表示其顺序。(2)嵌套编号由于顺序图本身已经充分表现出消息执行的顺序,因此在UML模型中并没有要求对消息进行编号。只是要求在协作图中,对消息进行了编号。但在Rose等建模工具中,为了能够自动实现顺序图与协作图的转换,在顺序图中也默认采取嵌套编号方案。嵌套编号recurrence表示一个条件或循环的执行,有两种选择*[循环子句]循环子句(iteration-clause)用来指定一个循环(重复执行)例如:一个包括循环的消息1.1*[x=1..10]:doSomething()[条件子句]条件子句一般用来表示分支而不是用作警戒条件[x0],是两个可以用来分支的条件子句,这两个条件只能有一个为真,因而只有一个分支被执行(即发送与分支有关的消息)条件子句和循环子句都可以用伪代码或真正的编程语言来表示消息顺序表达式用冒号结束返回值、消息名和参数表返回值表示一个操作调用(即一个消息)的结果消息的语法格式[前置消息列表][警戒条件][消息顺序表达式][返回值:=]消息名称([参数列表])例:2:display()1.3.1:p:=find()[x0]4:invert(x,color)3.1*[x=1..10]:update()1.1a,1.1b/1.2:continue()Rose中的消息建立顺序图的步骤1.确定交互过程的上下文2.识别参与交互过程的对象3.为每个对象设置生命线4.从引发这个交互过程的初始消息开始,在生命线之间自顶向下依次画出随后的各个消息.5.如果需要嵌套或(和)表示消息发生的时间点,使用控制焦点.6.如果需要说明时间约束,则在消息旁边加上约束说明.7.如果需要,可以为每个消息设置前置条件和后置条件.下面以饮料自动销售系统为例,来学习怎样绘制顺序图.下面对“买饮料”的一种场景进行建模,绘制其对应的顺序图.买饮料的正常场景下面是买到饮料的一般事件流:(1)顾客从机器的前端钱币口投入钱币,然后选择想要的饮料;(2)钱币到达钱币记录仪,记录仪更新自己的存储;(3)记录仪通知分配器分发饮料到机器前端.边界类、控制类和实体类UML中三种主要的类版型边界类,boundaryclass控制类,controlclass实体类,entityclass引入多种类版型帮助分析和设计人员确定系统中的类.边界类边界类位于系统与外界的交界处,包括:用户界面类,如:窗口、对话框、报表类等通讯协议类,如:TCP/IP的类直接与外部设备交互的类直接与外部系统交互的类边界类的UML表示方法:边界类通过用例图可以确定需要的边界类,每个Actor/Usercase对至少需要一个边界类.边界类一般可以没有属性,只有操作.但并不是每个Actor/Usecase都需要生成惟一边界类,多个actor启动同一usecase可以使用同一边界类.实体类实体类保存要放进持久存储体(数据库/文件等)的信息.实体类通过事件流和交互图发现,采用目标领域术语命名.通常实体类对应数据库中的表,其属性对应表的字段,但实体类与数据库中的表不一定是一一对应关系.控制类控制类是负责管理或控制其他类工作的类.每个用例通常有一个控制类,控制用例中的事件顺序,控制类也可以在多个用例间共用.控制类较少接收消息,发出较多消息.实例寻找分析类在分析阶段,我们常在用例中寻找三种分析类(边界类、控制类和实体类)。我们通过分析用例描述中的事件流,寻找分析类。1.用例“新增书籍”在分析时,还必须综合考虑基本事件流和扩展事件流两个方面。下面以“新增书籍“为例进行分析。其事件流如下所示:(1)基本事件流①图书管理员向系统发出“新增书籍信息”请求。②系统要求图书管理员选择要新增的书籍是计算机类还是非计算机类。③图书管理员做出选择后,显示相应界面,让图书管理员输入信息,并自动根据书号规则生成书号。④图书管理员输入书籍的相关信息,包括:书名、作者、出版社、ISBN号、开本、页数、定价、是否有CD-ROM。寻找分析类⑤系统确定输入的信息中书名没有重复。⑥系统将所输入的信息存储建档。(2)扩展事件流①如果输入的书名有重名现象,则显示出重名的书籍,并要求图书管理员选择修改书名或取消输入。②图书管理员选择取消输入,则结束用例,不做存储建档工作。③图书管理员选择修改书名后,转到5。寻找分析类2.寻找边界对象对这个用例而言,参与者“图书管理员”,因此要寻找边界对象只需以“图书管理员”这个参与者为线索,从用例描述中去寻找分析类:(1)图书管理员向系统发出“新增书籍信息”请求-------图书管理员在什么地方向系统发出“新增书籍信息”的请求呢?通常会设计一个主窗口,并在上面摆放一些按钮来实现,因此在此句描述中间,可以发现两个边界类:主窗口、“新增书籍信息”按钮。(2)系统要求图书管理员选择要新增的书籍是计算机类还是非计算机类------从此句中可以发现一个新的边界类:书籍类别列表框。(3)图书管理员做出选择后,显示相应界面,让图书管理员输入信息,并自动根据书号规则生成书号--------此句中可以发现最为关键的一个边界类------“新书信息录入”窗口以及辅助的“提交”按钮。而且,还可以发现新增书籍信息按钮是组成主窗口的一部分。书籍类别列表框、提交按钮则是组成新书信息录入窗口的一部分。根据以上信息,可以先将参与者和边界对象绘制出来,其结果如图所示。寻找分析类参与者和边界对象3.寻找控制对象和实体对象实体对象通常来源于领域中的类图,也就是描述业务领域的名词或名词短语,通过阅读整个事件流的详细描述,我们得知,实体对象有书籍、计算机书籍、非计算机书籍以及书籍列表4个。在这个例子中,根据事件流中的步骤5,以及扩展事件流的描述,可以在上图上增加相应的控制对象,得到更进一步的分析图,如下图所示。寻找分析类对基本事件流步骤5分析后,添加控制对象另外,还有几个关键的事件没有体现到图中:一是基本事件流中的步骤2、3要求根据用户选择的类别自动获得书号;二是当书名重复性检查没有通过时(有重名),应返回要求其重输。构建交互图最后完整的分析图构建交互图下面是构建顺序图的步骤:首先,按照从左到右的顺序,依此将参与者、边界对象和实体对象放在最顶部,边界类放在左边,实体类放在右边。注意,在分析模型中可以先不考虑控制类的引用(当然有必要时也可以引入)。构建顺序图练习1、用户打印文件,计算机向打印服务器发送打印命令,打印机如果空闲,则直接打印,否则把打印文件存储在打印队列中。2、网上书店用户需求书店店长:顾客能在网上书店订购图书,提交订单;工作人员能及时看到订单

1 / 74
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功