里氏替换原则

这篇具有很好参考价值的文章主要介绍了里氏替换原则。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

里氏替换原则

OOP(Object Oriented Programming) 面向对象编程

OO中的继承性的思考
  • 1.继承包含这样一层含义,父类中凡是已经写好的方法,实际上就是设定规范。虽然不强制要求所有子类必须遵守规范(不重写方法),但是如果子类对这些方法,任意修改就会对继承体系造成破坏。
  • 2.继承在程序设计带来便利同时,也带来弊端。使用继承会给程序带来侵入性,程序的可移植性降低,增加了对象间的耦合,如果一个类被其他类继承,则当这个类需要修改时,必须考虑所有的子类,并且父类修改后,所有涉及到的子类的功能可能会受到影响。
  • 3.问题提出,编码中如何正确的使用继承? => 里氏替换原则
基本介绍
  • 1.里氏替换原则(Liskov Substitution Principle)在1988年,由麻省理工学院的里姓女士提出的。
  • 2.如果对每个类T1对象t1,都有类型T2的对象t2,使得以T1定义的所有对象t1替换为t2时,程序的行为不会方式改变,那么T2类是T1的子类。换句话说,所有引用基类的地方,必须能透明的使用其子类的对象。
  • 3.在使用继承时,遵循里氏替换原则,在子类中尽量不要重写父类中写好的方法。
  • 4.里氏替换原则,说明继承让两个类的耦合性增强了,在合适的情况下,可以使用组合,聚合,依赖传递解决问题。
案例1

案例只是为了体现原则的设计,并无实际意义

/**
 * @author 长名06
 * @version 1.0
 * 里氏替换原则 案例1
 * 分析
 *  因为B类继承了A类,且不小心,重写了A类的fun1方法,导致
 *  原有的父类的方法的功能,被破坏,违反了里氏替换原则
 *  所以,在需要重写父类的方法的类关系中,可以将继承关系替换成依赖(组合,聚合)关系
 */
public class Liskov1 {
    public static void main(String[] args) {
        A a = new A();
        System.out.println("2-4=" + a.fun1(2, 4));
        System.out.println("5-4=" + a.fun1(5, 4));

        B b = new B();
        System.out.println("2-4=" + b.fun1(2,4));//要求出2-4
        System.out.println("4-5=" + b.fun1(4,5));//要求出4-5
        System.out.println("4-5 + 9=" + b.fun2(4,5));//要求出4-5 + 9
    }
}

class A {
    public int fun1(int a, int b) {
        return a - b;
    }
}

class B extends A {
    @Override
    public int fun1(int a, int b) {
        return a + b;
    }

    public int fun2(int a, int b) {
        return fun1(a, b) + 9;
    }
}
案例2
/**
 * @author 长名06
 * @version 1.0
 * 使用组合方式 替代继承方式
 */
public class Liskov2 {
    public static void main(String[] args) {
        A a = new A();
        System.out.println("2-4=" + a.fun1(2, 4));
        System.out.println("5-4=" + a.fun1(5, 4));

        B b = new B();
        System.out.println("2-4=" + b.fun3(2,4));
        System.out.println("4-5=" + b.fun3(4,5));
        System.out.println("4+ 5 + 9=" + b.fun2(4,5));
    }
}

class Base{

}

class A extends Base {
    public int fun1(int a, int b) {
        return a - b;
    }
}

class B extends Base {

    private A base = new A();

    public int fun1(int a, int b) {
        return a + b;
    }

    public int fun2(int a, int b) {
        return fun1(a, b) + 9;
    }

    public int fun3(int a,int b){
        return base.fun1(a,b);
    }
}

只是为了记录自己的学习历程,且本人水平有限,不对之处,请指正。文章来源地址https://www.toymoban.com/news/detail-678121.html

