8.3.5 协作图
和序列图相似,显示对象间的动态合作关系。可以看成是类图和顺序图的交集,协作图建模对象或者角色,以及它们彼此之间是如何通信的。如果强调时间和顺序,则使用序列图;如果强调上下级关系,则选择协作图;这两种图合称为交互图。
(1)协作图概述。协作图用于描述互相合作的对象间的交互关系和链接关系。虽然顺序图和协作图都用来描述对象间的交互关系,但是侧重点不一样。顺序图着重体系交互的时间顺序,协作图则着重体现交互对象间的动态连接关系。
(2)协作图组成。协作图包含了三个元素,即对象(Object)、链(Link)、消息(Message)。
1)对象。对象和对象图中的对象一致。
2)链。协作图中链的符号和对象图中链所用的符号是一样的,即一条连接两个类角色的实线表示。链接用来在协作图中关联对象,链接的目的是让消息在不同系统对象之间传递。没有链接,两个系统对象之间无法彼此交互。
3)消息。是协作图中对象与对象之间通信的方式。消息在协作图中显示为一个伴随链接或者关联角色的文本字符串,并带有一个箭头来指示消息沿着关系传递的方向。如图8.42所示。
时序图与协作图都表示对象之间的交互作用,只是它们的侧重点有所不同:时序图描述了交互过程中的时间顺序,但没有明确地表达对象之间的关系;协作图描述了对象之间的关系,但时间顺序必须从顺序号获得。

图8.42 协作图
(3)建立协作图
1)建立协作图的步骤如下。
①确定交互过程的上下文
②识别参与交互过程的对象
③如果需要,为每个对象设置初始特性
④确定对象之间的链,及沿着链的消息
2)需求分析描述如下。
①张老师希望通过系统查询某名学生的学科成绩。
②张老师通过用户界面录入学生的学号以及学科科目请求学生信息。
③用户界面根据学生的学号向数据库访问层请求学生信息。
④数据库访问层根据学生的学号加载学生信息。
⑤数据库访问层根据学生信息和学科科目获取该名学生的分数信息。
⑥数据库访问层将学生信息和分数信息提供给用户界面。
⑦用户界面将学生信息和分数信息显示出来。(https://www.daowen.com)
第一步:确定协作图的元素。
协作图元素包括教师类(Teacher)、用户界面类(WebInterface)、学生信息类(StudentInfo)、数据库访问类(DataManager)、学生成绩类(grades)如图8.43所示。

图8.43 确定协作图元素
第二步:确定元素之间的结构关系。
确定这些对象之间的连接关系,使用链与角色将这些对象连接起来。

图8.44 对象之间的关系
第三步:细化协作图。
创建协作图的最后一步就是将早期的协作图进行细化。添加的链之间的消息。如图8.45所示。

图8.45 链之间的消息
例8.7:实例——储户在ATM机上存钱操作的协作图。
(1)确定系统中的类,如图8.46所示。

图8.46 确定类
(2)确定类之间的关系,如图8.47所示。

图8.47 类之间的链
(3)对象实例之间协作关系,如图8.48所示。

图8.48 链之间的消息