码迷,mamicode.com
首页 > 其他好文 > 详细

Liskov替换原则

时间:2017-07-25 01:11:19      阅读:262      评论:0      收藏:0      [点我收藏+]

标签:好的   重要   类关系   对象   继承   改变   它的   语言   定义   

Liskov替换原则是一个关于设计父类和子类关系的原则。

它的定义很有数学感:

若对每个类型S的对象o1,都存在一个类型T的对象o2,使得在所有针对T编写的程序P中,用o1替换o2后,程序P的行为功能不变,则S是T的子类型。

这个很类似于高等数学的根基极限的定义:

一个数列a,对于任何给定的一个正数e,存在一个正整数N,当整数n大于N的时候,a(n)-a‘的绝对值小于e,则称a‘为数列a的极限。

不过个人感觉,这个功能不变定义的相当模糊,功能是一个契约,是一个对客户的承诺,功能的定义很大程度在于客户的看法。比如一个打印的功能,父类是一个普通的打印,子类A是加上时间戳的打印,子类B是不打印。一般都会认为A可以替代父类,B不行。但是在某些情况下B反而是需要的,比如这个程序还掺着其它打印,打印太多反而影响了其它重要的打印。好的做法是创建一个抽象类,这三个类都继承抽象类。

一般来说,接口的功能都是由类的成员属性决定的,如果子类继承的函数直接改变了父类的某个成员属性,子类的这个函数就不能替换父类,这就是一个不好的设计。因为其它另外一个函数可能使用了这个成员属性,这子类中的另外一个函数就不能替换父类。而继承接口就不会存在这个问题,因为接口没有成员属性,另外接口的函数都是抽象的,没有具体的功能。

Liskov替换原则只有在支持面向对象的语言里面才有用,这个和依赖倒置原则不一样,依赖倒置原则是关于模块的。

Liskov替换原则

标签:好的   重要   类关系   对象   继承   改变   它的   语言   定义   

原文地址:http://www.cnblogs.com/zhangshuliai/p/7231797.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!