面向对象设计原则

1、面向对象设计原则概述

软件的可维护性可复用性是两个非常重要的用于衡量软件质量的属性,面向对象设计原则是为了支持可维护性复用而诞生的。这些原则蕴含在很多的设计模式中,并且每个设计模式都符合某一个或者多个设计原则。
设计原则主要有:

设计原则名称定义
单一职责原则 SRP一个对象应该只包含单一的职责,并且该职责被完整的封装在一个类中
开闭原则 OCP软件实体应该对扩展开放,对修改关闭
里氏替换原则 LSP所有引用基类的地方必须能够透明的使用其子类的对象
依赖倒置原则 DIP高层模块不应该依赖低层模块,它们都应该依赖抽象,抽象不应该依赖细节,细节应该依赖抽象
接口隔离原则 ISP客户端不应该依赖哪些它不需要的接口
合成复用原则 CRP优先使用对象组合,而不是通过继承来达到复用的目的
迪米特法则 LoD每一个软件单元对其它单位都应该只有最少的知识,而且局限于那些与本单位密切相关的软件单位

2、单一职责原则:

单一职责原则定义:一个对象应该只包含单一的职责,并且该职责被完整的封装在一个类中。(对于一个类来说,能够引起它发生变化的原因,应该仅有一个。)
单一职责原则是最简单的面向对象设计原则,它用于控制类的粒度大小。
在软件系统中,一个类(大到模块,小到方法)承担的职责越多,那么它能够被复用的可能性就越小。当一个类承担的职责过多时,就相当于将这些类都耦合在了一起,那么当其中的一个职责发生变化的时候就很有可能会影响到其他职责的运作。因此要将这些职责进行分离,不同的职责类封装在不同的类中。

3、开闭原则:

开闭原则定义:软件实体应该对扩展开放,对修改关闭。
开闭原则是最重要的面向对象设计原则,是可复用设计的第一块基石。
在开闭原则的定义中,软件实体可以指一个软件模块,一个有多个类组成的局部结构或者一个独立的类。开闭原则就是指软件实体应该尽量在不修改原有代码的基础之上进行扩展
那么为了满足开闭原则,需要对系统进行抽象化设计,抽象化设计是实现开闭原则的关键。在Java,C#等编程中可以为系统定义一个抽象层,而将不同的实现行为转移到具体的实现层中完成。在很多面向对象的语言中都提供了接口,抽象类等机制,可以通过它们来定义系统的抽象层,然后在通过具体的实现类来进行扩展。如果需要修改系统的行为,无须对抽象层进行任何改动,只需要增加新的具体实现类来实现新的业务功能即可,实现在不修改已有代码的基础之上扩展系统的功能。

4、里氏替换原则:

里氏替换定义:所有引用基类的地方都必须能够透明的使用其子类的对象。
里氏替换表明:在软件中将一个基类对象替换成它的子类对象,程序将不会发生任何异常或者错误,反之不成立,如果一个软件实体使用的是一个子类对象,那么它不一定能够使用基类对象。如:我喜欢动物,那我一定喜欢狗,因为动物是狗的基类;但是我喜欢狗,不能据此断定我就喜欢所有的动物。
里氏替换原则是实现开闭原则的重要方式之一,因为在使用基类对象的地方都可以使用子类对象,所以在程序中尽量**使用基类类型来定义对象,**而在运行时在确定其子类类型,用子类来替换父类。
在使用里氏替换原则时,应该将父类设计成抽象类或者时接口,让子类继承父类或者实现父类接口,并实现父类接口中声明的方法,在运行时子类对象替换父类实例,可以很方便的扩展系统的功能。

5、依赖倒置原则:

依赖倒置原则定义:高层模块不应依赖低层模块,它们都应该依赖抽象。抽象不应该依赖于细节,细节应该依赖于抽象。
依赖倒置原则要求针对接口编程,而不能针对实现编程。依赖倒置原则要求在程序代码中传递参数时或者在关联关系中尽量引用层次高的抽象层类,即使用接口和抽象类进行变量类型声明、参数声明、方法类型声明、以及数据类型的转换等,而不要用具体类来做这些事情。为了确保该原则的应用,一个具体类应当只实现接口或者抽象类中声明的方法,而不要给出多余的方法,否则将无法调用到子类中增加的新方法。
对于依赖倒置原则的更多,更细致的学习,可以参考这位博主的博客:面对对象六大原则——依赖倒置原则

6、接口分离原则:

接口隔离原则定义:客户端不应该依赖那些它不需要的接口
当一个接口太大时需要将他分割成一些更细小的接口,使用该接口的客户端仅需要知道与之相关的接口即可。每一种接口应该承担一种相对独立的角色,不该干的事不干,该干的事都要干。这里面的接口有两种不同的涵义:一种是指一个类型所具有的方法特征的集合,这仅仅是一种逻辑上 的抽象,另一种是指某种语言具体的接口,如java中interface。
对于接口分离原则更多,更细致的学习,推荐这位博主的博客:面向对象六大原则——接口分离原则

7、合成复用原则:

合成复用原则定义:应该优先使用对象组合,而不是通过继承来达到复用的目的。z
参考博客:https://blog.csdn.net/u012361379/article/details/88605867

8、迪米特法则:

参考博客:面向对象六大原则——迪米特法则

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值