GRASP是General Responsibility Assignment Software Patterns(通用职责分配软件模式)的简称,它的核心思想“职责分配”即Responsibility Assignment。GRASP提出了几个基本原则,用来解决面向对象设计的一些问题。
与GoF设计模式不同的地方在于,GoF等设计模式是针对特定问题而提出的解决方法,而GRASP则是站在面向对象设计的角度,告诉我们怎么样设计问题空间中的类与它们的行为责任,以及明确类之间的相互关系等等。GRASP可以说是GoF等设计模式的基础。
GRASP概要
GRASP用职责设计对象:"Designing Objects with Responsibilities".它包含了9个基本模式:
1.信息专家(Information expert)
2.创建者(Creator)
3.高内聚(High Cohesion)
4.低耦合(Low Coupling)
5.控制器(Controller)
6.多态性(Polymorphism)
7.纯虚构(Pure Fabrication)
8.间接性(Indirection)
9.变化预防(Protected Variations)
GRASP的主要特征:
- 对象职责分配的基本原则。
- 主要应用在分析和建模上。
GRASP的核心思想的理解:
自己干自己的事(职责的分配)
自己干自己的能干的事(职责的分配)
自己只干自己的事(职责的内聚)
面向对象设计
所谓面向对象设计,就是在系统设计的过程中,通过把系统分成相对独立但又相互联系的对象组合的一种设计方法。对象具有属性和行为,对象间通过消息进行交互(协作)。
面向对象一般有以下几个关键步骤:
1.发现对象。找出系统应该有哪些对象构成。
2.对象的属性。对象具有哪些属性。
3.对象的行为。对象具有哪些行为,或者说对象需要做什么,它的职责是什么。
4.对象的关系。对象与对象之间的关系是什么,怎样进行交互、协作等等。
发现对象:
对象的发现超出了本文的讨论范围。我们简单地介绍一下对象发现的过程与手段。
一般意义上的对象是现实世界上物体的抽象。也就是说,现实世界里有什么物体,就有什么对象;物体存在什么属性,对象就有什么属性。
我们可以用“名词筛选法”来发现系统的对象。
比如,一个学生考试成绩管理系统,有以下简单的用例:
- 管理员创建题库(把题条加入题库)
- 系统根据管理员输入的某些条件随机生成试题
- 学生成绩入库与管理
我们可以通过字面意思找出名词,就可以找出“管理员”,“题条”,“题库”,“试题”,“学生”,“学生成绩”等几个对象。
一般通过这种方法(名词筛选法)就可以找出系统的绝大部分对象。
对象行为:
行为是对象应该执行的动作,也就是对象的职责。对象具有哪些职责呢?相对于上面所说的“名词筛选法”,可以简单地用“动词筛选法”来发现“对象的行为”。
比如,上面的“学生考试成绩管理系统”一例中,有“创建题库”,“输入(条件)”,“生成试题”,“成绩入库”,“成绩管理”等动词,也就是说,系统的对象至少具有以上这些行为(或职责)。
有时,我们可能还会发现某些“行为”的粒度过大,这时,可以通过进一步细化用例的描述,来发现更多更细的“行为”。这里不再详述。
问题1:找出对象的行为(职责)之后,怎么样分配这些行为呢?也就是说怎么确认“行为”属于哪个对象呢?
对象关系
系统的所有对象不可能是一个个单独存在毫无关系的个体,它们或多或少的有着各种联系(协作关系)。
问题2:如果2个对象之间有协作关系,他们之间最好通过什么样的方式协作呢?
对象扩展特性
问题3:已经被抽象出来的对象,如何面对将来可能发生的变化呢?
GRASP的9个基本模式,用于解决以上设计过程中遇到的问题。
分享到:
相关推荐
GRASP模式在面向对象设计中起到了至关重要的作用,是学习设计模式之前必须了解的基础知识。 GRASP模式中的两种重要原则: 1. **信息专家** (Information Expert):当一个类拥有完成某个职责所需的所有信息时,该...
策略模式是一种经典的设计模式,通过鸭子问题,可以让学习者更好地了解设计模式的概念和实现。策略模式的主要思想是定义一系列的算法,并将每一个算法封装起来,使它们可以相互替换。这样,算法独立于使用它的客户而...
本书特别强调了GRASP(通用职责分配软件模式)这一面向对象设计的典型模式。 GRASP 模式是一组面向对象设计原则,它帮助开发者决定在软件设计中如何合理地分配和分配职责给对象。GRASP 包括诸如信息专家、创建者、...
在深入学习设计模式之前,了解GRASP(职责分配原则)是非常重要的。GRASP包括9种模式,如信息专家、创建者、低耦合、高内聚、多态、间接性、控制器、保护变化和主体等,它们提供了对象设计和职责分配的基本准则。...
GRASP模式关注于如何合理分配类的责任,而GOF模式则更侧重于设计的实现、类的交互以及软件质量的提升。 1.2 GRASP模式分类 GRASP模式不作为传统意义上的设计模式,而是面向对象设计的基本原则。它包括9种模式,彼此...
书中还提到了GRASP模式(General Responsibility Assignment Software Patterns),这是面向对象设计中的一组原则,用以指导对象之间的职责分配。GRASP模式旨在提供一套设计原则,帮助开发者理解和应用面向对象设计...
在软件设计中,GRASP(General Responsibility Assignment Software Patterns,通用职责分配软件模式)是一组指导原则,用于帮助开发者创建高质量、可复用和可维护的软件。这些原则旨在提高软件的内聚性和降低耦合度...
**UML(统一建模语言)与设计模式的应用** UML(Unified Modeling Language)是一种用于软件系统建模的标准语言,它...同时,了解GRASP原则、代码实现、可见性控制等概念,能够使你在软件设计和开发中更加得心应手。
在深入探讨具体的设计模式之前,了解GRASP(General Responsibility Assignment Software Patterns)原则是非常重要的。GRASP是一组用于指导面向对象设计的基本原则,它包含了九种模式,这些模式帮助开发者确定类...
5. **迪米特法则**:也称为最少知道原则,一个对象应该对其他对象有最少的了解,减少对象间的交互,降低耦合。 6. **合成/聚合复用原则**:优先使用对象组合或聚合,而不是继承,因为继承会带来较高的耦合度。 ...
通过学习本书,读者不仅可以了解设计模式的基本原理,还能掌握如何将这些模式应用于实际的软件开发过程中。无论是对于初学者还是有一定经验的开发者来说,这本书都是一个非常好的资源。通过阅读和实践,相信每位读者...
GRASP模式帮助开发人员在系统设计阶段做出更好的决策,确保系统更加健壮和可维护。 ### 其他知识点 课程中还提到了装饰器模式(Decorator Pattern)和策略模式(Strategy Pattern)。装饰器模式是在不改变对象结构...
本书还特别讲解了GRASP(通用职责分配软件模式)等设计模式,帮助读者提升面向对象分析与设计的实用技巧。设计模式为面向对象编程提供了经过实践验证的解决方案,它们能够帮助开发者编写出结构清晰、易于理解和维护...
26.2 一些GRASP原则是对其他设计模式的归纳 26.3 设计中发现的“分析”:领域模型 26.4 工厂(Factory) 26.5 单实例类(GoF) 26.6 具有不同接口的外部服务问题的结论 26.7 策略(GoF) 26.8 组合(GoF)和...
GRASP(通用职责分配软件模式)是一组面向对象设计模式,旨在指导开发者如何将责任分配给软件系统中的对象。通过掌握这些模式,读者能够更加高效地解决面向对象设计中的常见问题,提升设计的灵活性和可扩展性。 书...
总的来说,OOD第八章1的内容涵盖了面向对象设计的基本概念、原则和模式,提供了将复杂系统分解为可管理部分的方法,强调了职责分配的重要性,以及如何通过类图和GRASP模式来实现高效、可扩展的设计。这些知识对于...
下面简要介绍几种常见的GRASP模式: #### 1. 信息专家 信息专家模式建议将责任分配给具有相关信息或知识的类。例如,如果某个操作涉及到特定领域的业务逻辑,那么这个操作就应该由最了解该领域的类来负责。 #### ...