面向对象设计(OOD):里氏替换原则

里氏替换原则(LSP)由Liskov女士于1987年提出,是面向对象设计的重要原则之一,强调子类应能在不改变程序正确性的前提下替换父类。遵循LSP有助于保持代码的稳定性和可扩展性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是里氏替换原则?

里氏替换原则(Liskov Substitution Principle LSP)由麻省理工学院计算机科学实验室的Liskov女士在1987 年的“面向对象技术的高峰会议”(OOPSLA)上发表的一篇文章《数据抽象和层次》(Data Abstraction and Hierarchy)里提出来的,她提出:继承必须确保超类所拥有的性质在子类中仍然成立。

Liskov女士是美国计算机科学家,是08年图灵奖获得者 & 04年冯诺依曼奖得主,是美国工程院院士 & 美国艺术与科学院院士 & 美国计算机协会会士,也是美国第一位计算机女博士。

里氏替换原则是面向对象设计的基本原则,是继承复用的基石。

通俗一点讲就是,LSP要求在软件代码中,父类对象出现的地方被替换成子类可以无差错的运行。换言之,引用基类的地方必须能够透明的使用子类对象,行为不会改变。

里氏替换原则的约束

要实现上述目标,意味着符合里氏替换原则的设计需要满足如下约束:

  • 确保继承体系模塑的是IS-A关系,子类对象可以完全替代父类对象。

  • 应把基类设计成抽象类,而非具象类;应从抽象类派生子类,而不应从具象类继承。

  • 子类应该实现父类的抽象方法,而不应该重写父类的已实现方法。

  • 子类可以扩充新的功能,而不应该改变父类已有的功能。

  • 子类不能增添任何父类没有的附加约束。

里氏替换原则能带来哪些好处?

  • 里氏替换原则符合开闭原则(对扩展开放对修改封闭)的设计要求,子类可以扩充父类功能,而不会改变父类的功能。

  • 它克服了继承中重写父类造成的可复用性变差的缺点。

  • 它为系统正确性提供保障,即类的扩展不会给已有的系统引入新的错误,降低了代码出错的可能性。

实施要点

  • 行为集中的方向向上(向抽象基类的方向),数据集中的方向向下(向具象子类的方向)

  • 违背LSP的最常见情况就是父子类都是可实例化的可具象类,不应该从可具象的类派生,而应该从抽象类或者接口派生。

  • 基于契约的设计(DBC:Design By Contract),契约是通过为每个函数声明的前置条件和后置条件来指定的,要是一个方法得以正确执行,调用者需要确保满足前置条件,实现者需要确保符合后置条件。

经典示例

  1. 正方形不是长方形

  2. 鸵鸟不是鸟

"sgmediation.zip" 是一个包含 UCLA(加利福尼亚大学洛杉矶分校)开发的 sgmediation 插件的压缩包。该插件专为统计分析软件 Stata 设计,用于进行中介效应分析。在社会科学、心理学、市场营销等领域,中介效应分析是一种关键的统计方法,它帮助研究人员探究变量之间的因果关系,尤其是中间变量如何影响因变量与自变量之间的关系。Stata 是一款广泛使用的统计分析软件,具备众多命令和用户编写的程序来拓展其功能,sgmediation 插件便是其中之一。它能让用户在 Stata 中轻松开展中介效应分析,无需编写复杂代码。 下载并解压 "sgmediation.zip" 后,需将解压得到的 "sgmediation" 文件移至 Stata 的 ado 目录结构中。ado(ado 目录并非“adolescent data organization”缩写,而是 Stata 的自定义命令存放目录)目录是 Stata 存放自定义命令的地方,应将文件放置于 "ado\base\s" 子目录下。这样,Stata 启动时会自动加载该目录下的所有 ado 文件,使 "sgmediation" 命令在 Stata 命令行中可用。 使用 sgmediation 插件的步骤如下:1. 安装插件:将解压后的 "sgmediation" 文件放入 Stata 的 ado 目录。如果 Stata 安装路径是 C:\Program Files\Stata\ado\base,则需将文件复制到 C:\Program Files\Stata\ado\base\s。2. 启动 Stata:打开 Stata,确保软件已更新至最新版本,以便识别新添加的 ado 文件。3. 加载插件:启动 Stata 后,在命令行输入 ado update sgmediation,以确保插件已加载并更新至最新版本。4
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值