统一建模语言第4章顺序图和协作.ppt
第四章 顺序图和协作图统一建模语言Unified Modeling Language,顺序图顺序图的定义顺序图的符号顺序图的消息顺序图的其他技术帧化顺序图顺序图的建模方法协作图协作图的定义协作图的符号协作图的消息协作图的建模方法,第四章 顺序图和协作图,在标识出系统的类图之后,仅给出了实现用例的组成结构,这时还需要描述这些类的对象是如何交互来实现用例功能的。即不但需要把用例图模型转化为类图模型,还要将它转化为交互图模型。,顺序图的定义,交互图表示类(对象)如何交互来实现系统行为。交互图具有顺序图和协作图两种形式。,顺序图的定义(续),1.顺序图 它描述对象按时间顺序的消息交换过程,它体现出系统用例的行为。2.协作图 它描述对象间的组织协作关系,它也可体现出系统用例的行为。,顺序图顺序图的定义顺序图的符号顺序图的消息顺序图的其他技术帧化顺序图顺序图的建模方法协作图协作图的定义协作图的符号协作图的消息协作图的建模方法,第四章 顺序图和协作图,顺序图的符号(续),顺序图有四个主要的标记符:活动对象 生命线 激活 消息,顺序图的符号(续),活动对象 活动对象可以是系统的参与者或者任何有效的系统对象。对象是类的实例,它使用包围名称的矩形框来标记。名称带下划线,顺序图中对象的标记符如下图所示。,顺序图的符号(续),生命线 顺序图中垂直方向代表时间维,时间流逝的方向为自顶向下。靠近顶部的消息发生的时间要比靠近底部的消息早。因此,顺序图是两维的。自左至右的维数代表对象的布局,自顶向下的维数代表时间的流逝。每个对象的生命线都是一条从对象向下的虚线。表示对象的存在时间。,顺序图的符号(续),激活 在生命线上的窄矩形条被称为激活(activation).激活表示该对象正在执行某个操作。激活矩形的长度表示出激活的持续时间,顺序图顺序图的定义顺序图的符号顺序图的消息顺序图的其他技术帧化顺序图顺序图的建模方法协作图协作图的定义协作图的符号协作图的消息协作图的建模方法,第四章 顺序图和协作图,顺序图的符号(续),消息 消息用来说明顺序图中不同活动对象之间的通信。它可在一个对象需要取消不同对象的进程时或者需要向另一个对象提供服务时,使用消息。消息从活动对象生命线到接收对象生命线的箭头表示。箭头上面标记要发送的消息,如下图所示。,顺序图的符号(续),消息的限定 消息可以包含条件以便限制它们只在满足条件时才能发送。条件显示在消息名称上面的方括号中。右图示例演示了如何建立一个顺序图来显示登录尝试。如果登录失败,会在放弃登录之前重试一次,如下图所示。,顺序图的符号(续),在UML中,总共有4种消息,如下图所示。,消息的种类,顺序图的符号(续),(1)同步消息 同步消息(synchronous message)代表一个操作调用的控制流。同步消息的发送者把控制传递给消息的接收者,然后暂停活动,等待消息接收者的应答,收到应答后才继续自己的操作。,顺序图的符号(续),同步消息,顺序图的符号(续),(2)异步消息 异步消息(Asynchronous message)用于控制流在完成前不需要中断的情况。异步消息的发送者把控制传递给消息的接收者,然后继续自己的活动,不需等待接收者返回信息或控制。下面示例演示了如何在登录文件的情况下使用异步消息。,顺序图的符号(续),异步消息,顺序图的符号(续),(3)简单消息 如果所有的消息都是同步或者异步消息,那么为什么还要简单消息呢?因为有时候我们不关心消息是同步还是异步,此外在高层分析中,有时候没有必要指定一个消息是同步的还是异步的。如下面的示例所示。,顺序图的符号(续),简单消息,顺序图的符号(续),(4)返回消息 返回消息(return message)表示从过程调用返回.如果是从过程调用返回,则返回消息是隐含的,所以返回消息可以不用画出来.对于非过程调用,如果有返回消息,必须明确表示出来.,顺序图的符号(续),返回消息,顺序图顺序图的定义顺序图的符号顺序图的消息顺序图的其他技术帧化顺序图顺序图的建模方法协作图协作图的定义协作图的符号协作图的消息协作图的建模方法,第四章 顺序图和协作图,1.创建对象 创建对象的标记符如下图中的示例所示。有一个主要步骤用来把“create”消息发送给对象实例。对象创建之后就会具有生命线,就像顺序图中的任何其他对象一样。现在可以像顺序图中的其他对象那样来使用该对象发送和接收消息。在处理新创建的对象,或者处理顺序图中的任何其他对象时,都可以发送“destroys”消息来删除对象。若要想说明某个对象被销毁,需要在被销毁对象的生命线上放一个X字符。,顺序图的其他技术,顺序图的其他技术,创建对象,顺序图的其他技术,2.分支和从属流 有两种方式来修改顺序图的控制流:使用分支和使用从属流。这两种方式很相似,各自的标记符略微不同。控制流的改变是由于不同的条件导致控制流走向不同的道路。,顺序图的其他技术,分支允许控制流走向不同的对象,如下图所示。,顺序图的其他技术,注意消息的开始位置是相同的,分支消息的结束“高度”也是相等的。这说明在下一步中,其中之一将会执行,如下图所示。,顺序图的其他技术,从属流还允许控制流根据条件改变,但是只允许控制流改变为相同对象的另一条生命线分支,如下图所示。,顺序图的其他技术,在下面的示例中,Editor在用户删除文件或者保存文件时向Filesystem发送一条消息。显然,Filesystem将会执行两种完全不同的活动,并且每一个工作流都需要独立的生命线,如下图 所示。,顺序图的其他技术,练习:阅读一个顺序图 阅读下图所示的顺序图,该图说明了开发者编译应用程序的步骤。在阅读顺序图时,请指出我们到目前为止已经学习过的标记符组件。练习步骤 1)指出顺序图中的参与者和对象。2)指出出错处理发生的位置。3)按照控制流的顺序指出各个消息。,顺序图顺序图的定义顺序图的符号顺序图的消息顺序图的其他技术帧化顺序图顺序图的建模方法协作图协作图的定义协作图的符号协作图的消息协作图的建模方法,第四章 顺序图和协作图,帧是UML2.0对顺序图新增内容之一,一旦被包含在一个帧里,UML图就可以放在另外的帧或图里,从而实现UML图的重用.帧化一个顺序图的方法:用一个边框包围它并在左上角添加一个间隔区。这个间隔区包含了识别该顺序图的信息。,帧化顺序图,间隔区其中的一小段信息是操作符,就是描述了帧中的图的类型的表达式。对于一个顺序图,操作符是sd(sequence diagram)。图9.17展示了按照UML2.0风格帧化的一般顺序图。除了操作符,间隔区还包含了图所描述的交互的名字。,帧化顺序图,帧化顺序图,交互事件 如果为一个用例的多个场景创建实例顺序图,你会注意到图和图之间的相当一部分内容是重复的。帧化的方法使用户能够在一张顺序图中快速容易地复用另一张顺序图的部分内容。方法是先在一部分图的周围绘制一个帧,标记出帧的隔离区,然后只要把带有标记的帧(不需要绘制消息和生命线)插入到一个新图中就可以复用了。这个特定的帧化的部分叫做交互事件(interaction occurrence),它的操作符是ref。,帧化顺序图,下图展示了对最理想情况的场景的帧化。帧化的部分是处理饮料分发的交互事件。后图展示了如何在“需要找零钱”的场景中复用这个交互事件。,帧化顺序图,交互片段的组合 交互事件是交互片断(interaction fragment)的一种特殊情况。交互片断是UML2.0中对一个顺序图的某一段的更一般称呼。可以用多种方式来组合交互片断。操作符表示了不同的组合类型。为了表示这种组合,将整个片断帧化,再用一条虚线表示邻接交互片断的边界。广泛使用的组合类型有两种,这两种类型的操作分别被标注为alt和par操作符。在alt组合中,每个片段都是一种可选情况,只能在一定的条件下执行。保护条件指明了哪一个片断将会执行。下图展示一般顺序图中这种类型的组合。,帧化顺序图,在par组合中,组合片段并列工作而不会互相交互.例如,假设饮料销售机工作效率很高:它能够同时返回顾客的零钱和传送顾客的选购信息.这就需要几件事情同时发生.,顺序图顺序图的定义顺序图的符号顺序图的消息顺序图的其他技术帧化顺序图顺序图的建模方法协作图协作图的定义协作图的符号协作图的消息协作图的建模方法,第四章 顺序图和协作图,顺序图的建模方法,创建顺序图包含4项任务:1)确定需要建模的工作流。2)从左到右布置对象。3)添加消息和条件以便创建每一个工作流。4)绘制总图以便连接各个分图。,顺序图的建模方法(续),1)确定工作流 建模顺序图的第一步是确定将要建模的工作流。对于这个练习,我们将要建模Grading system的View Grades用例。为此,需要至少标识出3个要建模的工作流:教师成功地检查学生分数 教师试图检查某个学生分数,但该学生在系统中不存在。教师试图检查某个学生分数,但该学生分数在系统中不存在。,顺序图的建模方法(续),2)布置对象 建模顺序图的下一步是从左到右布置所有的参与者和对象,包含要添加消息的对象生命线,如下图所示。,顺序图的建模方法(续),3)添加消息和条件 接下来,对每一个工作流作为独立的顺序图建模。从基本的工作流开始,它是没有出错条件,并且需要最少决策的工作流。注意选择适当的消息类型(异步、同步、简单和返回)。在本例中,基本工作流是教师成功地检查某个学生的分数,如下图所示。,第1个工作流,顺序图的建模方法(续),顺序图的建模方法(续),接下来以独立的顺序图建模从属工作流。此处只建模否定的条件,如下图所示。,第2个工作流,顺序图的建模方法(续),注意使用条件来指示在什么时候发送什么消息,如下图所示。,第3个工作流,顺序图的建模方法(续),4)绘制总图 建模顺序图的最后一步是把所有独立的工作流连接为一个总图,如下图所示。在此阶段,如果觉得前面的消息和交互对于当前的顺序图过于详细,可以让它们更加泛化一些,但是在软件建模的下一个阶段,就会觉得初始的各个顺序图越详细越好。,顺序图顺序图的定义顺序图的符号顺序图的消息顺序图的其他技术帧化顺序图顺序图的建模方法协作图协作图的定义协作图的符号协作图的消息协作图的建模方法,第四章 顺序图和协作图,协作图的定义,协作图描述对象之间的关联及其它们彼此之间的消息通信。要想使由类构成的系统具有功能,这些类的实例(对象)需要彼此通信和交互。协作图除了展示出对象之间的关联,还显示出对象之间的消息传递。,协作图的定义(续),协作图和顺序图的区别 顺序图和协作图都可以表示对象间的交互关系,但它们的侧重点不同。顺序图强调的是交互的时间顺序,协作图强调的是交互的语境和参与交互的对象的整体组织。还可以从另一个角度来看两种图的定义:顺序图按照时间顺序布图,而协作图按照空间组织布图。,顺序图顺序图的定义顺序图的符号顺序图的消息顺序图的其他技术帧化顺序图顺序图的建模方法协作图协作图的定义协作图的符号协作图的消息协作图的建模方法,第四章 顺序图和协作图,协作图的符号,协作图描述对象之间的关联结构以及它们之间的交互,以便展示用例的功能行为。协作图中包括的建模元素有对象(包括参与者实例、多对象、主动对象等)、消息、链等。其标记如下图所示。,对象消息链,协作图的符号(续),多对象 在协作图中,多对象指的是由多个对象组成的对象集合,一般这些对象是属于同一类的。当需要把消息同时发送给多个对象而不是单个对象时,就要用多对象这个概念。多对象用多个方框的重叠表示。,1.对象 对象这个概念前面已经多次提到,这里主要强调多对象和主动对象。,协作图的符号(续),多对象的例子 一个对象可能会向同一类的多个对象同时发送一个消息,例如,老师会让多个学生同时交作业。在多对象前面可以加上用方括号括起来的条件,前面加一个星号,用来说明消息发送给多个对象,如下图所示。,协作图的符号(续),主动对象 主动对象是一组属性和一组方法的封装体,其中至少有一个方法不需要接受消息就能主动执行(称做主动方法)。也就是说,主动对象可以在不接受外部消息的情况下自己开始一个控制流。在协作图中,主动对象的表示法除了矩形框边界要加黑加重外,其他方面与一般对象的表示法相同。,协作图的符号(续),2.链,链用来在协作图中关联对象。它们代表一个来自类图的关联的实例。在协作图中,消息显示在链的旁边,一个链上可以有多个消息。在链上可以加一些修饰,如角色名、导航(表示链是双向还是单向)、链两端的对象是否有聚集关系等,但由于链是连接对象的,所以链的两端没有多重性标记。,顺序图顺序图的定义顺序图的符号顺序图的消息顺序图的其他技术帧化顺序图顺序图的建模方法协作图协作图的定义协作图的符号协作图的消息协作图的建模方法,第四章 顺序图和协作图,协作图的符号(续),3.消息,消息是协作图中对象与对象之间通信的方式。消息在协作图中显示为一个伴随链接或者关联角色的文本字符串,并带有一个箭头来指示消息沿着关系传递的方向,如下图所示。,协作图的符号(续),消息还可传递变量或者参数下例说明了对象Teacher 如何把消息AssignGrade传递给对象Student,它使用了参数 Class、Assignment和Grade,如下图所示。,协作图的符号(续),消息的返回结果 消息可能是要求某个对象进行计算并返回结果的值.UML提供了返回值的表示法。返回值的名字在最左,后跟赋值号“:”,接着是操作名和操作的参数。对计算商品价格这个例子,可以表示成:totalPrice:compute(itemPrice,salesTax),返回值,协作图的符号(续),3.1消息的种类,协作图中有3种类型的消息,它们与前面介绍顺序图时的消息类型相同:同步消息 用于对象同步通信,即对象通信在继续 下一步之前必须完成前一步。异步消息 用于对象异步通信。简单消息 指示消息类型是同步或异步对于模型不 重要。,协作图的符号(续),3.2 消息的序列化 要想序列化消息,只需在消息前添加序列ID号。最简单的方法就是把消息按照要执行的顺序排序,如下图所示。,协作图的符号(续),协作图的符号(续),上图不仅显示了3个从Class对象到Filesystem对象的消息,而且还对它们进行了编号。这里使用了修订编号。在这个协作图中的顺序编号是1,1.1,1.2,1.3,2。1 Teacher对象把LoadClass(Name)消息发送至Class对象。1.1 Class对象把 LoadStudents()消息发送至 Filesystem对象。1.2 Class对象把LoadClassInfo()消息发送至Filesystem对象。1.3 Class对象把LoadRoom()消息发送至Filesystem对象。2 Teacher对象把 Addstudent(Name)消息发送到 Student对象。,练习:比较顺序图与协作图 在这个练习中,将通过对ATM机取款用例的行为描述,比较顺序图与协作图。例如,客户Joe从ATM机提取20美金的场景。,顺序图顺序图的定义顺序图的符号顺序图的消息顺序图的其他技术帧化顺序图顺序图的建模方法协作图协作图的定义协作图的符号协作图的消息协作图的建模方法,第四章 顺序图和协作图,协作图的建模方法,协作图的建模有3个基本的步骤:1)确定属于协作图的元素。2)建模这些元素之间的结构关系。3)建模实例层的协作图。建模分数记录系统的协作图。具体用例是Teacher使用 Website登录并且查看学生的分数。,协作图的建模方法,1.确定协作图的元素 首先,确定协作图中将会包含的元素或者类。从已经描述的用例中可以确定需要Teacher、Student和Grade类,其他类是否需要不太清楚。对于分数记录系统,我们需要一个Website类来提供进行交互的场所。还需要一个Database 类来提供为学生检索信息的功能。最后,还需要一个Security类提供让Teacher登录系统的手段,如下图所示。,协作图的建模方法,分数记录系统中的类,Teacher 类如何与Student类交互?Student类从哪里获取其数据?Teacher类如何登录系统?通过这些问题和其他问题,我们就会认识到需要更多的类才能完成目标。,:Teacher,:Student,:Grade,:Security,:Database,:Website,协作图的建模方法,2建模类之间关系 下一步就是确定这些类之间的关系。在这一步中,着手建模早期阶段的协作图,在类角色之间添加链接和关联角色,如下图所示。,协作图的建模方法,协作图的建模方法,3.建模实例层协作图 最后一步就是在实例层建模协作图。这意味着需要把类角色修改为对象实例,并且指定执行用例的消息序列。这一步需要用到描述对象之间链接的消息标记符,包括控制点、迭代、创建实例,以及特定消息类型的规范。,协作图的建模方法,协作图的建模方法,练习:建模储户在ATM机上存钱操作的协作图。,1、确定系统中的类,协作图的建模方法,2、确定类之间关系,3、对象实例之间协作关系,