· 概述
对象间的相互作用体现了对象的行为。这种相互作用可以描述成两种互补的方式,一种以独立的对象为中心进行考察,另一种以互相作用的一组对象为中心进行考察。
状态机的描述范围不宽,但它描述了对象深层次的行为,是单独考察每一个对象的“微缩”视图。对状态机的说明是精确的并且可直接用于代码。然而,在理解系统的整个功能时存在困难,因为状态机一个时刻只集中描述一个对象,要确定整个系统的行为必需同时结合多个状态机进行考察。交互视图更适合于描述一组对象的整体行为。交互视图是对象间协作关系的模型。
· 协作协作描述了在一定的语境中一组对象以及用以实现某些行为的这些对象间的相互作用。它描述了为实现某种目的而相互合作的“对象社会”。协作中有在运行时被对象和连接占用的槽。协作槽也叫做角色,因为它描述了协作中的对象或连接的目的。类元角色表示参与协作执行的对象的描述;关联角色表示参与协作执行的关联的描述。类元角色是在协作中被部分约束的类元;关联角色是在协作中被部分约束的关联。协作中的类元角色与关联角色之间的关系只在特定的语境中才有意义。通常,同样的关系不适用于协作外的潜在的类元和关联。
静态视图描述了类固有的内在属性。例如, Vehicle 需要有一个所有者。协作图描述了类实例的特性,因为它在协作中起特殊的作用,例如,在一个 RentalCar 的协作中, rentalVehicle 需要 rentalDriver ,它通常与交通工具不直接相关但它是协作的基本部分。
系统中的对象可以参与一个或多个协作。虽然协作的执行通过共享对象相连,但是对象所出现的协作不必直接相关。例如,在一个 Vacation 模型中,某人可以既是 rental Driver 同时又是 hotelGuest 。不经常出现的情况是一个对象在同一个协作中可能担当多个角色。
合作包括结构和行为两个方面。结构方面与静态视图相似—包含一个角色集合和它们之间的关系,这些关系定义了行为方面的内容。行为方面是一个消息集合,这些消息在具有某一角色的各对象间进行传递交换。协作中的消息集合叫做交互。一个协作可以包含一个或多个交互,每个交互描述了一系列消息,协作中的对象为了达到目标交换这些消息。
状态机描述范围具有一定的局限性,但它的描述层次较深入,协作不受限制但描述层次较浅。它捕获了对象组成的网络结构中相互发送消息的整体行为。协作表示潜藏于计算过程中的三个主要结构的统一,即数据结构、控制流和数据流的统一。
