第 4章
顺序图和协作图
(sequence diagram &
collaboration diagram)
制作 龙鹏飞
1.交互图 (interaction diagram)
交互图
顺序图
协作图用来描述对象之间以及对象与参
与者之间的 动态
协作关系以及协
作过程中行为次
序 的图形文档。
通常用来描述一个用例的行为,
显示该用例中所涉及的对象和这
些对象之间的消息传递情况。
是 强调消息的时间次序 的交
互图。
它显示了一组对象和由这组
对象发送和接收的消息。
是 强调收发消息的对象的结构
组织 的交互图。
它显示了一组对象、这组对象
间的链以及这组收发的消息。
制作 龙鹏飞
2.顺序图
顺序图是一个二维图形。
水平方向为对象维,排列的是对象。对象的排列
次序不重要,但一般将主要的对象靠左,参与者
排在两端。
垂直方向为时间维,沿垂直向下方向按时间递增
顺序列出各对象所发出的和接收的消息。
制作 龙鹏飞
顺序图
顺序图建模元素:
对象 (object)
生命线 (life line)
控制焦点 (focus of
control,激活棒 )
消息 (message)
o b j e c t N a m e, c l a s s N a m e
, c l a s s N a m e
o b j e c t N a m e
制作 龙鹏飞
顺序图
顺序图建模元素:
对象 (object)
生命线 (life line)
控制焦点 (focus of
control,激活棒 )
消息 (message)
o b j e c t N a m e, c l a s s N a m e
, c l a s s N a m e
o b j e c t N a m e对象
生命线
制作 龙鹏飞
顺序图
激活棒
o b j e c t N a m e, c l a s s N a m e, c l a s s N a m e 1
o p ( )
消息
制作 龙鹏飞
3.消息(调用消息、异步消息、返回消息等)
1、调用消息:
调用( Procedure call)消息的发送者把控制
传递给消息的接收者,然后停止活动,等待消息
接收者放弃或返回控制。
调用消息可以用来表示同步的( synchronous )意
义,在 UML早期版本中,采用“同步消息”这个
术语。
制作 龙鹏飞
3.消息 o b j e c t N a m e, c l a s s N a m e, c l a s s N a m e 1
o p ( )
制作 龙鹏飞
3.消息
2、异步消息:
异步( asynchronous)消息的发送者通过消息
把信号传递给消息的接收者,然后继续自己的活
动,不等待接收者返回消息或控制。
异步消息的接收者和发送者并发工作。
制作 龙鹏飞
3.消息 o b j e c t N a m e, c l a s s N a m e, c l a s s N a m e 1
o p 1
o p 2
制作 龙鹏飞
3.消息
3、返回消息:
返回( return)消息表示从过程调用返回。
如果是从过程调用返回,则返回消息是隐含的,
所以返回消息可以不用画出来。
对于非过程调用如果有返回消息,必须明确表
示出来。
制作 龙鹏飞
3.消息
o b j e c t N a m e, c l a s s N a m e, c l a s s N a m e 1
o p 2
r e s p o n s e o p 2
制作 龙鹏飞
3.消息
4、阻止消息和超时消息:
Rose还对消息类型做了扩充,增加了阻止消
息和超时消息。
阻止消息是指消息发送者发出消息给接收者,
如果接收者无法立即接收消息,则发送者放弃这
个消息。
超时消息是指消息发送者发出消息给接收者并
按指定时间等待.如果接收者无法在指定时间内
接收消息,则发送者放弃这个消息。
制作 龙鹏飞
3.消息
5、消息格式:
[predecessor][guard-condition][squence-expression]
[return-value,= ]message-name([argument-list])
[predecessor]
必须先发生的消息的列表。
形式:消息号,..,/
如,1,2,5,A3/
制作 龙鹏飞
3.消息
5、消息格式:
[predecessor][guard-condition][squence-expression]
[return-value,= ]message-name([argument-list])
[guard-condition]
警戒条件,只有在 条件中布尔表达式为真时,消息才发送。
形式,[boolean-expression]
如,[x<0]
制作 龙鹏飞
3.消息
5、消息格式:
[predecessor][guard-condition][squence-expression]
[return-value,= ]message-name([argument-list])
[squence-expression]
消息顺序表达式。消息顺序表达式是用句点分隔(以表示消息的
嵌套),以冒号结束的消息顺序项列表。
形式,sequence-term....:
sequence-term的形式:
[integer|name][recurrence]
integer表示消息序号,name 表示并发的控制线程或消息。如
3.1a,3.1b表示两个消息是并发的。 recurrence表示消息是条件执行
或循环执行,有几种形式:
1) *[||][[循环子句 ]]
2) [条件子句 ]
例( recurrence ),
① *[i=1 to n] ② *||[i=1 to 3] ③ [x>y] ④ [!x]
例( sequence-term ):
① 3*[i=1 to n] ② 3*||[i=1 to 3] ③ 3[x>y]
例:① 1.1.3,② 1.3.1*[i=1 to n],③ 3[x>y] ④ 8
制作 龙鹏飞
3.消息
5、消息格式:
[predecessor][guard-condition][squence-expression]
[return-value,= ]message-name([argument-list])
[return-value:=] 若消息有返回值,则 return-value为保存返回值的
变量名。
message-name 为消息的名字。
[argument-list] 消息的参数列表。
如:① v:=op() ② op() ③ v=op(x,y) ④ v:=op(x,y)
制作 龙鹏飞
3.消息
5、消息格式:
[predecessor][guard-condition][squence-expression]
[return-value,= ]message-name([argument-list])
完整消息例子:
① 2:display(x,y) 简单消息
② 1.3.1:p:=find(s) 嵌套消息
③ [x>y]4:invert(x,color) 带警戒条件的消息
④ 3.1*:update() 消息是循环发送的
⑤ A3,B4/C2:copy(a,b) 发送线程 C的第 2个消息前,必须先
发送线程 A的第 3个消息和线程 B的第 2个
消息。
制作 龙鹏飞
4.建立顺序图的步骤
参考步骤:
( 1)确定交互过程的上下文( context)。
( 2)识别参与交互过程的对象。
( 3)为每个对象设置生命线,即确定哪些对象存在于整个
交互过程中,哪些对象在交互过程中被创建和撤销。
( 4)从引发这个交互过程的初始消息开始,在生命线之间
自顶向下依次画出随后的各个消息。
( 5)如果需要表示消息的嵌套,或/和表示消息发生时的
时间点,则采用控制焦点。
( 6)如果需要说明时间约束规在消息旁边加上约束说明。
( 7)如果需要,可以为每个消息附上前置条件和后置条件。
制作 龙鹏飞
5.协作图
协作图是用于描述系统的行为是如何由系统的
成分协作实现的图。
协作图中包括的建模元素有对象(包括参与者
实例、多对象、主动对象等)、消息、链等。
制作 龙鹏飞
制作 龙鹏飞
5.协作图
, c l a s s N a m e, c l a s s N a m e 1
3, 1, o p ( )
o b j 4
o b j 3
3
:
N
o
t
i
f
y
(
)
6.建立协作图的步骤
参考步骤:
( 1)确定交互过程的上下文( context)。
( 2)识别参与交互过程的对象。
( 3)如果需要,为每个对象设置初始特性。
( 4)确定对象之间的链( link),以及沿着链的消息。
( 5)从引发这个交互过程的初始消息开始,将随后的每个消息附到
相应的链上。
( 6)如果需要表示消息的嵌套,则用 Dewey十进制数表示法。
( 7)如果需要说明时间约束,则在消息旁边加上约束说明。
( 8)如果需要,可以为每个消息附上前置条件和后置条件。
制作 龙鹏飞
7.顺序图与协作图的比较
顺序图和协作图都属于交互图,都用于描述系统中对象之间的动
态关系.两者可以相互转换,但两者强调的重点不同。
顺序图强调的是消息的时间顺序,而协作图强调的是满交互的对
象的组织。
在两个图所使用的建模元素上,两者也有各自的特点。顺序图中
有对象生命线和控制焦点,协作图中没有;协作图中有路径,并且
协作图中的消息必须有消息顺序号,但顺序图中没有这两个特征。
和协作图相比,顺序图在表示算法、对象的生命期、具有多线程
特征的对象等方面相对来说更容易一些,但在表示并发控制流方面
会困难一些。
顺序图和协作图在语义上是等价的,两者之间可以相互转换,但
两者并不能完全相互代替。
制作 龙鹏飞
8.常见问题分析
1)如何在顺序图中表示消息的循环发送?
制作 龙鹏飞
o b j e c t N a m e, c l a s s N a m e, c l a s s N a m e 1
1, 1 * [ i, = 1,, n ], o p ( )
8.常见问题分析
2)如何在顺序图中表示消息的条件发送?
①在消息加警戒条件
②在消息名前加条件子句
③使用文字说明
④分成多个顺序图(每分支一图)
制作 龙鹏飞
o b j e c t N a m e, c l a s s N a m e, c l a s s N a m e 1
3, 2 [ b l = = f a l s e ], N o t i f y ( )
[ b l = = t r u e ] 3, 1, o p ( )
8.常见问题分析
3)如何在顺序图中表示时间约束?
制作 龙鹏飞
o b j e c t N a m e, c l a s s N a m e, c l a s s N a m e 1
3, 2, S e n d ( )
3, 1, S e n d ( )
{ a }
{ b }
{ b - a < 2 s }
8.常见问题分析
4)如何在顺序图中表示方法的递归?
制作 龙鹏飞
o b j 1
o b j 2
o p ( )
o p ( )
, c l a s s N a m e
, c l a s s N a m e 1
o p e r 1 ( )
, C l a s s 1
o p e r 2 ( )
o p e r 1 ( )
自身递归 间接递归
8.常见问题分析
5)顺序图中的对象如何确定?
顺序图中对象的需要参考类图,类图中类的确定又也要
参考顺序图,二者之间是相互补充与协调的关系。
分析阶段:顺序图 —— 粗,消息为类或接口的操作。
设计阶段:顺序图 —— 细,消息为类的方法。
制作 龙鹏飞
8.常见问题分析
6)交互图中如果对象具有多态性,发送对象不可能事
先知道目标对象属于哪个类,因此应确定目标对象属于哪
个类?
如果一个消息(操作)在具有同族(继承体系)类的接
受者(目标对象)的行为不同,则该消息(操作)具有多
态性。
目标对象应该属于具有该多态操作的顶层类。
制作 龙鹏飞
8.常见问题分析
7)如何在交互图中表示广播消息?
可以用版型 <<broadcast>>或约束 {broadcast}来表示广
播消息。
制作 龙鹏飞
o b j 3
3, N o t i f y
{ b r o a d c a s t }
, c l a s s N a m e 1
8.常见问题分析
8)如何在交互图中表示创建一个对象?
可以用名为 create的消息来创建一对象。
制作 龙鹏飞
1, C r e a t e
, c l a s s N a m e 1
< < C r e a t e > >
, c l a s s N a m e 1
制作 龙鹏飞
时序图
c, Cl i ent
, Tra n sac ti on
p, OD B CPr ox y
<<C rea t e>>
set Act i ons (a,d,o)
set Val u es( d,3.4 )
set Val u es( a,"CO ")
<<D est o ry> >
制作 龙鹏飞
协作图
c, Cli ent
, Tran sact ion p, ODB CPro xy
1,<<cr eate >>
2,setA ctio ns(a,d,o)
6,<<de stro ry>>
5,comm itte d
3,setV alue s(d,3,4)
4,setV alue s(a," CO")