zoukankan      html  css  js  c++  java
  • 面向对象设计原则 里氏替换原则(Liskov Substitution Principle)

    里氏替换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。

    里氏替换原则中说,任何基类可以出现的地方,子类一定可以出现。

    LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。

    如此,问题产生了:“我们如何去度量继承关系的质量?”

    Liskov于1987年提出了一个关于继承的原则

    “Inheritance should ensure that any property proved about supertype objects also holds for subtype objects.”

    “继承必须确保超类所拥有的性质在子类中仍然成立。”

    也就是说,当一个子类的实例应该能够替换任何其超类的实例时,它们之间才具有is-A关系。该原则称为Liskov Substitution Principle——里氏替换原则。

    原则:

         1. 子类必须完全实现父类的抽象方法,但不能覆盖父类的非抽象方法;
         2. 子类中可以增加自己特有的方法;
         3. 当子类的方法重载父类的方法时,方法的前置条件(即方法的形参)要比父类方法的输入参数要更宽松;
         4.当子类的方法实现父类的抽象方法时,方法的后置条件(即方法的返回值)要比父类更严格。

    优点:
         1. 提高代码的重用性,子类拥有父类的方法和属性;
         2. 提高代码的可扩展性,子类可形似于父类,但异于父类,保留自我的特性;

    缺点:
         1. 继承是侵入性的,只要继承就必须拥有父类的所有方法和属性,在一定程度上约束了子类,降低了代码的灵活性;
         2. 增加了耦合,当父类的常量、变量或者方法被修改了,需要考虑子类的修改,所以一旦父类有了变动,很可能会造成
            非常糟糕的结果,要重构大量的代码。



    转载请标明出处

    作者:AaXuan

    地址:http://www.cnblogs.com/Aaxuan

    知识共享许可协议

    本作品采用  知识共享署名 3.0 未本地化版本许可协议  进行许可。

  • 相关阅读:
    西门子S7-300 设置IP、子网掩码
    [WCF编程]9.性能与限流
    [WCF编程]8.服务实例的生命周期
    [WCF编程]7.实例上下文模式
    [WCF编程]6.绑定行为
    [WCF编程]5.绑定概述
    [WCF编程]4.契约概述
    [WCF编程]3.WCF基础
    [WCF编程]2.SOA概述
    [WCF实践]1.WCF使用net.tcp寄宿到IIS中
  • 原文地址:https://www.cnblogs.com/Aaxuan/p/9864520.html
Copyright © 2011-2022 走看看