`
wangke0611
  • 浏览: 168862 次
  • 性别: 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设计基本原则整理.doc

    OOD设计基本原则 一. 开-闭原则 :我们改变不了历史,但我们可以改变未来。

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

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

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

    OCP原则 里氏替换原则 依赖倒置原则 接口隔离原则 聚合与继承原则 单一职责原则 Separation of concerns Principle Pareto Principle (帕雷多原则 80/20原则)

    类的设计原则

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

    如何解释OOD及设计

    看外国专家简单明了讲解如何解释OOD及设计

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

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

    面向对象设计OOD思想

    面向对象设计(OOD)思想(示例代码见文末下载连接)收藏 有了思想才能飞翔,缺乏灵活就象少了轮子的汽车,难以飞奔。为了更好的理解设计思想,结合一个尽可能简洁的实例来说明OOD、设计模式及重构。通过下面的代码,...

    OOD启思录 高清pdf

     全书共11章,总结出了60多条面向对象设计(OOD)的指导原则。这些经验原则涵盖了从类到对象(主要强调它们之间的关系,包括关联、使用、包含、单继承、多继承)到面向对象物理设计的重要主题。本书将帮助你理解经验...

    面向对象设计原则

    OOD六大设计原则及其内涵,用实例解析

    什么是OOA与OOD

    点来认识现实世界、设计问题的可行解,随之也就出现了许多OOA和OOD方法。但这些方法 还不很成熟,在OOA与OOD的边界划分上也存在着争议。如:有人认为面向对象软件开发 过程可以分为面向对象分析、面向对象设计和面向...

    如何向妻子解释面向对象设计(OOD)

    如何向妻子解释面向对象设计(OOD)

    OOD面试应对方法 SOLID原则.mp4

    S - Single-responsiblity principle 单一责任原则 O - Open-closed principle 开发封闭原则 L - Liskov substitution principle 里氏替换原则 I - Interface segregation principle 接口分离原则 D - Dependency ...

    七大原则&&六大关系

    开-闭原则(Open-Closed Principle, OCP):一个软件实体应当对扩展开发,对修改关闭.说的是,再设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展.换言之,应当可以在不必修改源代码的情况下改变这个模块的...

    如何向妻子解释OOD和设计模式——桥接模式

    包含两篇文档:如何向妻子解释OOD和如何向妻子解释设计模式。 ——国外程序员通过对话方式浅显易懂的描述。关于设计模式原文仅更新了一个桥接模式,so 并不是23种都有,但对思想有一定帮助。

    OOD启思录(高清)

    OOD设计很好的教材,高清 OOD启思录

    OOD:OOD设计模式的实现

    OOD 总结各种设计模式应用的小项目

    ATM_Java_源代码(OOA、OOD设计模式)

    面有两个帐号: 帐号:1 PIN:42 帐号:2 PIN:1234 原文是如下: To run the simulation above, you need to do the following: 1.Click on the "ON" button (lower right-hand corner) to turn the ATM on. ...

    面向对象设计(OOD)方法

    软件工程里的面向对象设计方法介绍

Global site tag (gtag.js) - Google Analytics