设计模式:里氏代换原则(Liskov Substitution Principle,LSP)介绍

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

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

该原则的实现原理可以通过以下几点来说明:

  1. 子类必须完全实现父类的抽象方法: 子类继承父类时,必须实现父类中声明的所有抽象方法,并且保持方法签名和语义的一致性。

  2. 子类可以具有比父类更广的行为: 子类可以扩展父类的功能,但不能收缩或修改父类已有的功能。也就是说,子类可以在父类的行为基础上进行扩展,但不能修改或删除父类已有的行为。

  3. 子类返回类型必须与父类兼容: 子类方法的返回类型必须与父类方法的返回类型兼容,这意味着子类方法的返回值可以是父类方法返回值的子类型。

在 Python 中,实现里氏代换原则可以通过以下方式:

# 抽象类 计算面积函数
class Shape:
    def area(self):
        pass

'''  解藕 '''
# 继承,子类
class Rectangle(Shape):
    def __init__(self, width, height):
        self.width = width
        self.height = height

    def area(self):
        return self.width * self.height

class Square(Shape):
    def __init__(self, side_lenth):
        self.side_length = side_lenth

    def area(self):
        return self.side_length ** 2

# 计算面积
'''
由于 Rectangle 和 Square 都是 Shape 的子类,并且都实现了 area() 方法
所以它们可以 在不影响程序正确性的前提下 替换 Shape 对象。这符合里氏代换原则的要求
'''
def cal_area(shape):
    return shape.area()



rectangle = Rectangle(2,3)
square = Square(5)

print(cal_area(rectangle))
print(cal_area(square))

6
25文章来源地址https://www.toymoban.com/news/detail-861688.html

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

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

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

相关文章

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

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

    2024年02月05日
    浏览(48)
  • 【设计模式】设计原则-开闭原则

    定义 作用 1、方便测试;测试时只需要对扩展的代码进行测试。 2、提高代码的可复用性;粒度越小,被复用的可能性就越大。 3、提高软件的稳定性和延续性,易于扩展和维护。 实现方式 通过“抽象约束、封装变化”来实现开闭原则。通过接口或者抽象类为软件实体定义一

    2024年02月15日
    浏览(37)
  • 前端设计模式和设计原则之设计原则

    1 开闭原则 该原则指出软件实体(类、模块、函数等)应该 对扩展开放,对修改关闭 。也就是说,在添加新功能时,应该通过扩展现有代码来实现,而不是直接修改已有的代码。这样可以确保现有代码的稳定性,并且减少对其他部分的影响。 在上述例子中,有一个原始功能

    2024年02月07日
    浏览(39)
  • 设计原则学习之里氏替换原则

    以下内容均来自抖音号【it楠老师教java】的设计模式课程。 1 、原理概述 子类对象(objectofsubtype/derivedclass)能够替换程序(program)中父类对象(objectofbase/parentclass)出现的任何地方,并且保证原来程序的逻辑行为(behavior)不变及正确性不被破坏。 2、简单的示例1 // 基类:

    2024年02月14日
    浏览(35)
  • 【Java 设计模式】设计原则之开放封闭原则

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

    2024年02月02日
    浏览(49)
  • 设计模式——设计模式以及六大原则概述

    设计模式代表有经验的面向对象软件开发人员使用的最佳实践。 设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。 这些解决方案是由许多软件开发人员在相当长的时间内通过试错获得的。 在 1994 年,由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 四

    2024年02月13日
    浏览(51)
  • 设计模式的设计原则

    为什么需要设计模式? 我的理解设计模式就是一种针对某种问题的套路,是一套被反复使用,多数人所知晓的,经过分类编目的,代码设计经验的总结。 1.开闭原则 1.1 定义:     一个软件实体应当对扩展开放,对修改关闭,即软件实体应尽量在不修改原有代码下进行扩展

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

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

    2024年02月07日
    浏览(88)
  • 设计模式-原则篇-01.开闭原则

    ​ 可以把设计模式理解为一套比较成熟并且成体系的建筑图纸,经过多次编码检验目前看来使用效果还不错的软件设计方案。适用的场景也比较广泛,在使用具体的设计模式之前先要学习软件设计的基础 “软件设计原则”,后面的23个设计模式都是遵从“软件设计原则演变而

    2024年02月09日
    浏览(43)
  • 软件设计模式原则(二)开闭原则

    继续讲解第二个重要的设计模式原则——开闭原则~ 一.定义         开闭原则,在面向对象编程领域中,规定“软件中的对象(类,模块,函数等等)应该对于扩展是开放的,但是对于修改是封闭的”,这意味着一个实体是允许在不改变它的源代码的前提下变更它的行为

    2024年02月06日
    浏览(50)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包