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