依赖倒转原则——里氏代换原则

来源:互联网 发布:cad制图软件 编辑:程序博客网 时间:2024/04/30 13:34

lsp是dip的基础。

一、基本概念

      抽象不应该依赖细节,细节应该依赖抽象。即针对接口编程,不要对实现编程。

A:高层模块不能依赖低层模块,两者都应依赖抽象。

B:抽象不应该依赖细节,细节应该依赖抽象。

     

二、里氏代换原则(LSP)

子类型必须能够替换掉它们的父类型

解释:一个软件实体如果使用的是一个父类的话,那么一定适用于其子类,而且它察觉不出父类对象和子类对象的区别。

        也就是说,在软件里面,把父类都替换成它的子类,程序的行为没有变化。

       只有当子类可以替换父类,软件单位的功能不受到影响时,父类才真正被复用,而子类也能够在父类的基础上增加新的行为。

所以,正是由于子类型的可替换性才使得使用父类类型的模块在无需修改的情况下就可以扩展。

 

三、总结

    高层模块和低层模块都依赖于抽象:

2%XGVP0{ME`GUKI0}`2U_{F

 

 

依赖倒转原则是面向对象的标志,用哪种语言编写程序不重要,如果编写时考虑的是如何针对抽象编程而不是针对细节编程,即程序的所有依赖关系都终止于抽象类或接口。那就是面向对象设计,反之那就是过程化设计。


 所谓依赖倒置原则就是细节要依赖于抽象,抽象不要依赖于细节。简单的说就是要求对抽象进行编程,不要对实现进行编程,即针对接口编程,而不是针对实现编程。这样就降低了客户与实现模块间的耦合。

依赖倒置原则

A.高层模块不应该依赖于底层模块,两个都应该依赖于抽象。

B.抽象不应该依赖于细节,细节应该依赖抽象。

面向过程的开发,上层调用下层,上层依赖于下层,当下层剧烈变动时上层也要跟着变动,这就会导致模块的复用性降低而且大大提高了开发的成本。而一般情况下抽象的变化概率很小,让用户程序依赖于抽象,实现的细节也依赖于抽象。即使实现细节不断变动,只要抽象不变,客户程序就不需要变化。这大大降低了客户程序与实现细节的耦合度。

里氏替换原则:子类型必须能够替换掉它们的父类型。一个软件实体如果是使用的是一个父类的话,那么一定适用于其子类,而且它察觉不出父类对象和子类对象的区别,也就是说,在软件里面,把父类都替换成了它的子类,程序的行为没有变化。


也就是说应当使用Java接口和抽象Java类进行变量的类型声明、参数是类型声明、方法的返还类型说明,以及数据类型的转换等。而不要用具体Java类进行变量的类型声明、参数是类型声明、方法的返还类型说明,以及数据类型的转换等。
要保证做到这一点,一个具体Java类应当只实现Java接口和抽象Java类中声明过的方法,而不要给出多余的方法。



原创粉丝点击