第四章交互图.docx
《第四章交互图.docx》由会员分享,可在线阅读,更多相关《第四章交互图.docx(18页珍藏版)》请在冰豆网上搜索。
第四章交互图
第四章交互图
用况图和类图主要用于建立需求模型和基本模型,对于较为复杂的系统仅建立这两种模型是不够的,还需从其他方面对系统建模,用以针对基本模型进行辅助描述。
交互图是用来描述对象之间以及对象与参与者之间的动作协作关系以及协作过程中行为次序的的图形文档。
它通常用来描述一个用例的行为,显示该用例中所涉及的对象和这些对象之间的消息传递情况。
交互图包括顺序图和协作图两种形式。
顺序图着重描述对象按照时间顺序的信息交换,协作图着重描述系统成分如何协同工作。
它们从不同角度表达了系统中的交互和系统的行为。
它们之间可以相互转换。
需要强调的事交换图描述的事对象之间的消息发送关系,而不是类之间的关系。
在交互中一般不会包括系统中所有类的对象,但同一个类的可以有多个对象出现在交互图中。
本章主要介绍顺序图和协作图的概念和表示法,如何从需求分析入手建立顺序图和协作图,以及它们的区别。
最后从结合实例,介绍如何绘制顺序图和协作图。
4.1顺序图
4.1.1顺序图概述
顺序图(SequenceDiagram)是一种详细表示对象之间以及对象与系统外部的参与者之间动态联系的图形文档,它是由一组相互协作的对象和参与者以及它们之间可发送的消息组成,它强调消息之间的顺序。
顺序图用来表示用例中的行为顺序。
当执行一个用例行为时,顺序图中的每条消息对应了一个类操作或状态机中引起转换的事件。
顺序图展示对象之间的交互,这些交互是指在场景或用例的事件流中发生的。
顺序图属于动态建模。
顺序图的重点在消息序列上,也就是说,描述消息是如何在对象间发送和接收的。
表示了对象之间传送消息的时间顺序。
浏览顺序图的方法是:
从上到下查看对象间交换的消息。
图4-1所示的是一个顺序图。
图4-1顺序图示例
从图一中可以看出顺序图是二维的,其中:
垂直方向表示时间,水平方向表示不同的对象或参与者。
通常时间维由上到下(根据需要,也可以由下到上)。
通常只有时间顺序是重要的,但在实时应用中时间轴是能度量的。
对象的水平顺序并不重要,相应地生命线之间的顺序可以是任意的。
4.1.2顺序图的表示法
顺序图由对象(参与者)、消息、生命线和执行规约组成。
具体介绍参见如下表格。
事物名称
解释
图
参与者
与系统、子系统或类发生交互作用的外部用户(参见用例图定义)。
对象
(1)表示方法:
顺序图的横轴上是与序列有关的对象。
对象的表示方法是:
矩形框中写有对象或类名。
[对象名]:
类名
(2)图中水平方向的对象或参与者的顺序并不重要,它们的排列顺序也可以是任意的,通常把彼此之间存在消息的对象安排的比较近,以减少线条的交叉。
(3)在图中可以直接给出类名也可以使用匿名对象,只给出类名。
对象生命线
(1)表示:
坐标轴纵向的虚线表示对象在序列中的执行情况(即发送和接收的消息,对象的活动)这条虚线称为对象的“生命线”。
(2)生命线表示一个对象在特定的时间内存在。
生命线之间的箭头表示对象之间的消息。
(3)水平方向的对象,并不是处于一排,而是错落有致的。
图的顶部放置所有消息开始前就存在的对象。
如果对象被销毁,就用大的错号标记它。
(4)生命线可以分裂成两条或多条平行的生命线,生命线会在某个后续点合并。
消息符号
(1)消息用从一个对象的生命线到另一个对象生命线的箭头表示。
箭头以时间顺序在图中从上到下排列。
一个消息会调用另一个对象的操作,调用本对象的操作,向另一个对象发送一个信号,创建或者撤消一个对象(可以自己销毁自己),还可能向调用者返回一个结果。
(2)消息的执行可能引发这样的行为:
执行操作,发送信号或创建/消除对象
(3)UML1.4以后定义的消息可以分为调用消息(又称同步消息),异步消息,返回消息。
同步消息的发送者把控制传递给消息的接收者,然后停止活动,等待消息的接收者放弃或返回控制。
异步消息的发送者通过消息把信号传递给信息的接收者,然后继续自己的活动,不等待接收者返回消息或控制。
对于同步消息,因为消息的发送者要等待接收者传递的信号,所以需要返回消息。
同步消息和异步消息用实箭头表示,返回消息用虚箭头表示。
(4)如果需要表示收发消息间的时间差,有三种方法:
a)可以在图中使用约束,用于指示时间间隔。
可以用消息名和经过规定的函数书写计时表达式,如图4-2中所示的“b.receiveTime–a.sendTime<1分钟”。
b)若要在图中显式地表示时间差的数值,还可以通过构造标记来指明,如图4-2的右下角所示。
c)如果需要表示发送消息是需要时间的,还可把消息箭线向下倾斜,使箭线头部在尾部下方,表示消息需要一段时间到达。
执行规约
(1)表示用一个窄长的矩形表示执行规约。
矩形的顶端和操作的开始时刻对齐,矩形的末端和操作的结束时刻对齐。
(2)意义:
在顺序执行的情况下,一个执行规约表示一个对象中的一个操作以及该操作可能引发的一系列操作所活动的持续时间。
当一个对象处于执行规约期时,该对象能够响应或发送消息,执行对象或活动。
当一个对象不处于执行规约期时,该对象不做什么事情,但它是存在的,等待新的消息执行规约它。
(3)在一个对象的操作递归的调用自己或调用本对象的其他操作的情况下,第二个激活符号画在第一个符号稍微靠右的位置,在视觉上它们看起来像叠加一样。
信号
(1)对象之间异步通信的规格说明信号的格式为信号名(用逗号分隔的参数列表)参数的格式为参数名:
类型表达式
(2)信号在类图中通过符号<>声明的。
在属性分栏中把参数说明为属性,信号没有操作。
右图上图说明了信号的表示法以及信号的发送。
虚箭头不是消息,而是依赖。
(3)在对象交互中,用信号名作为异步消息名,如右下图所示。
表4-1顺序图的表示
图4-2消息时间差
上图描绘的是打电话的顺序图。
图中的两个对象s和r是由类“电话”创建的,类“交换机”的对象是匿名的。
首先拿起对象s的话筒,一个消息发给交换机的对象。
由于类“交换机”的对象很多要处理多部电话,因而它只要能在1分钟内向s发送消息即可。
s在30秒内拨完全部号码。
类“交换机”的对象按照号码调用自己的内部操作,在逻辑上连通线路(如检查号码是否有效等),然后创建会话对象c,用其管理具体的通话事宜。
c对象向r发消息,让r振铃。
拿起r的话筒,向c发出一个消息。
c响应这个消息后,请求交换机的对象把两个电话机物理地连通起来。
交换机的对象连通两个电话机后,c记录实际的通话情况。
在这张图中,对拨号时间超过30秒的情况没说明,其中的会话对象c也没有说明计费等情况,假设这些都在其他的顺序图中予以描述。
4.1.3顺序图的结构化控制
序列性的消息能很好地说明单一的线性的序列,但是我们通常需要展示条件和循环。
有时候我们想要展示多个序列的并行执行。
在顺序图中用结构化控制操作符能展示这种高层控制。
为了表示顺序图的边界,可以把顺序图用一个封闭的矩形包围起来,并在矩形的左上角放一个小五边形。
在这个小五边形内先写上sd,再后面写出图的名字。
对每个子顺序图加上一个矩形区域作为外框,再在其左上角放一个小五边形,在这个小五边形内写上用来表明控制操作符的类型的文字。
可选执行标签是opt。
如果控制进入该操作符标识的交互区域时监护条件成立,那么执行该交互区域。
监护条件是一个用方括号括起来的布尔表达式,它要出现在交互区域内部第一条生命线的顶端,在其中可以引用该对象的属性。
条件执行标签为alt。
用水平虚线把交互区域分割成几个分区,每个分区表示一个条件分支并有一个监护条件。
如果一个分区的监护条件为真,就执行这个分区,但最多只能执行一个分区。
如果有多于一个监护条件为真,那么选择哪个分区是不确定的。
若没有应对措施,在模型中要避免这种情况。
如果所有的监护条件都不为真,那么控制流将跨过这个交互区域而继续执行。
其中的一个分区可以用特殊的监护条件[else],这意味着如果其他所有区域的监护条件都为假,就执行该分区。
并行执行标签是par。
用水平虚线把交互区域分割为几个分区。
每个分区表示一个并发计算。
当控制进入交互区域时并发地执行所有的分区;在并行分区都执行完后,那么该并行操作符标识的交互区域也就执行完毕。
每个分区内的消息是顺序执行的。
需要指出的是,并发并不总是意味着物理上的同时执行。
并发其实是说两个动作没有协作关系,而且可按任意次序发生。
如果它们确实是独立的动作,那么它们还可以交叠。
循环(迭代)执行标签是loop。
在交互区域内的顶端给出一个监护条件。
只要在每次迭代之前监护条件成立,那么循环主体就会重复执行。
一旦在交互区域顶部的监护条件为假,控制就会跳出该交互区域。
图4-3带有结构化控制操作符的顺序图示例
上图展示了一个简化了的例子,其中有一些控制操作符。
用户启动这个序列。
第一个操作符是循环操作符,圆括号内的数字(1,3)表示循环执行的最少次数和最多次数。
因为最少是一次,所以在检测条件之前主体至少执行一次。
在循环内,用户输入密码,系统验证它。
只要密码不正确,那么该循环就会继续。
但是,如果超过了三次,那么无论如何循环都会结束。
下一个操作符是可选操作符。
如果密码是正确的,那么就执行这个操作符的主体;否则就跳过该顺序图后面的部分。
这个可选操作符的主体内还包括了一个并行操作符。
正如图中所表明的,操作符可以嵌套。
并行操作符有两个分区:
一个让用户输入帐号,另一个让用户输入数额。
因为这两个分区是并行的,所以没有规定应该按照什么次序输入这两者,按照什么次序输入都可以。
需要强调的是,并发并不总是意味着物理上的同时执行。
并发其实是说两个动作没有协作关系,而且可按任意次序发生。
如果它们确实是独立的动作,那么它们就可以交叠;而如果它们是顺序的动作,那么它们可以按任意的次序发生。
一旦并行操作符的两个动作都被执行过,那么该并行操作符也就执行完毕。
在可选操作符中的下一个动作是银行向给用户交付现金。
至此,顺序图执行完毕。
若顺序图很大,可以把其中的片段作为一个整体另外用顺序图画出,并在原顺序图中引用。
特别是,若有片段重复出现时,很有必要这样做。
为了引用,UML规定了一个符号ref,如图4-4所示。
图4-4是对图4-3的重新组织。
在图4-4中的“验证口令”处要对名为“验证口令”的顺序图进行引用,“验证口令”顺序图的内容同图4-3中的控制操作符loop标识的交互区域。
在图4-4中的“输入现金信息”处要对名为“输入现金信息”的顺序图进行引用,“输入现金信息”顺序图的内容同图4-3中的控制操作符par标识的交互区域。
图4-4嵌套的顺序图
4.1.4建立顺序图
一个顺序图用于描述一个交互场景。
若交互场景复杂(如有选择、并行、循环或有重复的交互片段),可使用结构化控制。
如下是建立顺序图时应遵循的策略:
◆按照当前交互的意图,如系统的一次执行,或者一组对象(包括参与者实例,以下不再明确地提及参与者实例)之间的协作,详细地审阅有关材料(如有关的用况),设置交互的语境,其中包括可能需要的那些对象。
◆通过识别对象在交互中扮演的角色,在顺序图的上部列出所选定的一组对象(应该给出其类名),并为每个对象设置生命线。
通常把发起交互的对象放在左边。
◆对于那些在交互期间要被创建和撤销的对象,在适当的时刻,用消息箭线显式地予以指明。
◆决定消息将怎样或以什么样的序列在对象之间传递。
通过首先发出消息的对象,看它需要哪些对象为它提供操作,它向那些对象提供操作。
追踪相关的对象,进一步做这种模拟,直到分析完与当前语境有关的全部对象。
如果一个对象的操作在某个执行点上应该向另一个对象发消息,则从这一点向后者画一条带箭头的直线,并在其上注明消息名。
用适当的箭头线区别各种消息。
◆在各对象下方的生命线上,按使用该对象操作的先后次序排列各个代表操作执行的棒形条(执行规约)。
若出于某种目的要简化顺序图,可不画棒型条,或者针对一个对象只用一个棒型条代表其上的所有操作的执行。
◆两个对象的操作执行如果属于同一个控制线程,则接收者操作的执行应在发送者发出消息之后开始,并在发送者结束之前结束。
不同控制线程之间的消息有可能在接收者的某个操作的执行过程中到达。
◆如果需要,也可以对对象所执行的操作的功能以及时间或空间约束进行描述。
◆如果需要,可使用结构化控制。
4.2协作图
4.2.1协作图的概念
协作图又称为通信图,是一种强调发送和接收消息的对象结构组织的图,用以展示围绕对象以及它们之间的连接器而组织的交互。
协作图是一种交互图,强调的是发送和接收消息的对象之间的组织结构,使用协作图来说明系统的动态情况。
协作图主要描述协作对象间的交互和链接,显示对象、对象间的链接以及对象间如何发送消息。
协作图可以表示类操作的实现。
4.2.2协作图的表示
协作图由对象,连接器,以及连接器上的消息构成,也可以有参与者实例
事物名称
解释
图
参与者
发出主动操作的对象,负责发送初始消息,启动一个操作。
对象
对象是类的实例,负责发送和接收消息,与顺序图中的符号相同,冒号前为对象名,冒号后为类名。
消息流
(由箭头和标签组成)
箭头指示消息的流向,从消息的发出者指向接收者。
标签对消息作说明,其中,顺序号指出消息的发生顺序,并且指明了消息的嵌套关系;冒号后面是消息的名字。
连接器
用线条来表示链接,链接表示两个对象共享一个消息,位于对象之间或参与者与对象之间
表4-2协作图的表示
下图是一个打印操作的协作图。
actor发送Print消息给Computer,Computer发送Print消息给PrintServer,如果打印机空闲,PrintServer发送Print消息给printer
图4-5协作图
4.2.3消息标签
消息标签的Format:
[前缀][守卫条件]序列表达式[返回值:
=]消息名
前缀的语法规则:
序列号,序列号,…,序列号‘/’
(前缀用来同步线程,意思是在发送当前消息之前指定序列号的消息被处理.)
守卫条件的语法规则:
[条件短句]
说明:
条件短句通常用伪代码或真正的程序语言来表示。
例:
[x>=0]
返回值和消息名:
返回值表示一个消息的返回结果,消息名指出了消息的名字和所需参数。
例:
x:
=calc(n)
下面是一个完整的消息标签:
1.1a,1.1b,1.1c/[x>=0]1.2*[i:
=1..n]:
x:
=calc(n)
前缀守卫条件序列表达式返回值:
=消息名
4.2.4建立协作图的步骤
设置交互的语境,不管它是一个系统、子系统、类,还是用况的脚本。
通过识别对象在交互中扮演的角色,设置交互的场所。
将它们作为图的顶点放在通讯图中,较重要的对象放在图的中央,然后放置邻近的对象。
若对象之间可能要传递消息,说明对象之间的连接器。
从引起这个交互的消息开始,然后将随后的每个消息附到适当的连接器上,恰切地设置其顺序号。
并用带小数点的编号来显示嵌套。
如果需要展示消息的循环或分支,就是使用相应的表示法。
如果需要说明时间或空间约束,则用时间标记修饰每个消息,并附上合适的时间和空间约束
4.3顺序图和协作图的比较
协作图和顺序图都表示出了对象间的交互作用,但是它们侧重点不同。
1)顺序图清楚地表示了交互作用中的时间顺序(强调时间),但没有明确表示对象间的关系。
2)协作图清楚地表示了对象间的关系(强调空间),但时间顺序必须从顺序号获得。
顺序图强调消息的时间顺序,协作图强调参与交互对象的组织结构。
虽然侧重点不同,但它们有着共同的特点。
1)规定责任,二者均直观地规定了发送对象和接收对象的责任.
2)支持消息,二者均支持所有的消息类型.
3)衡量工具,二者均是衡量耦合性的工具.
顺序图和协作图之间可以相互转换,如下图所示。
图4-6相互转换之顺序图
图4-7相互转换之协作图
✧
4.4案例分析
4.4.1用户登录案例分析
1)输入用户名
2)输入密码
3)按回车键,或者点击那可以发送登录请求的按钮
4)如果用户名错或密码错,系统将拒绝登录并保留原页面
5)如果用户名或密码都正确,系统进入下一个正确的页面
.因此,一个用户在这个用例中将处理三个对象,它们中的两个是GUI
对象:
登录页面(GUI),系统数据库,下一页面(GUI),协作图和顺序图如下
图4-8用户登录协作图
图4-9用户登录顺序图