程序员必备的七大面向对象设计原则
openkk 12年前
<h1>花絮</h1> <p> 每天都在和面向对象打交道,但是我们在应用面向对象的时候感觉自己的面向对象技术应用的很合理?理解的很到位?应用的很到位?用的时候恰到好处?用的是否符合软件的发展趋势?</p> <p><span style="background:white;color:#333333;"> 上面很多一连串的问题,没有把你搞晕吧!我想说的面向对象的应用也有面向对象的原则,一个程序员的编程素质从一个小例子几十行代码就可以展现出来。面向对 象编程是是面向对象的基础中的基础,废话不多说,你要遵循下面向对象的原则编程,那你的编程水平才会大幅度提高!</span></p> <h1><span style="background:white;color:#333333;">思考</span></h1> <p><span style="background:white;color:#333333;"> 大家可以想象为什么你去面试的是时候一般会给你一小段程序让你去编写?这样的有什么意义?主考官的出题目的是什么?我们应该怎么显示自己代码素质?</span></p> <p><span style="background:white;color:#333333;"> 我想这个问题我们在面试的时候应该好好想一下,因为这样我们才能更好的应对面试,更好的展现我们的才华,公司更喜欢录用你,而你要更高薪金是很轻而易举的事情。</span></p> <p><span style="background:white;color:#333333;">答案是:一小段代码就能显示我们的代码素质,去面试实现简简单单的功能并不是很牛,而是把自己的编程思维展现给别人(编程思维培养请看:</span><u><span style="background:white;color:#333333;"><a href="/misc/goto?guid=4958340069200726995"><span style="color:#333333;">“菜鸟”程序员和“大神”程序员差距在哪里</span></a></span></u><span style="background:white;color:#333333;">),而最重要的是展现出软件的功能的可维护性和复用性,因为这样编程的才是自己思维的结晶,编程的后期维护带来了极大的好处,所以说软件功能的可维护性和复用性是软件的发展潜力,软件的这个方面才是最重要的!</span></p> <p> <img style="background-color:white;width:538px;height:266px;color:#333333;" alt="程序员必备的七大面向对象设计原则 " src="https://simg.open-open.com/show/2b5f746d714bcbf23003a4cbd1a8d21a.jpg" width="590" height="292" /></p> <p><span style="color:#333333;"> <img style="width:551px;height:276px;" alt="程序员必备的七大面向对象设计原则 " src="https://simg.open-open.com/show/59b746d5bf1e1cb7774d92ad2bc938f8.jpg" width="605" height="304" /><br /> </span></p> <p><span style="background:white;color:#333333;"><br /> </span></p> <p></p> <p> 通过这两幅图片你就可以认识到他们的重要性了吧,因为他们是这个行业的顶级专家,他们的思想是这么高,我们不应该好好的学习一下巨人的思想吗?答案是肯定的。</p> <blockquote style="padding-bottom:0px;margin:0px 0px 0px 40px;padding-left:0px;padding-right:0px;padding-top:0px;"> <p></p> <p>个人理解观点:</p> <p></p> <p>软件的复用(Reuse)或重用拥有众多优点,如可以提高软件的开发效率,提高软件质量,节约开发成本,恰当的复用还可以改善系统的可维护性。</p> <p></p> <p>面向对象设计复用的目标在于实现支持可维护性的复用。 </p> <p></p> <p>在面向对象的设计里面,可维护性复用都是以面向对象设计原则为基础的,这些设计原则首先都是复用的原则,遵循这些设计原则可以有效地提高系统的复用性,同时提高系统的可维护性。</p> <p></p> <p>面向对象设计原则和设计模式也是对系统进行合理重构的指南针,重构(Refactoring)是在不改变软件现有功能的基础上,通过调整程序代码改善软件的质量、性能,使其程序的设计模式和架构更趋合理,提高软件的扩展性和维护性。</p> </blockquote> <p><span style="background:white;color:#333333;"><br /> </span></p> <h1><span style="background:white;color:#333333;">面向对象原则综述</span></h1> <div> <span style="color:#333333;">七大原则总脉络图:</span> </div> <p><span style="background:white;color:#333333;"> <img style="width:555px;height:375px;" alt="程序员必备的七大面向对象设计原则 " src="https://simg.open-open.com/show/e807430d49fefad8faf5c6fda6f85480.jpg" width="578" height="391" /><br /> </span></p> <p><span style="background:white;color:#333333;"> 注:1,2,3,4,5显示的重要等级</span></p> <p></p> <p> 常用的面向对象设计原则包括7个,这些原则并不是孤立存在的,它们相互依赖,相互补充。</p> <p> <img alt="程序员必备的七大面向对象设计原则 " src="https://simg.open-open.com/show/c269af7f2895145551ec0df190c2d219.jpg" width="576" height="248" /></p> <p> </p> <h1>下面就是面向对象七个原则的一一解析</h1> <h1>一、 开闭原则</h1> <p></p> <p>1. 开闭原则定义 :一个软件实体应当对扩展开放,对修改关闭。也就是说在设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展,即实现在不修改源代码的情况下改变这个模块的行为。</p> <p></p> <p>2. 开闭原则分析:</p> <p>(1)开闭原则由Bertrand Meyer于1988年提出,它是面向对象设计中最重要的原则之一。</p> <p>(2)在开闭原则的定义中,软件实体可以指一个软件模块、一个由多个类组成的局部结构或一个独立的类。</p> <p>(3)抽象化是开闭原则的关键。</p> <p>(4)开闭原则还可以通过一个更加具体的“对可变性封装原则”来描述,对可变性封装原则(Principle of Encapsulation of Variation,EVP)要求找到系统的可变因素并将其封装起来。</p> <p></p> <p>3. 开闭原则实例:</p> <p></p> <p> 某图形界面系统提供了各种不同形状的按钮,客户端代码可针对这些按钮进行编程,用户可能会改变需求要求使用不同的按钮,原始设计方案如图所示:</p> <p></p> <p> <img alt="程序员必备的七大面向对象设计原则 " src="https://simg.open-open.com/show/d73931722be4e5499d72915d09c53391.jpg" width="417" height="142" /></p> <p></p> <p> 图(1)</p> <p><span style="color:#333333;"> 现对该系统进行重构,使之满足开闭原则的要求。</span></p> <p></p> <p> <img alt="程序员必备的七大面向对象设计原则 " src="https://simg.open-open.com/show/963e1f48d43a6a195c341796cd989f80.jpg" width="563" height="305" /><span style="background-color:white;"> 图(2)</span></p> <p></p> <p><span style="background-color:white;">对比分析</span></p> <p>图(1):客户端的一个方法直接调用加法类,但是我想添加一个减法类,你就会发现添加减法类就得改变加法类中代码(用switch语句实现),这就违背了“开闭原则”,于是我们就应该重新重构。</p> <p>如图(2)在这个图中我们添加了一个运算类的父类,这样我们再添加减法类的时候就不用修改客户端类。</p> <p></p> <h2>开闭原则总结:面对需求,对程序的改动是通过增加新代码进行的,而不是改变原来的代码。</h2> <h1>预知后面六种原则,请听下回分解,未完待续。。。</h1> <p><br /> 来自:<a href="/misc/goto?guid=4958340069994469108" target="_blank">http://blog.csdn.net/qiulongtianshi/article/details/7570021</a></p>