标签:改动 软件开发 扩展 面向对象 抽象 模块 敏捷 OCP
第9章 开放-封闭原则
任何系统在其生命中都会发生变化。如果我们期望开发出的系统不会在第1版后就被抛弃,就必须牢记这一点。
1. 开放-封闭原则
软件实体(类、模块、函数等等)应该是可以扩展的,但是不可以修改的。、
如果程序中的一处改动就会产生连锁反应,导致一系列相关模块的改动,那么设计就具有僵化性的臭味。如果正确地应用OCP,那么以后再进行同样的改动时,就只需要添加新的代码,而不必改动已经正常运行的代码。
2. 描述
两个主要特征:1. 对于扩展是开发的。2. 对于更改是封闭的。扩展模块行为的通常方式就是修改该模块的源代码。不允许修改的模块常常都被认为是具有固定的行为。
3. 关键是抽象
在面向对象编程中,可以创建出固定却能够描述一组任意个可能行为的抽象体。这个抽象体就是抽象基类。而这一组任意个可能的行为则表现为可能的派生类。
模块可以操作一个抽象体。由于模块依赖于一个固定的抽象体,所以它对于更改可以关闭的。同时,通过从这个抽象体派生,也可以扩展此模块的行为。
4. 结论
在许多方面,OCP都是面向对象设计的核心所在。遵循这具原则可以带来面向对象技术所声明的巨大好处。然而,并不是说只要使用一种面向对象语言就是遵循了这个原则。对于应用程序中的每个部分都肆意地进行抽象同样不是一个好主意。正确的做法是,开发人员应该仅仅对程序中呈现出频繁变化的那些部分做出抽象。拒绝不成熟的抽象和抽象本身一样重要。
标签:改动,软件开发,扩展,面向对象,抽象,模块,敏捷,OCP 来源: https://blog.csdn.net/gzzhy/article/details/94450395
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。