一、协作图简述
协作图是一种交互图(interaction diagram),强调的是发送和接收消息的对对象之间的组织结构。一个协作图显示了一系列的对象和在这些对象之间的联系以及对象间发送和接收的消息。对象通常是命名或匿名的类的实例,也可以代表其他事物的实例,例如协作、组件和节点。使用协作图来说明系统的动态情况。
协作图(Collaboration Diagram)显示某组对象如何为了由一个用例描述的一个系统事件而与另一组对象进行协作的交互图。使用协作图可以显示对象角色之间的关系,如为实现某个操作或达到某种结果而在对象间交换的一组消息。如果需要强调时间和序列,最好选择序列图;如果需要强调上下文相关,最好选择协作图。
协作图用于显示对象之间如何进行交互以执行特定用例或用例中特定部分的行为。设计员使用协作图和序列图确定并阐明对象的角色,这些对象执行用例的特定事件流。它们是主要的信息来源,用于确定类的职责和接口。
与序列图不同,协作图显示了对象之间的关系。序列图和协作图表述的是相似的信息,但表述的方式却不同。协作图显示对象之间的关系,它更有利于理解对给定对象的所有影响,也更适合过程设计。
协作图的格式决定了它们更适合在分析活动中使用(请参见活动:用例分析)。它们特别适合用来描述少量对象之间的简单交互。随着对象和消息数量的增多,理解
协作图将越来越困难。此外,协作图很难显示补充的说明性信息,例如时间、判定点或其他非结构化的信息,而在序列图中这些信息可以方便地添加到注释中。
协作图强调参与一个交互对象的组织,它由以下基本元素组成:活动者(Actor)、对象(Object)、连接(Link)和消息(Message)。在UML中,使用实线标记两个对象之间的连接,
协作图中的消息,由标记在连接上方的带有标记的箭头表示。协作图包含类元角色和关联角色,而不仅仅是类元和关联。类元角色和关联角色描述了对象的配置和当
一个协作的实例执行时可能出现的连接。当协作被实例化时,对象受限于类元角色,连接受限于关联角色。关联角色也可以被各种不同的临时连接所担当,例如过程
参量或局部过程变量。连接符号可以使用构造型表示临时连接(《parameter》或《local》)或调用同一个对象(《self》)。虽然整个系统中
可能有其他的对象,但只有涉及到协作的对象才会被表示出来。换而言之,协作图只对相互之间具有交互作用的对象和对象间的关联建模,而忽略了其他对象和关联。
二、协作图的内容
协作图中可以有对象和主角实例,以及描述它们之间关系和交互的连接和消息。通过说明对象间如何通过互相发送消息来实现通信,协作图描述了参与对象中发生的情况。您可以为用例事件流的每一个变化形式制作一个协作图。如图2-1
图 2-1
描述回收机系统的接收储存项用例中部分事件流的协作图。
在协作图中,您可以按照以下方式使用对象:
1.可以不指定对象的类。通常先制作只带有对象的协作图,而后再指定它们的类。
2.可以给对象命名,但如果您要区分同一个类的不同对象,则应给对象命名。
3.如果对象的类主动参与了协作,则可以将类本身在协作图中表现出来。
三、协作图使用
协作图用于显示组件及其交互关系的空间组织结构,它并不侧重于交互的顺序。协作图显示了交互中各个对象之间的组织交互关系以及对象彼此之间的链接。与序列图不同,协作图显示的是对象之间的关系。另一方面,协作图没有将时间作为一个单独的维度,因此序列号就决定了消息及并发线程的顺序。协作图是一个介于符号图和序列图之间的交叉产物,它用带有编号的箭头来描述特定的方案,以显示在整个方案过程中消息的移动情况。
协作图具有以下用途:
1)、通过描绘对象之间消息的移动情况来反映具体的方案。
2)、显示对象及其交互关系的空间组织结构,而非交互的顺序。
3.1、创建协作图
3.1.1生成协作图
1)、启动 IDE(如果需要)。
2)、在“项目”窗口中,展开 "UMLTutorialProject"
>“模型”节点。
3)、选择以下类节点:
ATM
Branch
Consortium
注意:通过按住 Ctrl 键并单击每个类节点可以选择多个类。
4)、右键单击最后选定的类,然后从弹出式菜单中选择“通过选定的元素创建图”。将打开新建向导,其中显示“创建新图”页。
5)、在“图类型”列表中,选择“协作图”。
6)、在“图名称”字段中,键入 CollaborationDiagram。
7)、保留“名称空间”字段中的缺省设置,然后单击“完成”。
IDE 将执行以下操作:
在“项目”窗口的“模型”节点下创建 CollaborationDiagram
节点
在图编辑器中显示新图(该图由三个表示为生命线元素的类构成)
打开建模组件面板
3.1.2、完善生成的图
1)、单击并拖动元素以重新排列图,使其与下面的图3-1类似。
图 3-1
2)、在“项目”窗口中,选择标记为 User 的类节点。
3)、将选定的类拖放到图编辑器中,使其位于 ATM 生命线元素的上方,
如下图3-2所示。
图 3-2
3.2、添加连接器链接
协作图中的每个元素均可通过连接器链接与其他元素建立连接。您可以标识这些链接,并在其中添加消息流。
1)、从建模组件面板的“基本”类别中,选择 "Connector"
。
2)、单击标记为 User 的生命线元素,然后单击 ATM。
将在两个元素之间绘制一条连接器链接。
3)、使用相同的步骤绘制以下链接:
从 ATM 至 Consortium 的链接
从 Consortium 至 Branch 的链接
从 ATM 至 Branch 的链接
注意:在创建从 ATM 至 Branch 的链接时,请由 ATM 生命线向右水平拉出链接线,并在到达
Branch 生命线正上方时单击一下鼠标。这样便会在链接线上放置一个顶点,然后再垂直向下绘制链接以到达
Branch 生命线。
此时,协作图应当与下面的图3-3类似。
图 3-3
4)、在图编辑器中的任意位置单击鼠标右键以取消选择 "Connector"
图标。
3.3、显示消息编号
协作图通过使用带有编号的消息来表示特定的方案。缺省情况下,uml 建模设置将隐藏这些编号。请使用以下步骤来显示消息号:
1)、在 CollaborationDiagram 图编辑器的背景中单击鼠标右键。
2)、从弹出式菜单中选择“显示消息号”。 这样当您插入操作流(在下一部分中介绍)时,便会显示消息号。
3.4、显示操作流
操作流在图中显示为与链接平行的带标记箭头。此链接用于向目标元素传输消息或实现这种传输。
1)、在图编辑器中,选择 User 和 ATM 之间的连接器链接。
2)、右键单击距 ATM 生命线最近的连接器链接部分。
3)、从弹出式菜单中选择“操作”> "public float
getCashOnHand"。
将在图中放置一个编号为 1 的操作流。
注意:单击“适应窗口大小”按钮
以在图编辑器中查看整个图。
4)、选择 ATM 和 Consortium 之间的连接器链接,然后右键单击靠近
Consortium 元素的链接部分。
5)、从弹出式菜单中选择“操作”> "public void
validateAccountInfo"。
IDE 会在此链接上放置选定的操作,并将其编号为 1.1。
注意:您可以根据需要选择并移动操作流。
3.5、向类中添加操作
在此过程中,您将向连接器链接添加一个新的操作。该操作还会被添加到 ClassDiagram
图的 Branch 类以及 java 源代码中。
1)、右键单击 Consortium 和 Branch 之间靠近 Branch
生命线元素的连接器链接。
2)、从弹出式菜单中选择“操作”>“添加操作”。
图中将出现一个标签,并突出显示 Unnamed 一词。
3)、键入 verifyCardWithBank。
4)、使用向右方向键将光标移至操作参数字段。
5)、键入 int stringCardStrip 作为参数,然后按 Enter
键。
该链接将被标记为 1.1.1: public void verifyCardWithBank(
int stringCardStrip ),并且添加的操作会显示在 ClassDiagram 图的 Branch
类中。
6)、在 ATM 和 Branch 之间的连接器链接上,右键单击靠近 Branch
生命线的链接部分。
7)、从弹出式菜单中选择“操作”> "public char
getConnected"。
该链接将被标记为 1.2: public char getConnected()。
完成的协作图应当与下面的图3-4类似。
图 3-4
3.6、保存图
完成协作图后,您可以保存该图。
1)、在图编辑器中,右键单击 "CollaborationDiagram"
标签。
2)、从弹出式菜单中选择“保存文档”。
将关闭菜单并保存图。
注意:退出 IDE 时,系统会提示您是否要保存项目。
|