UML协作图 【学习目标】 ·定义协作图 ·为什么要建协作图 ·了解协作图的标记组件 ·学习不同的消息类型 ·学习如何建模协作图
类图描述了系统中包含的类,类提供的功能,以及类之间的关联,但是没有告诉我们类实例(对象)之间是如何通信的。这就是使用协作图的目的。 一、定义协作图 协作图描述对象之间的关联及其它们彼此之间的消息通信。要想使由类构成的系统具有功能,类的实例(对象)需要彼此通信和交互,它们需要协作。
二、了解协作图的标记符 协作图描述对象之间的关联结构以及它们之间的交互,以便展示用例的功能行为,其UML标记如下图所示。
1. 对象和角色 由于协作图要建模系统的交互,它必须处理类的实例。由于类在运行时不做任何工作,而是由它们的实例形式(对象)完成所有工作,因此,我们现在主要关心对象之间的交互。在协作图中可以使用3种标记类型的对象,如下图所示。
除了对象之外,在协作图中还可以看到对象角色。有4种方式来标识对象角色,如下图所示。
2.消息 消息是协作图中对象与对象之间通信的方式。消息在协作图中显示为一个伴随链接或者关联角色的文本字符串,并带有一个箭头来指示消息沿着关系传递的方向,如下图所示。
三、学习不同的消息类型 协作图中有3种类型的消息,它们与前面介绍顺序图时的消息类型相同: Synchronous(同步消息)用于对象同步通信,即对象通信在继续下一步之前必须完成前一步。 Asynchronous(异步消息)用于对象异步通信。 Flat Messages(简单消息)指示消息类型是同步或异步对于模型不重要。 1.同步消息 协作图中使用实心箭头表示消息是同步的,它表示前一个消息处理必须完成后才可进入下一个消息处理。下例演示了Compiler对象把Load(File)消息同步地发送到FileSystem对象,并等待完成。
2.异步消息 异步消息指示处理流不必等到消息完成或者传递之后就可以继续执行。异步消息采用半开箭头表示。 在下例中,Compiler对象发送一个消息Link(ProgramName,Options)给Liker 对象。Compiler不会等待Linker来链接程序,相反,它会在Linker进行链接操作的同时继续处理自己的工作。在这里,Compiler和Linker对象都使用了粗边框的标记符,这表示它们都属于自己的进程,会独立于其他对象操作,如下图所示。
3.简单消息 简单消息使用带有消息文本的开放箭头,用来指示消息类型对于当前的协作图是未知的或者不重要的。在下面的模型中,来自User对象的两个消息都是简单消息,通过传递PressButton消息调用两个不同的对话对象。
练习: 比较顺序图与协作图 在这个练习中,将通过对ATM机取款用例的行为描述,比较顺序图与协作图。例如,客户Joe从ATM机提取20美金的场景。
练习:建模储户在ATM机上存钱操作的协作图。 1、确定系统中的类
2、确定类之间关系
3、对象实例之间协作关系