Page 1 ?
UML及软件建模
主讲人, 李 唯
clx7000@163.com
Page 2 ?
第九章 协作图 ( sequence
diagram)
什么时协作图
如何运用协作图
如何对主动对象、并发和同步建模
Page 3 ?
1、概述
与顺序图一样,协作图也展示对象之间的交互关系。它绘制出对象与对
象之间的消息连接。
顺序图与协作图很相似,实际上这两种图表达的是同一种信息,并且可
以将顺序图转换为等价的协作图,反之亦然。
顺序图和协作图虽然都可以表示各对象间的交互关系, 但它们的侧重点
不同 。 顺序图强调的是交互的时间顺序 。 协作图强调的是交互的语境与
参与交互的对象的整体组织 。
顺序图用消息的几何排列关系来表达消息的时间顺序, 各角色之间的相
关关系是隐含的 。 协作图用各个角色的几何排列图形来表示角色之间的
关系, 并用消息来说明这些关系 。
还可以从另外一个角度来看两种图的定义:顺序图按照时间顺序布图,
而协作图按照空间组织布图 。
在实际中可以根据需要选用这两种图 。
Page 4 ?
2,协作图 在 UML中的表示方法
对象图展示出对象和对象之间的静态关系。协作图是对象的扩展。协作图
除了展示出对象之间的关联,还显示出对象之间的消息传递。通常在协作
图中省略掉关联的名字,因为表示出关联的名字会使图变得混乱。
关联线附近的箭头线表示对象之间传递的消息,箭头指向消息接收对象。
消息名称和消息序号附在箭头线附近。消息的一般含义是触发接收消息的
对象执行它的一个操作。箭头的含义和顺序图中的一样。
:对象名 2:对象名 1
add()
协作图图符集
Page 5 ?
:对象名 2
上面说过,可以将顺序图转换为协作图。反过来也成立。因此在协
作图中也应能表示出消息的顺序。可以在消息名前面加上消息的序
号,它代表该消息在消息序列中的序号。消息名和序号之间用冒号
隔开。
:对象名 1
:对象名 3
Page 6 ?
3、协作图和顺序图的比较
下面我们来绘制一张对象图来对类的实例建模,这张图协作图的基础。
:汽车
:遥控车钥匙
:车主
对类的实例建模的对象图
3.1、协作图和顺序图的基础--类图示例
Page 7 ?
:汽车
:遥控车钥匙
:车主
4,blinkLights
3.2、协作图示例
5,beep
[b=“lock”]
3,lock
对对象间消息建模得到的协作图
Page 8 ?
3.3、顺序图示例
:车主,遥控车钥匙,汽车
1,getButtonPress( b)
2,processKeyMessage( b)
4,blinkLights
5,beep
[b=“lock”]
3,lock
和协作图等价的顺序图
Page 9 ?
3.4、状态变化和消息的嵌套
假设汽车有一个 Locked属性,其值可以是 True或 False。你可以假设汽
车有两个状态,分别是 Locked和 Unlocked,如图所示。
Unlocked
Locked
Lock MessageUnlock Message
对汽车的 Locked和 Unlocked状态建模
Page 10 ?
我们能够在协作图中表示状态的变化。在本例中,我们在一个 汽车 对象
中给出 locked值。然后,我们复制一个带有不同 locked值的 汽车 对象。把
这两个对象连接起来,再表示出从第一个对象到第二个对象的消息。用
关键字, become,标示出这条消息。
这个例子是我们有机会来体验和协作图相关的另一个概念,使用数字系
统来表示消息之间的某些关系。到目前为止,我们已见过按顺序出现的
消息,其实消息也可能以嵌套的形式出现。你可以这样对嵌套消息编号
:首先是它所嵌入其中的消息的号码,然后是一个小数点,然后是被嵌
套的消息的号码。下图展示了状态变化和消息嵌套。
Page 11 ?
:汽车
:遥控车钥匙
:车主
:汽车
[b=“lock”]
3,lock
3.1, become》
对协作图中的状态变化建模
Page 12 ?
4、其它概念
Page 13 ?
4,1、发送给多对象的消息
一个对象可能会向同一个类的多个对象同时发送一个消息。例如老师会
让多个学生同时交作业。在协作图中,多对象( multiple object)用“一
叠向后延伸的多个对象图标”来表示。在多对象前面可以加上用方括号
括起来的条件,前面加一个星号,用来说明消息发送给多个对象。
:学生:老师
*[all] 1:交作业()
一个对象对多个对象发送消息
Page 14 ?
有时按顺序发送消息是很重要的。例如,银行出纳员( bank clerk)要按
照顾客排队的次序为每名顾客( customer)服务。可以用,while”条件表
达出消息的顺序(例如 line position=1…n )。
:顾客:银行出纳员
*[line position= 1…n] 1,服务()
一个对象以指定的次序对多个对象发送消息
Page 15 ?
4,2、返回结果
? 消息可能是要求某个对象进行计算并返回结果的值 。例如一个顾客对
象可能请求一个计算器( calculator)对象计算某项商品的总价,包括
该项商品的价格和税款。
? UML提供了返回值的表示法。返回值的名字在最左,后跟赋值号“:
=”.接着是操作名和操作参数。对计算商品价格这个例子,可以表示成
,totalPrice:=compute(itemPrice,salesTax)。下图说明了在协作图中返
回值的表示法。
? 表达式中赋值号的右边部分被称为消息构型( message signature),
:计算器:顾客
1,totalPrice:=compute( a,b)
一个包含返回值表示法的协作图
Page 16 ?
? 在一些交互中,控制流是由一个特定的对象控制的。这样的对象叫做
主动对象( active object)。一个主动对象可以向被动对象发送消息也
可以与其他主动对象交互。
? 两个或者多个主动对象同时工作时的情形被称为开发( concurrency)

