设为首页 收藏本站
查看: 1361|回复: 0

[经验分享] 面向对象设计原则01之------("开放-封闭"原则(OCP)---对扩展开放,对修改关闭---面向对象设计的核心所在,重点还是抽象,在我们的代码中,所有代码

[复制链接]

尚未签到

发表于 2015-6-17 10:24:44 | 显示全部楼层 |阅读模式
  @完全的关闭是不可能的,设计的时候,猜测出变化,然后抽象出来,隔离这些变化。这是核心思想!!!
  一个国家,两种制度,这在政治上,是伟大的发明。在软件设计模式中,这种不能修改,但可以扩展的思想也是最重要的一种设计原则,它就是开放-封闭原则(The Open-Closeed Principle[ˈprɪnsəpəl],简称OCP)或叫开-闭原则。
      n.     原则,原理;准则,道义;道德标准;本能 
  一,开放-封闭原则:是说软件实体(类,模块,函数等等)应该可以扩展,但是不可修改。
  两个特征:
  1),一个是说,对于扩展是开放的(Open for extension)
  2),另一个是说"对于更改时封闭的(Closed for modification)"
  二,(需求是一定会变化的)我们在做任何系统的时候,都不要指望系统一开始时需求确定,就再也不会变化,这是不现实也不科学的想法,而既然需求是一定会变化的,那么如何在面对需求的变化时,设计的软件可以相对容易修改,不至于说,新需求一来,就要把整个程序推倒重来。怎样的设计才能面对需求的改变缺可以保持相对稳定,从而使得系统可以在第一个版本以后不断推出新的版本呢?开放-封闭给我们答案。设计软件要容易维护又不容易出问题的最好的办法,就是多扩展,少修改!!!
    三,何时应对变化
  1,开放-封闭原则的意思就是说,你设计的时候,时刻要考虑,尽量让这个类是足够好,写好了就不要去修改了,如果新需求来,我们增加一些类就往事了,原来的代码能不动则不动。这可能做到吗?不能,绝对的对修改关闭是不可能的无论模块是多么的封闭,都会存在一些无法对之封闭的变化,既然不可能完全封闭,设计人员必须对于他设计的模块应该对哪种变化封闭做出选择。他必须先猜测出最有可能发生的变化种类,然后构造抽象来隔离那些变化(看总结第二条)。
      2,变化的预测是很难做到的,所以,我们应该再发生小变化时,就及早的去想办法应对发生更大变化的可能,也就是说,等到变化发生时,立即采取行动。正所谓,同一地方,摔第一跤,不是你的错,再次在此摔跤就是你的不对了。
  
  @总结:
  1,面对需求,对程序的改动是通过增加新代码进行的,而不是更改现有的代码。这就是开放-封闭原则的精神所在。
  2,开放-封闭原则是面向对象设计的核心所在。遵循这个原则可以带来面向对象技术所声称的巨大好处,也就是可维护,可扩展,可复用,灵活性好。开发人员应该仅对程序中呈现出频繁变化的那些部分做出抽象,然而,对于应用程序中的每个部分都刻意地进行抽象同样不是一个好主意。拒绝不成熟的抽象和抽象本身一样重要。切记,切记。
  3,该原则在其他原则中都有体现,所以具体实例,可以再其他原则实例中参考!!!--------实例看其他
  4,最核心的原则,最基础的原则,其他一些原则离开了它,就不能存活,也没有了意义,例如,依赖倒置原则,假如不对修改关闭,不对扩展开放,那依赖接口或者抽象类,也就没有了意义。
  ---总之,开放-封闭原则是面向对象最核心的思想,所有代码中,都应该时刻遵循这一原则。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-78097-1-1.html 上篇帖子: OCP读书笔记(22) 下篇帖子: OCP读书笔记(21)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表