`
walsh
  • 浏览: 432693 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

OOD设计原则之开放封闭原则(OCP)

OO 
阅读更多
开闭原则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的实现方法。


分享到:
评论

相关推荐

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

    OCP是软件设计的七大原则之一,它的定义是:软件实体(类、模块、函数/方法等等)对于扩展应该是开放的,对于修改应该是封闭的。OCP可以提高软件模块的可重用性和可维护性,软件产品具有良好的稳定性和持久性。OCP的...

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

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

    面向对象的设计原则详解

    8. 共同封闭原则(Common Closure Principle, CCP): 包内的所有类应对相同类型的变化具有共同的封闭性,即一个变更影响到包内的所有类。这有助于维护,因为所有相关的改动可以集中在一个地方进行。 9. 无环依赖...

    面向对象设计的基本原则

    2. **开放封闭原则 (Open-Closed Principle, OCP)** - 一个软件实体(如类、模块或函数)应该是对扩展开放的,但对修改关闭的。这意味着可以在不修改原有代码的情况下增加新功能,通过继承或接口实现扩展。 3. **...

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

    开放封闭原则(Open/Closed Principle, OCP) 开放封闭原则指出软件实体(如类、模块等)应该是可以扩展但不可修改的。当需要增加新功能时,可以通过添加新的代码来实现,而不是修改现有的代码。这有助于降低系统...

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

    #### 开放-封闭原则(OCP) 开放-封闭原则强调软件实体应该是可扩展的,但不可被修改。这一原则的核心在于通过抽象来管理变化,使软件系统能够在不修改现有代码的情况下适应新的需求。为了实现这一目标,可以通过...

    Uncle Bob OOD Principles

    2. **开放封闭原则(Open-Closed Principle, OCP)**:类应该是对扩展开放的,对修改封闭的。当需要增加新功能时,我们应该通过扩展已有类的行为,而不是直接修改它们的源代码。这可以通过继承、接口或策略模式等...

    面向对象设计的基本原则和实践建议

    2. **开放封闭原则(Open-Closed Principle, OCP)**:软件实体(类、模块、函数等)应对于扩展开放,对于修改封闭。这意味着在不改动原有代码的情况下,可以通过扩展增加新功能。实现这一原则的关键是抽象和多态。 ...

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

    2. **开放封闭原则(Open-Closed Principle, OCP)**:软件实体(如类、模块或函数)应当对扩展开放,对修改封闭。这意味着在不改动原有代码的情况下,可以通过增加新代码来扩展功能。 3. **里氏替换原则(Liskov ...

    61条面向对象设计的经验面试题

    2. **开放封闭原则(Open-Closed Principle, OCP)**:软件实体(类、模块、函数等)应对于扩展开放,对于修改关闭。这意味着可以通过增加新代码而非修改现有代码来实现功能扩展。 3. **里氏替换原则(Liskov ...

    java 门禁系统的面向对象设计

    在设计过程中,我们需要遵循一些原则,如单一职责原则(SRP)、开放封闭原则(OCP)、里氏替换原则(LSP)、依赖倒置原则(DIP)和接口隔离原则(ISP),以提高代码的可读性、可维护性和可扩展性。 此外,为了保证...

    一些面向对象的设计法则

    2. **开放封闭原则(Open-Closed Principle, OCP)**:软件实体(如类、模块、函数)应当对扩展开放,对修改关闭。当需要增加新功能时,可以通过扩展已有代码,而不是修改原有代码来实现。 3. **里氏替换原则...

    面向对象设计UML实践.rar

    此外,文件可能还会讨论设计原则,如单一职责原则(SRP)、开放封闭原则(OCP)、里氏替换原则(LSP)、接口隔离原则(ISP)和依赖倒置原则(DIP),这些原则是面向对象设计的核心指导思想。 学习UML并将其应用于...

    Object Oriented Design in Java

    2. **设计原则**:OOD强调设计原则,如单一职责原则(SRP)、开放封闭原则(OCP)、里氏替换原则(LSP)、接口隔离原则(ISP)和依赖倒置原则(DIP)。这些原则指导开发者创建可维护、可扩展的代码结构。 3. **设计...

    面向对象与分析习题及答案

    通过解答这些习题,学习者可以深化对面向对象设计原则的理解,如单一职责原则(SRP)、开放封闭原则(OCP)、里氏替换原则(LSP)、接口隔离原则(ISP)和依赖倒置原则(DIP)。同时,还能提高他们分析问题、建模和...

    面向對象分析設計與UML01.rar

    5. **原则和最佳实践**:包括单一职责原则(SRP)、开放封闭原则(OCP)、里氏替换原则(LSP)、依赖倒置原则(DIP)和接口隔离原则(ISP),这些都是指导良好面向对象设计的基础。 6. **案例研究**:通过实际项目...

    Ruby 面向对象设计实践--2013年

    - **开放封闭原则**(Open/Closed Principle, OCP):软件实体应该是对扩展开放的,对修改封闭的。 - **里氏替换原则**(Liskov Substitution Principle, LSP):子类必须能够替换它们的基类。 - **接口隔离原则**...

    UML for Java Programmers中文版

    本章系统地介绍了单一职责原则(SRP)、开放-封闭原则(OCP)、Liskov替换原则(LSP)、依存关系倒置原则(DIP)、接口隔离原则(ISP)等核心原则。遵循这些原则,可以帮助Java程序员构建更加灵活、扩展性和可复用性...

    UML面向对象设计基础

    2. **开放封闭原则(OCP)**:对扩展开放,对修改封闭。 3. **里氏替换原则(LSP)**:子类应可替换其基类并保持程序行为不变。 4. **依赖倒置原则(DIP)**:依赖于抽象而非具体实现。 5. **接口隔离原则(ISP)**...

Global site tag (gtag.js) - Google Analytics