目录
1、概念
1.1、名称
1.2、结构
1.3、行为
1.4、组织协作
2、常用建模技术
2.1、对角色建模
2.2、对用例的实现建模
2.3、对操作的实现建模
2.4、对机制建模
在UML中,用协作来对机制建模。协作为系统中的交互构造块指定一个名称,其中既包含结构元素也包含行为元素。
允许从外部把一个协作可视化为一个组块。放大一个协作,将被引导到其他一些图——特别是类图(用于协作的结构部分)和交互图(用于协作的行为部分)。
1、概念
协作 (collaboration)是一组类、接口和其他元素的群体,它们共同工作以提供比各组成部分的总和更强的合作行为。协作也是关于一个像类目(包括类、接口、构件、结点或用况)或操作那样的元素如何由一组以特定方式扮演特定角色的类目和关联来实现的规约。
协作的图形表示法是把它画成一个虚线椭圆。
1.1、名称
名称 (name)是一个文本串。单独一个的名称叫做简单名 (simplename);
受限名 (qualifiedname)是用协作存在于其内的包名作为前缀的协作名。
一般要求名称首字母大写
1.2、结构
一是结构部分,它详细说明共同工作以完成该协作的类、接口和其他元素;
二是行为部分,它详细说明关于这些元素如何交互的动态性。
协作不能拥有自己的结构元素,而仅引用或使用在其他地方声明的类、接口、构件、结点和其他结构元素。这也是为什么把协作称作系统体系结构中的概念组块而不称作物理组块的原因。一个协作可以跨越系统的多个层次。
上图描绘了如何展开协作Internode messaging的内部,给出一个命名系统概念组块的协作,可以展开它以显露其内部的结构细节。
1.3、行为
协作的结构部分通常用组合结构图来表示,而行为部分通常用交互图来表示。
协作的行为部分可以由一个或多个交互图描述。如果想强调消息的时间顺序,就用顺序图。如果想强调协作时对象之间的结构关系,则采用协作图。
协作的行为部分必须与它的结构部分一致。看到的角色必须与在其内部结构中看到的角色相匹配。
1.4、组织协作
协作之间也存在关系。一些协作可以精化另一些协作,可以把这种关系建模为精化关系。协作间的精化关系通常反映了它们所表示的用况之间的精化关系。
2、常用建模技术
2.1、对角色建模
本质上,角色是出现在模式的个体实例中的对象的代理或替身。例如,若想对窗口应用中的对象响应鼠标事件的方式建模,则应该绘制包含角色的交互图,角色的类型包括窗口、事件和处理程序。
上图所展示了一个交互图,它图示了交换机语境中用于初始通话的一个局部的场景。其中有4个角色:a(CallingAgent)、c(Connection)、t1和t2(Terminal的两个实例)。这四个角色都表示现实世界中可能存在的具体对象的概念性代理。
2.2、对用例的实现建模
上图展示了一组从信用卡验证系统中提取的用况,其中有两个基本用况——Place order(订购)和Generate bill(生成账单)和两个从属用况——Detect card fraud(检验卡的真伪)和Validate transaction(事务验证)。虽然在多数情况下不需要显式地对这种关系建模(而是留给工具去做),但是此图显式地通过协作Order management(订单管理)对用况Place order的实现建模。可以进一步把该协作展开到它的结构和行为方面,引向相应的类图和交互图。通过实现关系,可以将用况与它对应的脚本连接起来。
2.3、对操作的实现建模
使用协作的另一个目的是对操作的实现建模。可以通过直接编码来描述操作的实现。
操作的参数、返回值和其中的局部对象提供了操作的实现的语境。
如果操作是算法密集型的,则用活动图对它的实现建模。
如果操作很复杂或者需要某些详细的设计工作,则将它的实现表示为协作。可以分别用类图和交互图来进一步展开协作的结构部分和行为部分。
上图展示了一个主动类RenderFrame,它显露出了三个操作。
函数progress很简单,所以直接采用代码实现,这在图中通过附加注解来描述。
操作render就复杂多了,所以它的实现由协作Ray trace来表示。尽管在这里没有显示,但可以展开这个协作来看它的结构方面和行为方面。
2.4、对机制建模
在所有结构良好的面向对象系统中,都会发现一系列模式。一方面,可以找到一些惯用法,它们代表了实现语言的使用模式。另一方面,会发现一些刻画整个系统并形成特定风格的体系结构模式和框架。在这两者之间,会发现代表系统中通用设计模式的机制,通过这些机制,系统中的事物以共同的方式彼此交互。可以用UML将这些机制建模为协作。
机制是独立存在的协作,其语境不是单个的用况或操作,而是整个系统。系统中这一部分的任何可见的元素都可以作为参与一个机制的候选者