? 在协作图中,主动对象的表示法除了矩形边界要加黑加重外,其他方
面与一般对象的表示法相同。
4,3、主动对象
Page 17 ?
在图书馆的管理中。图书管理员( librarian)从主顾 (patron)那里获得参考资料的
信息,然后到数据库里查找这些参考资料,然后回复主顾提出的问题,指派工人
( worker)进新书,一个图书馆管理员也要和执行相同任务的其他图书管理员交
互。
:工人 1
:图书管理员
4:进新书()
主动对象控制消息系列
:工人 2
:主顾
Page 18 ?
4,4、同步
有时遇到的另一种情况是一个对象只能等到其他一些对象发送了消息(可能
是不连续的发送消息)后才能发送消息。也就是说,这个对象必须要“同步
“自己发送的消息与其他对象发送的消息。
下面的例子将说明什么是同步。假设这里的对象是一个公司里参与新产品的
商业活动的人员。如下这些对象的交互序列:
1、高级市场经理要求策划部经理为某一新产品制定一份促销计划。
2、策划部经理制定了一份促销计划,并通知销售主管将这个任务指派给一个
销售员。
3、销售主管要求一个销售员根据销售计划销售产品。
4、销售员与几位可能购买新产品的顾客通电话,向他们推销。
5、在销售主管根据计划要求销售员执行后(也就是步骤 3结束后),公司的
对外事务专员在当地的一家报纸上发布了关于这次促销的广告。
Page 19 ?
如何在顺序图中表示步骤 5呢? UML同样为同步提供了表示法。不是在消息前加
序号来表示同步,而是在需要同步的消息之前列出在这个消息之前要传递的消息
序号,然后加上一个反斜杠。
:销售主管
:高级市场经理
1:制定促销计划()
协作图中的消息同步
:策划部经理
:销售员:顾客
:对外事务专员
:报纸 4:希望买产品
3/登广告()
Page 20 ?
5、小结
? 协作图是表达顺序图中所有信息的另一种 UML图。协作图和顺序图是
语义等价的。顺序图按照时间组织,协作图按照对象之间的联系。
? 协作图展示了对象和对象之间的关联,还展示了对象之间的消息传递
。关联线旁的消息箭头代表一个消息,带有编号的标签显示出消息的
内容,消息前的序号代表消息发送的时间顺序。
? 条件的表示与在顺序图中相同 ——将条件表达式用方括号括起来加在
图中。
? 消息之间有从属关系。协作图的消息序号命名方案与技术文章中的标
题和子标题的命令类似 ——使用圆点来说明嵌套的层次。
? 协作图中可以表示出一个对象按照指定的次序(或无次序)向一组对
象发送消息。还可以表示拥有消息控制流的主动对象,以及消息之间
的同步。