美文网首页乱七八糟风暴
面向对象的三大特性、六大原则

面向对象的三大特性、六大原则

作者: 读书的小二郎 | 来源:发表于2017-08-10 22:55 被阅读0次

    0、三大特性

    封装

    继承

    多态

    1、单一责任原则

          单一责任(Single Responsibility Principle)是优化代码的第一步。定义:有且仅有一个引起它变化的原因。这个原则不光适应于类,也适应方法。因为单一责任的界限并不是那么好划分,所以备受争议,很多时候需要依靠个人经验来界定。很多情况是写代码的工程师不知道自己所写的类或方法的职责是什么。遵循单一职责原则就不会出现类T履行了P1和P2两个职责,而是T1负责P1职责,T2负责P2职责;就不会出现A方法做了B应该执行的任务。

          单一责任带来的好处:1、可以降低类或方法的复杂度,只负责一项职责,其逻辑肯定要比负责多项职责简单的多;2、提高代码的可读性,提高系统的可维护性;3、变更引起的风险降低,变更是必然的,如果单一职责原则遵守的好,当修改一个功能时,可以显著降低对其他功能的影响。

    2、开闭原则

          开闭原则(Open Close Principle)让程序更稳定更灵活。定义:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。当软件需求变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化。我在应对新的或者改变的特性时通常是扩展其功能而实现,修改只因bug而被修改。 开闭原则的重要手段是通过抽象。

    3、里氏替换原则

          里氏替换(Liskov Subsitution Principle)让系统扩展性更好。定义1:如果对每一个类型为 T1的对象 o1,都有类型为 T2 的对象o2,使得以 T1定义的所有程序 P 在所有的对象 o1 都代换成 o2 时,程序 P 的行为没有发生变化,那么类型 T2 是类型 T1 的子类型。里氏替换的核心是抽象,抽象又依赖于继承的特性。

         通俗的来讲就是:子类可以扩展父类的功能,但不能改变父类原有的功能。它包含以下4层含义1、子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法。2、子类中可以增加自己特有的方法。3当子类的方法重载父类的方法时,方法的前置条件(即方法的形参)要比父类方法的输入参数更宽松。4、当子类的方法实现父类的抽象方法时,方法的后置条件(即方法的返回值)要比父类更严格。

    4、依赖倒置原则

           依赖倒置原则(Dependence Inversion Principle)指一种特定的解耦形式,使得高层次的模块不依赖于低层次的模块的实现细节的目的。定义:高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。依赖倒置的核心就是面向抽象编程。模块间的依赖通过抽象发生,实现类之间不发生直接的依赖关系,其依赖关系是通过接口或抽象类产生的。

    5、接口隔离原则

           接口隔离原则(Interface Segregation Principle)让系统拥有更高的灵活性。定义:客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。

          接口隔离原则的含义是:建立单一接口,不要建立庞大臃肿的接口,尽量细化接口,接口中的方法尽量少。我们要为各个类建立专用的接口,而不要试图去建立一个很庞大的接口供所有依赖它的类去调用。

          采用接口隔离原则对接口约束时,要注意以下几点:1、接口尽量小,但是要有限度。如果过小,则会造成接口数量过多,使设计复杂化。2、为依赖接口的类定制服务,只暴露给调用的类它需要的方法,它不需要的方法则隐藏起来。只有专注地为一个模块提供定制服务,才能建立最小的依赖关系。3、提高内聚,减少对外交互。使接口用最少的方法去完成最多的事情。

    6、迪米特原则

          迪米特原则(Law of Demeter)也称为最少知识原则。定义:一个对象应该对其他对象保持最少的了解。迪米特原则落实了软件编程的总的原则:低耦合,高内聚。

           迪米特法则的初衷是降低类之间的耦合,由于每个类都减少了不必要的依赖,因此的确可以降低耦合关系。但是凡事都有度,虽然可以避免与非直接的类通信,但是要通信,必然会通过一个“中介”来发生联系,过分的使用迪米特原则,会产生大量这样的中介和传递类,导致系统复杂度变大。所以在采用迪米特法则时要反复权衡,既做到结构清晰,又要高内聚低耦合。

    参考:

    http://www.uml.org.cn/sjms/201211023.asp#3


    相关文章

      网友评论

        本文标题:面向对象的三大特性、六大原则

        本文链接:https://www.haomeiwen.com/subject/tprkrxtx.html