`
charles
  • 浏览: 39474 次
  • 来自: ...
最近访客 更多访客>>
社区版块
存档分类
最新评论

软件设计中的原则(GRASP)

阅读更多
这里说的几个软件模式是属于原则层次一级的,比GoF等软件设计模式高一层。遵循这些原则可以使我们设计出来的软件有更好的可复用性和可维护性,同样GoF等软件设计模式也是遵循这一原则的。

下边的条列只是简单的介绍,以便忘记了偶尔过来游览一下,详细的介绍请参阅:《Java模式》、《UML和模式应用-面向对象分析与设计导论》

  • GRASP模式

GRASPGeneral Responsibility Assignment Software Pattern(通用指责分配软件模式)的缩写。

1) 专家模式(Expert)

解决方案:将职责分配给具有履行职责所需要的信息的类

通俗点就是:该干嘛干嘛去,别管别人的闲事或者我的职责就是搞这个,别的事不管。

举个简单的例子,如果有一个类是专门处理字符串相关的类,那么这个类只能有字符串处理相关的方法,而不要将日期处理的方法加进来。也就是提高软件高内聚一种原则。

2) 创建者(Creator)

解决方案:将创建一个类A的实例的职责指派给类B的实例,如果下列条件满足的话:

a) B聚合了A对象

b) B包含了A对象

c) B纪录了A对象的实例

d) B要经常使用A对象

e) A的实例被创建时,B具有要传递给A的初始化数据(也就是说B是创建A的实例这项任务的信息专家)

f) BA对象的创建者

如果以上条件中不止一条成立的话,那么最好让B聚集或包含A

通俗点就是:我要用你所以我来创建你,请不要让别人创建你

这个模式是支持低耦合度原则的一个体现

3) 高聚合度或高内聚(High Cohesion)

解决方案:分配一个职责的时候要保持类的高聚合度

聚合度或内聚度(cohesion)是一个类中的各个职责之间相关程度和集中程度的度量。一个具有高度相关职责的类并且这个类所能完成的工作量不是特别巨大,那么他就是具有高聚合度。

4) 低耦合度或低耦合(Low Coupling)

解决方案:在分配一个职责时要使保持低耦合度。

耦合度(coupling)是一个类与其它类关联、知道其他类的信息或者依赖其他类的强弱程度的度量。一个具有低()耦合度的类不依赖于太多的其他类。

5) 控制者(Controller)

解决方案:将处理系统事件消息的职责分派给代表下列事物的类:

a) 代表整个“系统”的类(虚包控制者)

b) 代表整个企业或组织的类(虚包控制者)

c) 代表真实世界中参与职责(角色控制者)的主动对象类(例,一个人的角色)

d) 代表一个用况中所有事件的人工处理者类,通常用“<用例名>处理者”的方式命名(用例控制者)

这是一个控制者角色职责分配的原则,就是哪些控制应该分派给哪个角色。

6)多态

当相关的可选择的方法或行为随着类型变化时,将行为的职责-使用多态的操作-分配给那些行为变化的类型

也就是说尽量对抽象层编程,用多态的方法来判断具体应该使用那个类,而不是用if instanceof 来判断该类是什么接来执行什么。

7)纯虚构

一个纯虚构意味着虚构某些事物,而不是到了迫不得已我们才这样做。

例,我们的Sale类的数据要存入数据库,但是他必须和数据库接口相连接,如果将接口连接放入Sale类中势必增加该类的耦合度,所以我们可以虚构一个类来处理与数据库接口连接的问题。这个类就是我们虚构出来的一个事物。

8)中介者

将职责分配给一个中间对象以便在其他构件或服务之间仲裁,这样这些构件或服务没有被直接耦合。这个中间对象(intermediary)在其他构件或服务间创建一个中介者(Indirection)。这个中间对象也就事7)中的纯虚构。

9)不要和陌生人讲话

分配职责给一个客户端的直接对象以使它与一个间接对象进行协作,这样客户端无需知道这个间接对象。

这个模式-也被叫做(Demeter)准则。

通俗点就是:只与你直接的朋友们通信

不要跟“陌生人”说话

每个软件单位对其他的单位都只有最少的知识,而且局限于那些与本单位密切相关的软件单位

  • 2. 其他设计原则

1)“开-闭”原则(Open-Closed Principle,或者OCP

一个软件实体应当对扩展开放,对修改关闭。

意思就是在设计一个模块的时候,应当使这个模块在不被修改的前提下被扩展。换言之,应当可以在不修改代码的情况下改变这个模块的行为。

2)里氏代换原则(Liskov Substitution Principle, 或者LSP

这个就是尽量用多态的方法编程,也就是GRASP模式中的多态。

3)依赖倒转原则(Dependency Inversion Principle, 或者DIP

依赖倒转原则讲的是:要依赖于抽象,不要依赖于具体

就是说我们尽量在抽象层进行控制编程,要针对接口编程,不要针对实现编程。

4)接口隔离原则(Interface Segregation Principle, 或者ISP

使用多个专门的接口比使用单一的总接口要好。也就是,从一个客户类的角度来讲:一个类对另外一个类的依赖性应当是建立在最小的接口上的。

5)组合/聚合复用原则(Composition/Aggregation Principle, 或者CARP

又叫合成复用原则。原则就是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分:新的对象通过向这些对象的委派达到复用已有功能的目的。也就是,要尽量使用类的合成复用,尽量不要使用继承

6)变与不变的分离
更扩展一步,就是将不同变化的组件进行隔离.最简单的例子就是javabean中的存取器。它隔离了不变的接口和变化的内部属性。这方面体现最好的个人觉得就是eclipse,通过变化的插件,eclipse可以用来实现任何功能。

分享到:
评论

相关推荐

    java\软件设计中的原则(GRASP)

    下面,我们将详细探讨GRASP中的各个模式以及它们在实际开发中的应用。 1. 专家模式(Expert):这个模式强调将职责分配给拥有完成该职责所需信息的类。这意味着每个类应专注于自己的专业领域,避免职责的混杂,以...

    OOD原则 GRASP GOF

    面向对象设计是软件开发中的一种重要方法,它强调将现实世界中的实体转化为程序中的类和对象,通过封装、继承和多态等特性来实现软件的模块化和可扩展性。OOD原则包括多个指导性概念,帮助开发者创建出更加灵活、可...

    软件开发设计原则软件开发设计原则

    在软件开发过程中,设计原则是指导开发者构建高效、可维护和扩展软件系统的重要准则。这些原则不仅提高了代码质量,还能确保团队之间的沟通清晰,降低维护成本。以下将详细阐述一些核心的软件开发设计原则。 1. **...

    使用GRASP的对象设计示例

    GRASP模式提供了一些基本原则和策略,指导开发人员在设计对象时分配责任和确定对象之间的关系。 在GRASP模式中,对象设计的目标是将责任分配给正确的对象,以便将系统功能分解成小的、独立的对象。GRASP模式提供了...

    软件需求分析课件:Chap 7-GRASP.ppt

    在设计过程中,除了掌握UML图(如用例模型、领域模型、系统序列图等)外,还需要理解和应用设计原则,如GRASP、GoF设计模式以及Responsibility-Driven Design (RDD)。 在进行对象设计时,输入包括但不限于用例模型...

    02-软件设计原则 模式深度解析和案例分析

    通过对软件设计原则和设计模式的深度解析,以及一系列应用策略的讲解,本课程旨在帮助软件工程师建立起良好的设计思维,并能够在实际工作中灵活运用各种设计模式。通过案例分析和实战演练,学员不仅可以学习到设计...

    面向对象软件架构设计

    第二单元:技术架构视图─面向对象程序设计原则与模式 59 用GRASP模式指导设计 62 领域模型 96 面向对象设计的基本原则 132 第三单元:用UML辅助系统分析与设计 177 UML简介及常见疑难问题辨析 178 借鉴RUP的UML建模...

    对grasp的理解和应用

    其中,**高内聚**和**低耦合**是GRASP中最核心的两个原则。高内聚意味着类内部的职责紧密相关,这样可以提高类的可读性和可维护性。相反,低耦合则是指类之间的相互依赖性最小化,这样改动一个类不会引起连锁反应。...

    GRASP72GREEN+备份.zip

    1. **图标设计原则**:图标设计遵循一定的原则,如易识别性、一致性、简洁性和可扩展性。这些原则有助于确保图标在视觉上吸引人且易于理解。 2. **矢量图与位图**:图库中的图标可能有矢量图和位图两种形式。矢量图...

    软件需求分析课件:Chap 9-Iteration 2--More GRASP.ppt

    《软件需求分析课件:Chap 9-Iteration 2--More GRASP.ppt》主要探讨了在软件开发过程中的迭代二...通过实例分析NextGen POS和Monopoly游戏,帮助学习者理解如何在实际项目中运用这些理论,提升软件设计的质量和效率。

    设计模式和原则(很实用)

    本文将深入探讨GRASP(一般 Responsibility Assignment Software Patterns,职责分配原则)以及设计原则,这些都是构建高质量、可维护的软件系统的基础。 首先,GRASP是一种指导对象设计的原则集合,它的目标是帮助...

    GRASP模式简介

    GRASP 模式是一种软件设计模式,旨在帮助开发者设计出更加灵活、可维护和可复用的软件系统。它包含九大原则,分别是专家模式、创建者模式、高聚合度或高内聚模式、低耦合度或低耦合模式、控制者模式、多态模式、纯...

    设计模式 设计模式 思想 模式 原则

    ### 设计模式与GRASP原则详解 #### 一、设计模式概述 设计模式是指在软件设计过程中,针对一些常见问题的解决方案。...在实际开发中,开发者应当深入理解并灵活运用这些模式和原则,以达到更好的软件设计效果。

    面向对象软件架构设计.ppt

    第二单元:技术架构视图─面向对象程序设计原则与模式 59 用GRASP模式指导设计 62 领域模型 96 面向对象设计的基本原则 132 第三单元:用UML辅助系统分析与设计 177 UML简介及常见疑难问题辨析 ...

    UML-GRASP模式简述

    "UML-GRASP模式简述" GRASP 模式是 General Responsibility Assignment Software Pattern(通用责任分配软件模式)的缩写,这...在实际项目中,GRASP 模式可以帮助我们建立概念模型,并指导我们如何设计合理的类结构。

    技术架构视图-设计原则与模式

    总之,技术架构视图中的设计原则与模式是软件工程领域的核心知识,它们为开发者提供了一套行之有效的方法论,用以指导软件的设计与实现。通过对这些原则和模式的深入理解和灵活运用,开发者可以构建出既稳定又灵活的...

    软件设计提纲

    【软件设计提纲】是指在软件开发过程中,为了确保软件项目的高效有序进行,制定的一份详细计划,它涵盖了从需求分析、设计、实现到维护的所有关键步骤。在管理信息系统中,软件设计提纲尤其重要,因为这类系统通常...

    讲述了面向对象设计的原则

    在面向对象设计过程中,遵循一定的设计原则可以帮助开发者更好地组织代码结构,提高软件系统的灵活性和可重用性。 ### 二、面向对象设计原则 面向对象设计的原则主要包括以下几点: #### 1. 单一职责原则(Single...

    高级软件架构设计

    【第二单元:技术架构视图】聚焦于面向对象程序设计原则与模式,如GRASP模式,它们用于指导设计过程,以及领域模型的建立。面向对象设计的基本原则,如单一职责原则、开闭原则等,都是架构设计的基础。此外,这部分...

Global site tag (gtag.js) - Google Analytics