11.7.3 语义
协作
协作可以被用来解释一组协作的实例如何完成一个或一组共同的任务。因此,协作通常只包含那些对它的解释是必需的方面而抑制其它的部分。因此,一个给定的对象可能同时在毒攻额不同协作中发挥collaborationRoles(协作角色),但每个协作只表示与它的目的相关的该对象的那些方面。
协作定义了完成某个给定任务所需的一组合作参与者。协作的协作角色将会由互相交互的实例所扮演。它们与给定任务相关的联系通过协作角色之间的连接器来表示。协同的协作角色定义了实例的一个用法,协作角色的类型分类符规定了这些实例所有必需的属性。因此,协作规定了参与到该协作的实例必须要有的属性。协作角色间的连接器规定了参与实例之间必须存在的通信路径。
在一个特定的协作中,并不是参与实例的所有特征和内容,也不是它们之间的所有链接都是必需的。因此,协作通常根据接口类型的协作角色来定义。
协作可以来自对其它协作的特化。如果一个协作角色在特化中被扩展,那么它在特化协作中的类型必须符合它在泛化协作中的类型。特化中协作角色的类型并不意味着相应的分类符特化会实现这些协作角色。它们只要遵循协作角色定义的约束就够了。
协作不能直接被实例化。协作中定义的合作是由充当协作中定义的协作角色的实例之间的实际合作来完成的。
协作使用
CollaborationUse(协作使用)代表了用于解释一组元素之间关系的协作的一次特定使用。通过将特定分类符上下文中的特定可连接元素绑定到协作的协作角色,协作使用表示了由协作描述的模式如何被应用到给定的分类符上下文中。在一个分类符中可能会有同一协作的多个协作使用,每个的绑定不同。一个给定的协作角色或连接器可以参与到多个相同或不同的协作的使用中。
roleBindings(角色绑定)由协作使用所拥有的依赖来实现。协作中的每个协作角色被一个唯一的依赖来绑定,该依赖作为协作角色的提供者。该依赖的客户是与上下文分类符相关的一个可连接元素:它可能是上下文分类符的一个直接的协作角色,或者是从上下文分类符通过一些引用可以到达的一个元素。这些角色绑定指示哪个来自上下文分类符的可连接元素发挥协作中的哪个协作角色。
对协作使用进行类型定义的协助中的连接器必须在上下文分类符的绑定元素之间有相应的连接器,并且这些相应的连接器必须具有与协作中的连接器相同的或更为一般化的类型。
分类符所拥有的某个协作使用可以被单列出来作为整个分类符的行为。这称作该分类符的representation(表现)。与分类符的表现关联的协作展示了分类符中相应的结构化特征(例如它的属性和部分)实例如何交互来生成分类符的整体行为。该表现协作可以用于在一个比分类符的内部结构更高的抽象层次上来描述分类符的行为。分类符的属性通过协作使用的角色绑定被映射到协作中的协作角色。
附加到协作的任意行为都适用于给定的协作使用中绑定的协助角色和连接器的集合。
如果相同的可连接元素既被用于协作中有用于所表示的元素,那么不需要角色绑定。
对于在角色绑定中的客户和提供者何时是兼容的没有进一步的规定。