到了这里,关于里氏替换原则的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 设计模式:里氏替换原则(详解)

    本博主将用CSDN记录软件开发求学之路上亲身所得与所学的心得与知识,有兴趣的小伙伴可以关注博主!也许一个人独行,可以走的很快,但是一群人结伴而行,才能走的更远! (1)引入 继承包含这样一层含义:父类中凡是已经实现好的方法, 实际上是在设定规范和契约 ,

    2024年02月06日
    浏览(28)
  • 【Java 设计模式】设计原则之里氏替换原则

    在软件开发中,设计原则是创建灵活、可维护和可扩展软件的基础。 这些原则为我们提供了指导方针,帮助我们构建高质量、易理解的代码。 ✨单一职责原则(SRP) ✨开放/封闭原则(OCP) ✨里氏替换原则(LSP) ✨依赖倒置原则(DIP) ✨接口隔离原则(ISP) ✨合成/聚合复

    2024年01月20日
    浏览(32)
  • 基于面向对象基础设计——里氏替换原则

    在Java中,支持抽象和多态的关键机制之一是继承。正是使用了继承,我们才可以创建实现父类中抽象方法的子类。那么,是什么规则在支配着这种特殊的继承用法呢?最佳的继承层次的特征又是什么呢?在什么情况下会使我们创建的类层次结构掉进不符合开闭原则的陷阱中呢

    2024年02月14日
    浏览(37)
  • 设计模式(四):里氏替换原则(详解)

    本博主将用CSDN记录软件开发求学之路上亲身所得与所学的心得与知识,有兴趣的小伙伴可以关注博主!也许一个人独行,可以走的很快,但是一群人结伴而行,才能走的更远! (1)引入 继承包含这样一层含义:父类中凡是已经实现好的方法, 实际上是在设定规范和契约 ,

    2024年02月05日
    浏览(36)
  • 深入理解设计原则之里氏替换原则(LSP)【软件架构设计】

    C++高性能优化编程系列 深入理解软件架构设计系列 深入理解设计模式系列 高级C++并发线程编程 里氏替换原则(Liskov Substitution Principle, LSP)于1986年有Barbara Liskov提出,他当时是这样描述这条原则的: 如果S是T的子类型,那么T的对象可以被S的对象所替换,并不影响代码的运行

    2024年02月07日
    浏览(77)
  • Chapter 15: Object-Oriented Programming | Python for Everybody 讲义笔记_En

    Exploring Data Using Python 3 Dr. Charles R. Severance Python for Everybody 零基础程序设计(Python 入门) This course aims to teach everyone the basics of programming computers using Python. 本课程旨在向所有人传授使用 Python 进行计算机编程的基础知识。 We cover the basics of how one constructs a program from a series of si

    2024年02月07日
    浏览(33)
  • 设计模式:里氏代换原则(Liskov Substitution Principle,LSP)介绍

    里氏代换原则(Liskov Substitution Principle,LSP)是面向对象设计原则的一部分,它强调 子类对象应该能够替换其父类对象而不影响程序的正确性 。换句话说,子类对象应该可以在不改变程序正确性的前提下替换掉父类对象。 该原则的实现原理可以通过以下几点来说明: 子类必

    2024年04月29日
    浏览(31)
  • 里式替换原则(LSP)

    目录 简介: 作用: 过程: 总结: 里式替换原则(Liskov Substitution Principle,简称LSP)的提出者是美国计算机科学家Barbara Liskov。Barbara Liskov是一位计算机科学家,麻省理工学院教授,也是美国第一个计算机科学女博士,师从图灵奖得主John McCarthy教授,人工智能概念的提出者。她在

    2024年02月11日
    浏览(25)
  • 面向对象设计的六大原则(SOLID原则)-——单一职责原则

    单一职责原则(Single Responsibility Principle, SRP)是面向对象编程和设计的五大SOLID原则之一。它强调一个类、方法或模块应该只有一个职责,即只做一件事情。如果一个类承担的职责过多,那么它的可维护性、可读性和可扩展性都会受到影响。当需要修改类的某个职责时,可能

    2024年03月12日
    浏览(78)
  • 面向对象设计的六大原则(SOLID原则)-——开闭原则

    开闭原则(Open-Closed Principle, OCP)是面向对象设计的五大SOLID原则之一。这个原则主张“软件实体(类、模块、函数等)应该对扩展开放,对修改关闭”。也就是说,软件的设计应该允许在不修改原有代码的情况下增加新的功能。这样的设计有助于降低代码的复杂性和维护成本

    2024年03月12日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包