`
wangke0611
  • 浏览: 169375 次
  • 性别: Icon_minigender_1
  • 来自: 南昌
社区版块
存档分类
最新评论

(转)OOD设计原则之开闭原则(OCP)

阅读更多

开闭原则OCP(Open-Close Principle)被称作是OOD的基石,是OOD最重要的原则之一。

这个原则由大师Bertrand Meyer在1988年提出(汗,那个时候恐怕国内还很少人知道OO,甚至计算机为何物):Software entities should be open for extension,but closed for modification。多简单啊?!这个原则的意思大概是说:软件对扩展应该是开发的,对修改应该是关闭的。说的更通俗点儿,就是说我们开发了一个软件,应该可以对它进行功能扩展(开放),而在进行这些扩展的时候,不需要对原来的程序进行修改(关闭)!

为什么会有这样的要求呢?如果一个软件是符合OCP原则的,那么至少,我们有两个极大的好处:
1.在软件可用性上,非常灵活。你可以在软件完成对软件进行扩展,加入新的功能。这样,这个软件就可以通过不断的增加新模块满足不断变化的新需求!
2.由于对软件原来的模块不能修改,因此不用担心软件的稳定性。

目前,对OCP的实现,主要的一条就是抽象,就是我们常常挂在嘴边的要面向抽象(接口)。把系统的所有可能的行为抽象成一个抽象底层,这个抽象底层规定出所有的具体类必须提供的方法的特征作为系统设计的抽象层,这个抽象层要预见所有可能的扩展,从而使得在任何扩展情况下,系统的抽象层不需修改;同时由于可以从抽象层导出一个或多个新的具体类可改变系统的行为,因此对于可变的部分,系统设计对扩展是开放的。

关于系统可变的部分,还有一个更具体的对可变性封装原则(Principle of Encapsulation of Variation,  EVP),从工程实现的角度对开闭原则进行了进一步的解释。EVP要求在做系统设计的时候,对系统所有可能(或允许)发生变化的部分进行评估和分类,每一个可变的因素都单独进行封装。

我们很容易就可以想到,在设计的开始就罗列系统所有可能的行为加入到抽象底层是不可能的(实际上也是不合算的),对所有的可变因素进行预计和封装也不太现实,因此,开闭原则很难被完全实现,只能在某些模块、某种程度上、某个限度内符合OCP的要求。所以可以说,OCP具有理想主义的色彩,是OOD的终极目标。因此,针对OCP的实现方法,许多OOD的大师都费尽心机,研究OCP的实现方式。后面要提到的里氏代换原则、合成复用原则,依赖倒转原则,接口隔离原则,抽象类,迪米特法则等,都可以看作是OCP的实现方法。

 

转自:http://blog.csdn.net/brookes/archive/2007/11/21/1896422.aspx

分享到:
评论

相关推荐

    软件设计的七大原则(OOD)

    其中包括SRP(单一职责原则)、OCP(开闭原则)、LSP(里氏替换原则)、ISP(接口分离原则)、DIP(依赖倒置原则)、CRP(组合/聚合复用原则)和PLK(最小知识原则)。 一、SRP(Single Responsibility Principle)...

    OOD设计基本原则 面向对象设计必备

    OCP 原则(Open-Closed Principle)是 OOD 设计基本原则之一,它规定软件实体应当对扩展开放,對修改关闭。这意味着,我们应当使模块可以在不被修改的前提下被扩展,换句话说,就是应当可以在不必修改源代码的情况下...

    面向对象设计OOD 面向对象设计OOD

    OOD 的核心是面向对象设计原则(OOD principles),其中包括单一职责原则(SRP)、开闭原则(OCP)、Liskov 替换原则(LSP)、基于契约设计(DBC)等。 单一职责原则(SRP) 单一职责原则是指一个类应该只有一个...

    面向对象七大基本设计原则.pdf

    2. 开闭原则(Open/Closed Principle, OCP):软件实体应当对扩展开放,对修改关闭。这意味着软件系统应该能够在不修改现有代码的基础上进行功能的扩展。 3. 里氏替换原则(Liskov Substitution Principle, LSP):...

    OOD原则 GRASP GOF

    2. **开闭原则(Open-Closed Principle, OCP)**: 类应该是对扩展开放的,对修改关闭的。当需要增加新功能时,可以通过扩展已有类,而不是修改原有代码来实现。 3. **里氏替换原则(Liskov Substitution ...

    swift-面向对象设计的设计原则和设计模式

    面向对象设计的原则主要有四个:单一职责原则(Single Responsibility Principle, SRP)、开闭原则(Open-Closed Principle, OCP)、里氏替换原则(Liskov Substitution Principle, LSP)和依赖倒置原则(Dependency...

    OOD.rar_ood

    7. **原则与指导方针**:OOD遵循一些基本原则,如 SOLID 原则,包括单一职责原则(SRP)、开闭原则(OCP)、里氏替换原则(LSP)、接口隔离原则(ISP)和依赖倒置原则(DIP)。这些原则有助于创建易于理解和维护的...

    OOD启思录(高清)

    8. ** SOLID原则**:SOLID是面向对象设计的五个基本原则,包括单一职责原则(SRP)、开闭原则(OCP)、里氏替换原则(LSP)、接口隔离原则(ISP)和依赖倒置原则(DIP)。这些原则指导我们编写易于维护和扩展的代码...

    类的设计原则

    开闭原则(OCP:Open-ClosedPrinciple)是指在进行面向对象设计(OOD:ObjectOrientedDesign)中,设计类或其他程序单位时,应该遵循:-对扩展开放(open)-对修改关闭(closed)的设计原则。开闭原则是判断面向对象...

    面向对象的设计原则详解

    2. 开闭原则(Open-Closed Principle, OCP): 开闭原则指出,软件实体(如类、模块、函数等)应该对扩展开放,对修改关闭。这意味着在不修改现有代码的基础上,可以通过增加新的代码来实现功能扩展,以适应需求的...

    ocp.rar_ocp

    9. **原则与原则**:SOLID原则是面向对象设计的重要指导原则,包括单一职责原则、开闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。遵循这些原则能提升代码质量,增强系统的可维护性和可扩展性。 10. **重构**...

    面向对象设计原则

    开闭原则是面向对象设计中最核心的原则之一,其核心思想是对扩展开放,对修改关闭。这意味着当需求发生变化时,应尽可能通过新增代码的方式来满足新需求,而不是修改现有代码。这样做可以减少对已有代码的影响,从而...

    99丨总结回顾:在实际软件开发中常用的设计思想、原则和模式1

    SOLID原则包括单一职责原则(SRP)、开闭原则(OCP)、里氏替换原则(LSP)、接口隔离原则(ISP)和依赖倒置原则(DIP)。其中,SRP确保每个类只有一个明确的责任,OCP让代码对扩展开放、对修改关闭,LSP保证子类...

    面向对象设计原则:突破软件工程学习的质的飞跃

    1. **开闭原则(Open-Closed Principle, OCP)**:强调软件实体(如类、模块、函数等)应该是可扩展的,但不应被修改。这有助于确保当系统需要适应新的需求时,可以通过增加新代码来实现,而不必修改原有代码,从而...

    面向对象设计的基本原则

    面向对象设计(Object-Oriented Design,简称OOD)是一种广泛应用于软件工程领域的设计方法,它以对象为中心,通过封装、继承和多态等机制来构建复杂的软件系统。本篇文章将详细探讨面向对象设计的基本原则,这些...

    PHP面向对象五大原则之开放-封闭原则(OCP)详解

    开放-封闭原则(Open-Closed Principle,OCP)是面向对象设计(OOD)的五大原则之一,由Bertrand Meyer在1998年提出。该原则旨在指导软件系统的设计,使其能够容易地扩展新功能,同时在扩展时不影响现有代码的稳定性...

    61条面向对象设计的经验原则

    面向对象设计(Object-Oriented Design,简称OOD)是一种广泛应用于软件工程领域的设计方法论,它基于类和对象的概念,强调模块化、封装、继承和多态性等核心原则。以下是对"61条面向对象设计的经验原则"的详细解释...

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

    面向对象设计的原则是软件工程领域中的重要组成部分,它旨在通过一系列明确、实用的指导思想来帮助开发者构建出高质量、可维护、易于扩展的软件系统。本文将深入探讨面向对象设计的核心原则及其应用,并结合GRASP...

    Uncle Bob OOD Principles

    本文将深入探讨Uncle Bob提出的OOD原则,以及这些原则在C++编程中的应用。** 1. **单一职责原则(Single Responsibility Principle, SRP)**:每个类或模块应该只有一个改变的原因。这意味着一个类应专注于一个特定...

Global site tag (gtag.js) - Google Analytics