版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第八章 顺序图,状态图的焦点是对象的状态。这只是图片的一小部分。UML顺序图更进一步显示出随着时间的变化对象之间是如何通信的。本章有以下几个部分: 什么是顺序图。 运用顺序图。 实例图和一般图。 使用“if”和“while”。 在序列中创建对象。 自身调用的表示。,前一章学的状态图是对单个对象的“放大”。它说明了对象所经历的状态变化。UML还可让你放大视野,显示出一个对象如何与其他对象交互。在这个“放大”了的视野中,要包括重要的一个要素:时间。顺序图的关键思想是对象之间的交互是按照特定的顺序发生的,这些按特定顺序发生的交互序列从开始到结束需要一定的时间。当建立一个系统时,必须要指明这种交互序列
2、,顺序图就是用来完成这项工作的UML组件。,8.1 什么是顺序图,顺序图由采用通常方式表示的对象组成:对象用矩形框表示,其中是带下划线的对象名:消息用带箭头的实线表示;时间用垂直虚线表示。 8.1.1 对象 对象从左到右布置在顺序图的顶部。布局以能够使图尽量简洁为准。 从每个对象向下方伸展的的虚线叫做对象的生命线(lifeline)。在生命线上的窄矩形条被称为激活。,激活表示该对象正在执行某个操作。激活矩形的长度表示出激活的持续时间。下图显示了对象、生命线和激活的表示法。,8.1.2 消息 一个对象到另一个对象的消息用跨越对象生命线的消息线表示。对象还可以发送消息给它自己,也就是说,消息线从自
3、己的生命线出发又回到自己的生命线。 消息可以是简单的(simple)、同步的(synchronous)或异步的(asynchronous)。简单消息是从个对象到另一个对象的控制流的转移。如果一个对象发送了个同步消息,那么它要等待对方对消息的应答,收到应答后才能继续自己的操作。而发送异步消息的对象不需要等待对方的应答便可以继续自己的操作。在顺序图中,简单消息是个简单箭头,同步消息是实心箭头。异步消息是个半边箭头,如下图所示。,8.1.3 时间 顺序图中垂直方向代表时间维,时问流逝的方向为自顶向下。靠近顶部的消息发生的时间要比靠近底部的消息早。 因此,顺序图是两维的。自左至右的维数代表对象的布局,
4、自顶向下的维数代表时间的流逝。下,图说明了顺序图的基本图符集。对象横放在图的项部。每个对象的生命线都是一条从对象向下的虚线。图中的实线与箭头连接另一条生命线并代表对象之间相互发送的消息。人形表示个参与者,他发起了序列。但严格地讲,参与者的图标不属于顺序图图符集。,8.2 图形用户界面GUI,上一章普介绍了一个图形用户界面的状态图。现在将绘制它的顺序图来说明GUI对象和其他对象之间的交互。 8.2.1 交互序列 假设用户在键盘上按下了一个字母数字键。如果用户使用类似于word这样的字处理软件,那么相应的字母字符就立刻在屏幕上显示出来。那么屏幕后面发生了什么呢?,1. GUI将击键事件通知给操作系
5、统。 2. 操作系统接着通知CPU。 3. 操作系统更新GUI。 4. CPU又通知图形卡。 5. 图形卡向显示器发送一个显示消息。 6. 显示器将字母字符显示在屏幕上,给用户提供了图形化的反馈信息。,8.2.2 顺序图 下图是反映GUI的顺序图。可以看到,图中的消息都是异步的:各个软件构件都不等待应答消息就可以继续工作。如果你使用过Windows应用程序,那么就可能体会过异步通信的效果,持别是在速度较慢的机器上工作时更是如此。例如当你使用字处理软件时,敲进了一个字符,有时敲到后面的键时前面敲的字符才显示在屏幕上。,有时在顺序图中画出一个或者多个对象的状态很有意义。因为上一章已经分析过GUI的
6、状态,因此很容易把分析结果加到现在的顺序图中。下图是一个GUI混合图带有状态的顺序图。注意,顺序图起始和终止于GUI的working(工作)状态。,8.2.3 用例 顺序图到底是说明什么的图呢?在上面的例子中,顺序图说明的是在一个简单场景(用户击键)中对象之间的交互用户按一个键。这个场景可以是一个用例的一部分,该用例叫做“Perform a keystroke(执行一次击键)”,如下图所示。因此顺序图可以描述一个用例中的系统交互,它实际上是用例在实际系统中的“映像”。,在下面的例子中,将更细致地考察用例和顺序图之间的关系。,8.3 饮料自动销售机:实例顺序图和 一般顺序图,8.3.1 实例顺序
7、图 在用例“Buy soda”的“理想”场景中,参与者是想要买一罐饮料的顾客。顾客向机器中投入钱币从而发起了这个场景。然后顾客选择所需要的饮料。因为我们现在考虑的是理想情况下的场景,所以机器中应当至少存有一罐顾客所选择品牌的饮料并提供顾客。,假设在饮料销售机中有3个对象来做上述工作:前端(Front)(它是饮料销售机与顾客之间的接口),钱币记录仪(Register)(它负责收集顾客投的钱币),以及分配器(Dispenser)。我们还假设钱币记录仪控制分配器对象。那么对象之间的交互序列可能如下所示: 1顾客向机器前端的槽缝中投入钱币。 2顾客选择所要购买的饮料品种。 3钱币被转送给记录仪。 4由
8、于这是一个理想情况下的场景,假设有饮料存货,则记录仪控制分配器将一罐饮料投递到销售机的前端。,由于上述对应的序列图只覆盖了用例“Buy soda”的一个场景(也就是一个实例),因此它被称之为实例顺序图(instance sequence diagram)。下图显示了对应的实例顺序图。注意图中只有简单消息,每个消息都引起控制流程从一个对象转移到另一个对象。,8.3.2 一般顺序图 我们已经知道,用例“Buy soda”还包括另外两个场景。一个处理机器中无顾客所选择的饮料时的情形,另一个处理顾客输入了数量不正确的钱币时的情形。如果绘制顺序图时考虑到用例中所有这些场景,这样所创建的就是一个一般顺序图
9、(generic sequence diagram)。 在这种情况下,可以根据各个实例顺序图建立一般顺序图。为了完成这项工作,必须要考虑到各种控制流程,也就是说,必须要表示出投入了不正确的钱数和无所选择的饮料时所发生的条件及产生的结果。,对于“钱数不正确”场景: 1记录仪检查顾客输入的钱币数星是否与所要购买的饮料价格匹配。 2如果输入数量大于价格,则记录仪计算两者之间的差额并检查机器中存有的金额。 3如果机器中刚好有能找给顾客的零钱,则记录仪将零钱找给顾客,一切按正常情况继续进行。 4如果没有零钱找给顾客,则记录仪退回顾客投入的钱币,并显示一个消息,提示顾客重新输入数量正确的金额。,5如果顾客
10、所输入的金额少于所要购买的饮料价格,则记录仪什么也不做,机器等待顾客继续投入钱币。 为了表示顺序图中的每个“if”分支,可以将“if”选择条件写在方括号中,放到对应的消息箭头上,即增加input=price,change in reserve和change not in reserve3个选择条件。 每个条件都引起消息中的控制流的一个“分支”,将消息分为多条路径。不同的消息路径最终可以到达同个对象。为了表达这种关系,接收对象的生命线,可分为多余路径。在消息序列的某一点上,信息的分支可以合并,生命线的路径也是如此。下图是加入了场景“钱数不正确”后的图。,下面让我们加入“无所选存货”场景: 1.
11、当顾客选择了某一已经卖完的饮料品牌时,机器就显示出一条闪烁消息:“该饮料已售完”。 2. 机器接着显示条消息,提示顾客再选择其他品牌的饮料。 3. 顾客这时可以按一个按钮选项,收回已经投入的钱币。 4. 如果顾客选择了一种有现货的饮料品牌,那么后面按照理想情况下的场景继续进行。即如果输入钱数是正确的,机器提供给顾客一罐饮料;如果不正确,,机器按照“钱数不正确”场景继续执行操作。 5. 如果顾客此时选择的品牌又已经售完,那么要重复第1步,直到顾客选择了有存货的品牌,或者按下退钱按钮取回已经投入的钱为止。 下图显示了加入“钱数不正确”和“无所选存货”两个场景后的饮料销售机的一般顺 序图。,8.4
12、在消息序列中创建对象实例,另一个与顺序图有关的重要概念,特别在软件设计时要用到的,是对象实例创建。 咨询公司局域网例子中的“Create a proposal(创建一个提案)”用例提供了一个对象创建的实例。在这个例子中,假设顾问(consultant)已经登录进LAN,则交互序列可能如下所示: 1顾问想要重用一个提案的某部分,并在网络的中央数据仓库中搜索合适的提案。,2如果顾问找到了一个合适的提案,他就用office软件包打开该提案文件并编辑它,然后用新名字保存这个文件,从而建立了个新提案的新文件。 3如果顾问没有找到提案,则他就直接打开Office软件包新建立一个提案的新文件。 4在编辑和创
13、建提案时,顾问要运行Office件包中的应用程序。 5. 当顾问完成提案时,他要将这个提案保存到网络中央数据仓库中。 除了创建如象(在这个例子中是创建文件),这个,交互序列还要使用“if判断和“while”循环。 首先让我们来看看对象创建。当一个交互序列创建了一个对象时,被创建的对象用通常的表示法表示矩形框中写上类和对象名。但和普通对象表示法的区别是新创建的对象不是放在顺序图的顶都而是放在对象生命线垂直方向上的某个位置上,这个位置刚好对应着对象被创建的时刻。创建对象的消息名为“create()”。圆括号暗示这是一个操作:在面向对象程序设计语言中,构造函数操作用来创建对象实例。 也可以不使用“C
14、reate()”作为对象创建消息的,消息名,另一种选择是使用构造型Create来说明某个消息是对象创建消息。 新创建的对象可能在某个时候消亡,对象的消亡用该对象生命线底部的“X”来表示,“X”所处的时刻代表对象消亡的时刻。 循环控制流的表示法是将循环条件(“while working on proposal”)放在方括号里,左边括号前面加上个星号“*”。 下图为用例“Create a Proposal”的一个顺序图。,8.5 表示自身调用,对象有时具有一个调用自身的操作。这叫做自身调用或递归,许多程序设计语言都提供这种能力。 这里举一个例子。假设系统中有一个叫计算器(calculator)的对
15、象,它有一个计算利息的操作。为了计算包括多个具有不同利息率的一段时间的复合利息,该对象的利息计算操作必须要多次调用本身的计算利息操作。 要用UML来表示自身调用,需要从操作的激活框中绘制一个消息箭头,然后再绘制一个小一点的矩形,框依附在激活框上,然后绘制一个箭头指向下面的小矩形框,并且从开始递归的对象处引出一个返回线。下图是说明自身调用的某个顺序图的片段。,8.6 小结,UML顺序图在对象交互的表示中加入了时间维。在顺序图中,对象位于图的顶部,从上到下表示时间的流逝。每个对象都有一个垂直向下的对象生命线。对象生命线上的窄矩形条代表激活该对象某个操作的执行。可以沿着对象的生命线表示出对象的状态。
16、 消息(简单的、同步的或异步的)用连接对象生命线之间的带箭头连线表示。消息在垂直方向上的位置表示了该消息在交互序列中发生的时间。越靠近图项部的消息发生的越早,越靠近底部的消息发生的越晚。,用例图可以只说明用例的一个实例(场景),或者可以表示一般的或者一个用例的所有场景。一般顺序图中通常提供了表示“if”条件语句和“while”循环语句的机会。每个“if”条件语句要用方括号括起来,“while”循环条件也要用方括号括起来,并在左括号前面加一个星号。 当序列中包括了创建对象的序列时,被创建的新对象也采用通常的矩形表示法,只是它在垂直方向上的位置代表了它被创建的时刻。 在一些系统中,一个对象的操作可以调用该对象自
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 26年营养状态评估随访
- 2026护士职业基本考试题库及答案
- 2025年脑机接口系统开发舆情监测机制构建
- 2026河南省医学科学院王宁利院士团队招聘工作人员备考题库附答案详解(培优b卷)
- 2026中国地质大学(北京 )招聘备考题库(第二批)附答案详解(能力提升)
- 2026绍兴市中心血站编外招聘2人备考题库(含答案详解)
- 2026云南昆明市生态环境局盘龙分局招聘劳务派遣工作人员的3人备考题库含答案详解(典型题)
- 2026中国标准化研究院人类工效标准化研究所企业编制职工招聘1人备考题库(北京)附答案详解(考试直接用)
- 2026贵州遵义人力资源有限公司招聘劳务外包制工作人员12人备考题库附答案详解(夺分金卷)
- 2026海南三亚市生态环境局招聘下属事业单位人员3人备考题库(第1号)附答案详解(基础题)
- 24J113-1 内隔墙-轻质条板(一)
- 完美着装智慧树知到期末考试答案章节答案2024年武汉纺织大学
- 旅游服务营销策略与创新
- 7、辽、西夏与北宋的并立
- 跨越档封网计算表
- 耕地占补平衡用户手册
- 《最重要的事 只有一件》读书笔记PPT模板思维导图下载
- 药品生产验证指南
- 2023年机械制造装备设计大作业
- GB/T 20303.1-2016起重机司机室和控制站第1部分:总则
- 市场营销学(MBA)课件
评论
0/150
提交评论