当前位置: 首页 > 工具软件 > lsp-mode > 使用案例 >

LSP原则

李意致
2023-12-01

里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。里氏代换原则是对“开-闭”原则的补充。实现“开-闭”原则的关键步骤就是抽象化。而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。

1、子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法;

 2、子类中可以增加自己特有的方法。

 具体表现在:

1、子类必须实现父类所有非私有的属性和方法,或子类的所有非私有属性和方 法必须在父类中声明。即,子类可以有自己的“个性”,这也就是说,里氏 代换原则可以正着用,不能反着用(在项目中,采用里氏替换原则时,尽量 避免子类的“个性”,一旦子类有“个性”,这个子类和父类之间的关系就 很难调和了)。根据里氏代换原则,为了保证系统的扩展性,在程序中通常 使用父类来进行定义,如果一个方法只存在子类中,在父类中不提供相应的 声明,则无法在以父类定义的对象中使用该方法。

•2、尽量把父类设计为抽象类或者接口。让子类继承父类或实现父接口,并实现 在父类中声明的方法,运行时,子类实例替换父类实例,我们可以很方便地 扩展系统的功能,同时无须修改原有子类的代码,增加新的功能可以通过增 加一个新的子类来实现

这个原则在使用中有如下约束:

1、子类型可以增加方法,但不可删除

2、子类型需要实现抽象类型中的所有未实现方法

3、子类型中重写的方法必须有相同或子类型的返回值或者符合co-variance的参数

4、子类型中重写的方法必须使用同样类型的参数或者符合contra-variance的参数

5、子类型中重写的方法不 能抛出额外的异常

总体而言,就是子类型规约更强 :更强的不变量、更弱的前置条件以及更强的后置条件

 类似资料: