软件构造之LSP原则

Barbara Liskov (1939- )
MIT
http://www.pmg.csail.mit.edu/~liskov
美国第一位计算机科学方向的女博士
2008年图灵奖获得者
在这里插入图片描述

提出了第一个支持数据抽象的面向对象编程语
言CLU,对现代主流语言如C++/Java/Python
/Ruby/C#都有深远的影响。她所提炼出来的
数据抽象思想,成为软件工程的重要精髓之一。
她提出的“Liskov替换原则”,是面向对象最
重要的几大原则(SOLID)之一。

  1. LSP的含义

里氏替换原则(Liskov Substitution Principle, LSP)的定义和主要思想如下:由于面向对象编程技术中的继承在具体的编程中过于简单,在许多系统的设计和编程实现中,我们并没有认真地、理性地思考应用系统中各个类之间的继承关系是否合适,派生类是否能正确地对其基类中的某些方法进行重写等问题。因此经常出现滥用继承或者错误地进行了继承等现象,给系统的后期维护带来了不少麻烦。这就需要我们有一个设计原则来遵循,它就是替换原则。

LSP指出:子类类型必须能够替换掉它们的父类型、并出现在父类能够出现的任何地方。它指导我们如何正确地进行继承和派生,并合理地重用代码。此原则认为,一个软件实体如果使用一个基类的话,那么一定适用于其子类,而且这根本不能察觉出基类对象和子类对象的区别。

  1. LSP的内容

*子类型可以增加方法,但不可删

  • 子类必须完全实现父类的方法,在类中调用其他类时务必要使用父类或接口,如果不能使用父类或接口,则说明类的设计已经违背了里氏替换原则。

*子类型中重写的方法必须有相同或子类型的返回值

*子类型中重写的方法必须使用同样类型的参数

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

同时,这也可以体现在方法的规约上面。

Same or stronger invariants 更强的不变量
Same or weaker preconditions 更弱的前置条件

Same or stronger postconditions 更强的后置条件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值