面向对象设计原则--开放封闭原则(OCP)

原创 2007年10月08日 16:20:00

名思义,既开放又封闭,对扩展是开放的,对更改是封闭的!

扩展即扩展现行的模块,当我们软件的实际应用发生改变时,出现新的需求,就需要我们对模块进行扩展,使其能够满足新的需求!

更改封闭即是在我们对模块进行扩展时,勿需对源有程序代码和DLL进行修改或重新编译文件!

这个原则对我们在设计类的时候很有帮助,坚持这个原则就必须尽量考虑接口封装,抽象机制和多态技术!

举个典型的例子,现在我们要写一个机动车类,机动车有汽车,摩托车,电动车等多种车型
如果我们不坚持OCP,直接写一个类封装机动车的开车,刹车,停车等基本方法
而每种车型对这些方法的具体实现细节是不尽相同的!
如果我们允许修改,即把现在所能想到的所能看见的车型都放在一个类里实现(通过方法重载或者方法内判断),谁也不能保证未来会否出现新的机动车型,一旦出现新的机型,而在软件中必须要实现这种车型,这个时候我们能做的只有找出这个类文件
在每个方法里加上这种车型的实现细节并重新编译成DLL!虽然在.NET的运行环境中,我们只要将新的DLL覆盖到原有的DLL即可,
并不影响现有程序的正常运行,但每次出现新情况都要找出类文件,添加新的实现细节,这个类文件不断扩大,以后维护起来
就变的越来越困难,也并不满足我们以前说的单一职责原则(SAP),因为每一种车型的变化都会引起对这个类的改变动机!

如果我们在设计这个类的时候坚持了OCP的话,把机动车型的公共方法抽象出来做成一个接口,封闭修改,在客户端(使用该接口的类对象)只依赖这个接口来
实现对自己所需要的车型,以后在新的功能模块中需要新的车型,只要扩展一个具体车型实现我们先前定义的接口,就可以正常使用,而不比
重新修改原有类文件!
这也是我们注重在设计类的时候坚持开放封闭的原则! 

下面是我用ROSE画出我上面所举例子的UML图

面向对象设计原则.pdf

  • 2013年02月08日 10:14
  • 64KB
  • 下载

面向对象设计原则 面向对象设计原则

  • 2010年04月14日 11:05
  • 197KB
  • 下载

设计模式六大原则——开放封闭原则(OCP)

什么是开闭原则?       定义:是说软件实体(类、模块、函数等等)应该可以扩展,但是不可修改。       开闭原则主要体现在两个方面:       1、对扩展开放,意味着有新的需求或变化时,可以...
  • u010853701
  • u010853701
  • 2014-04-30 20:37:55
  • 3361

php面向对象的设计原则之开发-封闭原则(OCP)

php面向对象的设计原则之开发-封闭原则,体现该原则的关于播放器的一个简单举例。...
  • dnidong
  • dnidong
  • 2017-02-26 10:07:36
  • 321

开放封闭原则(The Open-Closed Principle 、OCP)

抽象依赖原则:为了应对需求变化,代码中要尽可能地使用(依赖)抽象类型,而非具体类。 而不把开放封闭原则(The Open-Closed Principle 、OCP)作为重点加以介绍,主要是因为开放封...
  • yqj2065
  • yqj2065
  • 2016-12-07 18:01:36
  • 904

面向对象设计原则(SRP,OCP,LSP,DIP,ISP)

  • 2011年08月31日 11:14
  • 153KB
  • 下载

开放-封闭原则详解--七大面向对象设计原则(5)

开闭原则来源:        在软件的生命周期内,因为变化、升级和维护等原因需要对软件原有代码进行修改时,可能会给旧代码中引入错误,也可能会使我们不得不对整个功能进行重构,并且需要原有代码经过重新测试...
  • fanyun_01
  • fanyun_01
  • 2016-07-16 07:20:22
  • 713

C#开放和封闭原则

Software entities(classes,modules,functions etc) should open for extension ,but close for modificati...
  • sinat_35551809
  • sinat_35551809
  • 2016-07-25 10:50:07
  • 537

设计模式之工厂方法模式和开放-封闭原则

设计模式之工厂方法模式和开放-封闭原则            以下所有仅供记录和参考,如有问题,我也没办法,但还是请:转载注明出处。            关于简单工厂模式参见之前写的设计模式之简单工...
  • u011215133
  • u011215133
  • 2017-03-23 12:19:28
  • 350
收藏助手
不良信息举报
您举报文章:面向对象设计原则--开放封闭原则(OCP)
举报原因:
原因补充:

(最多只允许输入30个字)