交互图定义交互图(InteractionDiagram)是一组模型图的统称,是用来描述对象之间的关系和对象之间的信息传递的图。通常用来描述一个用例的行为,实现一个用例或用例的一部分,从而完成对系统的动态行为建模。
交互图类型
用例图是一种动态图,可以描述整个系统的功能需求(系统中有哪些参与者、包括哪些功能、参与者可以使用哪些用例);
类图是一种静态图,可以描述整个系统的功能是由哪些类来完成的。
顺序图(SequenceDiagram)是用于描述一组对象及其协作过程的模型图,也称序列图。
注意:.
组成顺序图主要由对象,生命线,激活,消息组成。对象之间通过传递消息的方式来发生交互。注意:交互是一种行为事物,不是关系。
细化用例的表达。(最常用)使用顺序图的主要用途,就是将用例所表达的需求与功能转化为更加正式、更加分明的细化表达。用例常常被细化为一个或更多的顺序图。
有效地描述如何分配各个类的职责。可以根据顺序图中各对象之间的交互关系和发送的消息来进一步明确对象所属类的职责。
例如,Borrower对象向SearchBookWindow对象请求查找图书,指出SearchBookWindow对象应该具有“查找图书”这个职责。
组成顺序图主要由以下元素组成:
对象之间通过传递消息的方式来发生交互。
顺序图中的对象(Object),可以是系统参与者或任何有效的系统对象。
分类
表示:名字下面加下划线因为顺序图不可能出现类,因此在顺序图可以不加下划线三种命名形式:
注意:顺序图中可以使用参与者<
对象与生命线结合在一起称为对象的生命线。
注意:生命线不能单独存在,必须和对象一起存在,对象创建之后,生命线即开始。。
激活也称为控制焦点FocusofControl,UML2中改称为执行规约ExecutionSpecification。
是对象操作的执行,表明对象正在进行交互(正在完成某个任务或正被占用)。它表示一个对象直接或通过从属操作完成操作的过程。
是从一个对象(发送者)向另一个或几个其他对象(接收者)发送信号,或由一个对象(发送者或调用者)调用另一个对象(接收者)的操作。
生命线之间带箭头的线段代表对象间的消息传递。
消息涉及以下三个概念:发送者:发出消息的类元角色。接收者:接收到消息的类元角色。活动:消息传递时产生的局部操作或原始动作(创建、销毁)等。
注意:
顺序图中消息的编号,可以采用两种形式:
顺序编号按照消息的先后顺序:从1开始对消息编号,后边依次是2、3、4……。
嵌套编号嵌套编号表示了操作间的包含关系,分层次编号,把属于同一个对象发送和接收的消息放在同一层进行编号。
注意
U免费版中,可以通过菜单Tools→Options命令,在打开对话框的Diagram选项卡中,设置是否选择ShowSequencenumber复选框。SU商业版中,可以通过图的属性窗口设置是否选择showSequenceNumber复选框。
消息的名称,可以简单,也可以复杂。
最简单的消息只有一个简单消息名,例如“查找图书”。而复杂消息传递的信息比较多,消息名称通常具有如下语法格式:$$[守卫条件][序列表达式][返回值:=]消息名[(参数列表)]$$
守卫条件(guard-condition)
作用:只有消息满足守卫消息时,消息才可能执行。(类似代码中的if)
形式:[条件短语](中括号不可省略)条件短语通常用伪代码或程序语言来表示,UML并不规定其语法。
例如,2:[x<0]invert(x,y)
序列表达式(sequence-expression)作用:表示一个循环或选择的执行。
两种形式:
例如:3:*[x=1..10]Update()4:[ifIdnotexists]Create(Id)
调用操作(返回值,参数列表)形式:[返回值:=]消息名[(参数列表)]消息经常是调用对象的某个操作,而操作可能具有参数和返回值,例如:6:display()——无参数、无返回值7:p:=find(s)——带参数和返回值
顺序图的消息可以分为多种类型,由不同形式的带箭头的线段表示。
不同的建模工具,支持的消息类型有所不同。SU免费版支持以下五种,商业版支持六种,多了异步消息
简单消息表示控制流,可以泛指任何交互。一般在不关心消息类型或不确定消息类型时使用。
在顺序图建模初期,可以先用简单消息表示所有消息,后期再根据情况确定消息的类型。
调用消息调用消息表示发送者调用某个对象的一个操作。通常格式为“对象名.操作名”。分类
返回消息返回消息表示接收者向发送者返回一个值。注意
同步消息同步消息的发送者通过消息把信号传递给接收者后,必须等到接收者返回消息,才能继续后续活动。
异步消息异步消息的发送者通过消息把信号传递给接收者后,就继续自己的活动,不等待接收者返回消息。
阻止消息阻止消息指发送者发出消息给接收者,如果接收者无法立即接收这个消息,则发送者放弃这个消息。
主要是以下四点:
实现方式
销毁对象销毁对象是指发送者通过发送消息的方式将对象销毁,并回收其拥有的资源。
销毁对象表示对象生命线的结束,在对象生命线中使用一个“×”来进行标识。实现方式
注意:Rose对顺序图的分支没有明显的支持,一般只要画出主要分支的过程即可。StarUML和VisualParadigm支持顺序图的分支。
分支分支是指从同一点发出的多条消息指向不同的对象。
分类:根据消息是否互斥,分支分为两种结构:条件和并行
注意:Rose对循环没有明显的支持,一般通过在第一条消息前添加标签来描述多条消息的循环过程。VisualParadigm、StarUML通过片段符号来支持多条消息的循环。关于片段,以后再做介绍。
循环
循环用于强调需要重复执行一条消息或多条消息,有多种表示方式。分类及实现
Rose和SU不支持消息延迟,VP通过“期间消息”支持。
从属流是指从同一点发出多个消息,指向同一对象的不同生命线,即可以创建对象的生命线分支。
Rose和SU不支持从属流,VP支持。
框架:实现顺序图的重用(不要求)片段:加强顺序图的结构化控制(掌握)
片段更常用
Rose不支持框架,VisualParadigm和StarUML支持。
在UML2中,增加了“框架”符号,对UML图形进行扩充。
框架(Frame),也称为帧,借助于框架,可以将顺序图进行帧化。
用途帧化类型比较常见的是顺序图和通信图。
框架的作用:
顺序图一旦被包含在一个框架中,就可以被放在另外的框架或图中,从而实现顺序图的重用。
框架经常用于分解大型的顺序图,之后在总图中引用各个部分。
帧化的方法使用户能够在一个顺序图中快速方便地重用另一个顺序图的内容。
表示:帧化顺序图:把顺序图用一个矩形框包围起来,并在矩形的左上角添加一个五边形的间隔区。
交互事件把带有标记的框架(帧)插入到一个新图中,就可以实现重用,这个特定的帧化的部分叫做交互事件。
交互事件是交互片断的一种特殊情况,它的操作符是ref。
Rose不支持片段,VisualParadigm和StarUML支持。
在UML1中,顺序图十分不擅长表示循环和分支。UML2提供了“片段”机制,加强顺序图的结构化控制,使得顺序图可以表达更加复杂的交互。
片段,全称交互片断(InteractionFragment)是UML2中对一个顺序图的某一段的一般称呼。用于表示比较复杂的交互。
片段表示为顺序图中的一个矩形框,
左上角有一个写在小五边形内的标签,来表明控制操作符的类型。控制操作符表示了不同的片段类型。每个片段都有一个操作符,操作符决定了交互片段的执行方式。标签内可以写名字
一个片段可以包含多个区域,区域间用区域分割符分割,每个区域拥有一个监护条件和复合语句。
片段中可以包含任意数目的交互,还可以包含嵌套片段。
常见片段类型
除了常用的ref、loop、break、alt、opt、par,还有assert、consider、ignore、seq、strict、neg、critical(或region)等不太常用的类型。
循环片段loop
loop操作符说明该片段将执行多次,而具体的次数由置于方括号内的循环次数和监护条件表达式来说明。
例如:loop(i<=10):表示while(i<=10)loop(10):表示执行10次loop(1,n):表示for(i=1;i<=n;i++)
中断片段break
break操作符定义一个含有监护条件的子片段。
选择片段alt
alt操作符表示一种多条件分支,根据监护条件,最多选择片段中的一个交互执行;类似于程序设计语言中的if…else或switch语句。