面向对象三大特征以及六大原则
文章内容部分来自:
http://c.biancheng.net/view/1331.html
详细信息查考该链接
面向对象:在考虑解决一些问题时从对象的角度出发。在面对大的需求的时候,要从大的方面解析软件系统应该做什么,而不是怎么去做。具体的事物抽象化,抽象的事物具象化。
类:从客观存在的事物和事物之间的关系,舍弃个别的非本质的特性,归纳出有关的对象以及对象之间的联系或者是一些共性的本性的过程,并将具有相同特征以及属性的对象归纳到一个class当中。这是对有相同特性或者行为的事物的一个统称,所以是不能够直接使用的。这类好比坦克图纸,是不能够上天的。类是一个抽象的模板。
对象:因为类并不能直接使用,必须要通过实例化,创建出来才能用,这就是坦克图纸和坦克的关系。
三大特征:
封装: 封装属性和方法
将每种影响单独做成类,就是将每一个的变化点分解到不同的类当中。
继承: 实现代码的重用。
子类会继承父类的所有属性以及方法,当然在作为子孙类就会继承得更多。而子类在访问不了父类的私有方法时,可以通过父类的一些公有方法进行间接对父类的私有变量和方法的访问。
多态:对封装和继承的功能的扩展。
调用父类“抽象的”方法,执行子类“具体的”方法,而在父类的方法和功能不能满足子类的使用时,就会覆盖父类那个相对抽象的方法,并在其基础上进行功能的扩展。这会让子类具有其独有的个性,也就是对父类的方法进行重写。
六大原则
开闭原则:
开:增加新的功能或者效果。闭:不能对客户代码进行修改。当应用的需求改变时,在不修改软件实体的源代码或者二进制代码的前提下,可以扩展模块的功能,使其满足新的需求。
- 对软件测试的影响
软件遵守开闭原则的话,软件测试时只需要对扩展的代码进行测试就可以了,因为原有的测试代码仍然能够正常运行。 - 可以提高代码的可复用性
粒度越小,被复用的可能性就越大;在面向对象的程序设计中,根据原子和抽象编程可以提高代码的可复用性。 - 可以提高软件的可维护性
遵守开闭原则的软件,其稳定性高和延续性强,从而易于扩展和维护。
单一职责:
一个有且只有一个改变的原因,一些需求的改变,只需加入一个新的类,其他不改。MVC
依赖倒置:
调用抽象的父,不要调用具体的子类,抽象不要依赖具体。高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象,其核心思想是:要面向接口编程,不要面向实现编程。降低客户和实现模块之间的耦合度。
组合复用:
也叫合成复用原则,是通过将已有的对象纳入新对象中,作为新对象的成员对象来实现的,新对象可以调用已有对象的功能,从而达到复用。应该需要优先考虑,最后才考虑继承的方法来进行复用。
里氏替换:
原为继承复用的基础,反应基类与子类之间的关系,克服了继承中重写父类造成的可复用性变差的缺点。子类可以扩展父类的功能,但不能修改父类的功能,并且扩展不会给已有的系统引入新的错误,降低了代码出错的可能性。
迪米特法则:
又叫做最少知识原则,只与你的直接朋友交谈,不跟“陌生人”说话。其含义是:如果两个软件实体无须直接通信,那么就不应当发生直接的相互调用,可以通过第三方转发该调用。其目的是降低类之间的耦合度,提高模块的相对独立性。降低了类之间的耦合度,提高了模块的相对独立性。由于亲合度降低,从而提高了类的可复用率和系统的扩展性。增加系统的复杂性,使模块之间的通信效率降低。