当前位置: 首页 > article >正文

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

诸神缄默不语-个人CSDN博文目录

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

文章目录

  • 一、概念定义
  • 二、违反里氏替换原则的常见情况及示例
  • 三、遵循里氏替换原则的好处

一、概念定义

  1. 基本表述
    • 子类型必须能够替换掉它们的基类型。也就是说,在程序中,任何基类可以出现的地方,子类一定可以出现,并且程序的行为不会被破坏。
  2. 从继承关系角度理解
    • 当一个类继承自另一个类时,子类应该完全兼容父类的行为。例如,在一个使用父类引用的场景中,如果将父类引用替换为子类引用后,整个程序的功能逻辑依然正确。

二、违反里氏替换原则的常见情况及示例

  1. 方法签名改变
    • 比如父类有一个方法public int calculate(int a, int b),子类将其改为public double calculate(double a, double b)。这样在使用父类引用调用该方法的地方就会出现类型不匹配的问题。
  2. 方法行为改变
    • 假设父类的withdraw方法在账户余额不足时只是简单返回一个错误码,而子类重写后的withdraw方法在余额不足时会抛出异常。如果程序的其他部分是基于父类的行为逻辑编写的,在使用子类替换父类后就可能导致程序出错。

三、遵循里氏替换原则的好处

  1. 提高代码的可维护性
    • 当需要扩展系统功能时,可以在不修改现有代码的基础上通过继承添加新的子类。因为子类与父类的兼容性保证了替换后的程序依然能正常工作。
  2. 增强代码的可扩展性
    • 方便在不破坏现有架构的情况下增加新的类型层次结构。例如在设计图形绘制系统时,基类Shapedraw方法,各种具体的形状类(如CircleRectangle等)作为子类遵循里氏替换原则,就可以很容易地扩展新的形状类到系统中。
  3. 促进软件设计的合理性
    • 引导开发者正确地设计类的继承关系,避免过度耦合和不合理的继承结构。使得整个软件系统的架构更加清晰、稳定。

http://www.kler.cn/a/500882.html

相关文章:

  • 【物流管理系统 - IDEAJavaSwingMySQL】基于Java实现的物流管理系统导入IDEA教程
  • python类和对象
  • Python实现windows自动关机
  • YARN 架构组件及原理
  • 基于 Python 和 OpenCV 的人脸识别上课考勤管理系统
  • (leetcode算法题)239. 滑动窗口最大值
  • MoMA: 基于多头注意力的动量对比学习知识蒸馏,用于组织病理学图像分析|文献速递-视觉大模型医疗图像应用
  • 安卓studio生成apk步骤
  • 有限元分析学习——Anasys Workbanch第一阶段笔记(9)带孔矩形板与L型支架案例的对称平面处理方案
  • 如何学习Vue设计模式
  • 应急响应之入侵排查(下)
  • VSCode 更好用的设置
  • 2025-1-9 QT 使用 QXlsx库 读取 .xlsx 文件 —— 导入 QXlsx库以及读取 .xlsx 的源码 实践出真知,你我共勉
  • el-date-picker 禁用一个月前、一个月后(当天之后)的时间 datetimerange
  • ssh链接飞牛NAS的时候出现WARNING提示无法正常登录!按照这个可以解决
  • 数据结构与算法之二叉树: LeetCode 700. 二叉搜索树中的搜索 (Ts版)
  • 【网络云SRE运维开发】2025第2周-每日【2025/01/10】小测-【第10章 ACL理论和实操考试】解析
  • Golang——channel
  • DS内排—堆排序
  • LeetCode 521最长特殊序列
  • 【STM32-学习笔记-3-】TIM定时器
  • 【C++开源库】Boost.Asio网络库使用介绍