日期:2014-05-17  浏览次数:21035 次

GRASP通用职责分配软件模式

1.  概述

它的核心思想是“职责分配(Responsibility Assignment)”。GRASP提出了几个基本原则,用来解决面向对象设计的一些问题。

Craig Larman在《Applying UML and Patterns》一书中提出了GRASP设计模式的概念。作者称其为设计模式,其实,更好的理解应该为设计原则。因为,与GoF等设计模式不同的是,GoF等设计模式是针对特定问题而提出的解决方法,而GRASP则是站在面向对象设计的角度,告诉我们怎么样设计问题空间中的类与它们的行为责任,以及明确类之间的相互关系等等。GRASP可以说是GoF等设计模式的基础。

1.1GRASP概要

它包含了9个基本模式:

1,信息专家(Information expert)

2,创建者(Creator)

3,高内聚(High Cohesion)

4,低耦合(Low coupling)

5,控制器(Controller)

6,多态性(Polymorphism)

7,纯虚构(Pure Fabrication)

8,间接性(Indirection)

9,      变化预防(Protected Variations)

1.2 GRASP的主要特征

l  对象职责分配的基本原则。

l  主要应用在分析和建模上。

1.3GRASP的核心思想

自己干自己的事(职责的分配)

自己干自己的能干的事(职责的分配)

自己只干自己的事(职责的内聚)

2.  面向对象设计

所谓面向对象设计,就是在系统设计的过程中,通过把系统分成相对独立但又互相联系的对象组合的一种设计方法。

对象具有属性和行为,对象间通过消息进行交互(协作)。

面向对象设计一般有以下几个关键步骤:

1, 发现对象。找出系统应该由哪些对象构成。

2, 对象的属性。对象具有哪些属性。

3, 对象的行为。对象具有哪些行为;或者说对象需要做什么,它的职责是什么。

4, 对象的关系。对象与对象之间的关系是什么,怎样进行交互,协作等等。

2.1发现对象

对象的发现超出了本文的讨论范围。我们简单地介绍一下对象发现的过程与手段。

一般意义上的对象是现实世界上物体的抽象。也就是说,现实世界里有什么物体,就有什么对象;物体存在什么属性,对象就有什么属性。

我们可以用“名词筛选法”来发现系统的对象。

比如,一个学生考试成绩管理系统,有以下简单的用例:

- 管理员创建题库(把题条加入题库)

- 系统根据管理员输入的某些条件随机生成试题

- 学生成绩入库与管理

我们可以通过字面意思找出名词,就可以找出“管理员“,“题条”,“题库”,“试题”,“学生”,“学生成绩”等几个对象。

一般通过这种方法(名词筛选法)就可以找出系统的绝大部分对象。

2.2对象行为

行为是对象应该执行的动作,也就是对象的职责。对象具有哪些职责呢?相对于上面所说的“名词筛选法”,可以简单地用“动词筛选法”来发现“对象的行为”。

比如,上面的“学生考试成绩管理系统”一例中,有“创建题库”,“输入(条件)”,“生成试题”,“成绩入库”,“成绩管理”等动词,也就是说,系统的对象至少具有以上这些行为(或职责)。

有时,我们可能还会发现某些“行为”的粒度过大,这时,可以通过进一步细化用例的描述,来发现更多更细的“行为”。这里不再详述。

问题1:找出对象的行为(职责)之后,怎么样分配这些行为呢?也就是说怎么确认“行为”属于哪个对象呢?

2.3对象关系

系统的所有对象不可能是一个个单独存在毫无关系的个体,它们或多或少的有着各种联系(协作关系)。