正文
204
然后我要简单的给大家讲述一下协作和交互,这用一种白盒的方式描述了系统的行为。
什么是
协作(Collaboration)
呢?
A collaboration defines an interactionand is a society of roles and other elements that work together to provide somecooperative behavior that’s bigger than the sum of all the elements.
A specification of a contextual relationship among instances that interactwithin a context to implement a desired functionality.
A collaboration is a description of structure. Collaborations are forms of structuredclassifiers. The behavior of a collaboration may be specified by interactionsthat show message flows in the collaboration over time.
协作定义了一个交互,是一群角色和其它元素,它们共同工作,提供比所有元素总和的行为更大的合作行为。
协作有结构性的和行为性的两个维度。
一个给定的类或对象可以参加一些协作。这些协作因此代表组成一个系统的模式的实现。
协作的图形表示法是把这画成一个虚线椭圆。
205
那,
协作的结构
是什么呢?
协作单位的结构部分通常用
类图
来图示,而行为部分常用
交互图
来表示。
那,
用例和协作
是什么关系呢?
用例捕获被开发的系统(或子系统、类或接口)想要实现的行为,而不必说明这些行为是怎样实现的。这是一个重要的分界线,因为系统分析(说明行为)应尽可能的不涉及实现问题(说明行为如何被完成)。然而,最后你还是要实现用例的,并通过创建由一起工作以实现这个用例的行为的类,和其它元素所构成的群体来实现用例。这组元素的群体,既包括静态的结构,也包括动态的结构,在UML中被建模为一个协作。
针对上面的概念,下面再具体谈谈。
大家都知道了一个架构,不但定义了系统的结构,还定义了行为,那怎么去描述它的行为?刚才我们说分两个方面来描述,一个是用户看到的行为,然后一个是系统内部怎么来实现这个行为的一个故事的情节。
206
协作和交互,一个架构要定义结构和行为,现在我们是在为怎么来定义架构的行为在做准备。我们知道我们要用的概念是协作和交互,这是在系统内部方案空间里面最主要用的是协作和交互,在问题空间里面是描述问题的时候,我们用的是用例和场景。所以记住,我们始终是有空间来表达我们的系统,问题空间和方案空间,然后在这个基础上才是我们的架构,描述的问题空间就隐含了这个系统架构,就包括结构和行为。
我们已经知道了,描述结构最主要的是靠包,然后是结构性的事物,描述行为的最主要的是靠协作和交互,就是我们将来去生成测试案例的时候,就是测试的是场景,建立这些概念之后,实际上大家都知道了,我们怎么从一个问题的空间走向了一个解决方案的空间。
问题空间怎么走向方案空间?然后我们这个里面要做的。我们要从问题空间走向方案空间,然后看我们的走法,我们最关键性的走法是什么?
我们在问题空间里面从参与者的角度,这是我们的涉众,他看到了比如什么场景等等之类的东西,然后在我们的方案空间里面,我们要做的核心就是用一个协作,然后实现用例。
207
当然可以有多个不同的协作来实现同一个用例,这是没有问题的。用例和场景在方案的空间里面,我们用的是交互和协作,每个协作实现一个用例,每个交互是跟这个场景对应的,所以用场景这种自然语言描述,交互是面向对象语言描述的,因为我们的方案空间都是面向对象的,我们是面向对象的系统。
好,这是我们一个核心。然后理解完了这个概念之后,大家要记住,就是说当我们有了这些概念之后,实际上当我们把这个问题想得很清楚之后,我们将来的方案就已经很在我们的问题空间里面,我讲用例分析的时候,实际上我会给大家讲这样一个概念,并如何来理解这些概念。
这就相当于是,交互的时候是讲那个故事的梗概,然后将来我们一定会有个模型层,在模型层里面建立它们对象之间的关系,所以我们到时候会从用例里面抽出来最关键性的模型对象,然后这些最关键的模型对象里面它一定会有一些操作,而这个操作它会代表了一个业务流程,模型对象就封装了这个用例里面的事件流一系列的class等信息里面。