当前位置 博文首页 > 文章内容

    无欲则刚的博客:面向对象程序设计的六基本原则

    作者:shunshunshun18 栏目:未分类 时间:2021-10-17 17:33:52

    本站于2023年9月4日。收到“大连君*****咨询有限公司”通知
    说我们IIS7站长博客,有一篇博文用了他们的图片。
    要求我们给他们一张图片6000元。要不然法院告我们

    为避免不必要的麻烦,IIS7站长博客,全站内容图片下架、并积极应诉
    博文内容全部不再显示,请需要相关资讯的站长朋友到必应搜索。谢谢!

    另祝:版权碰瓷诈骗团伙,早日弃暗投明。

    相关新闻:借版权之名、行诈骗之实,周某因犯诈骗罪被判处有期徒刑十一年六个月

    叹!百花齐放的时代,渐行渐远!



    1单一职责原则(SRP):最难做到的

    一个类只负责一个职责

    使用单一职责原则的好处:

    1.可以降低类的复杂度,一个类只负责一项职责,其逻辑肯定要比负责多项职责简单的多;

    2.提高类的可读性,提高系统的可维护性;

    3.变更引起的风险降低,变更是必然的,如果单一职责原则遵守的好,当修改一个功能时,可以显著降低对其他功能的影响。

    需要说明的一点是单一职责原则不只是面向对象编程思想所特有的,只要是模块化的程序设计,都适用单一职责原则。

    2.依赖倒置原则(DIP):

    原始定义:

    1高层模块不该依赖于底层模块,它们都该依赖于抽象

    2抽象不依靠于细节,细节应该依赖于抽象

    备注:抽象指的是接口或者抽象类,细节指的是具体的类。依赖一词是对于多个事务而言的,可以理解为依靠

    举个例子说明什么叫做依赖:对象A通过调用对象B的方法或者函数,这就可以理解为A依赖于B,因为A只有“依靠”B才能实现某些功能,又如抽象类A中定义了一些公开的方法,类B实现或者继承A中的某些方法,对A的细节进行了完善,那么B就依赖于A的,因为B的基本功能框架是通过继承或者实现A的方法才能实现的

    所以一般如果没有考虑依赖倒置的设计,对象与对象之间的依赖是一种直接的依赖,这是一种紧耦合的设计,当依赖的一方变化的时候,依赖的一方也需要被迫进行修改

    自顶而下的程序设计中,通常会将某个业务逻辑划分为一个模块,而它的实现是通过一些粒度比较小的功能点进行完成,小的功能点又可以由更小的功能实现,在面向对象编程中,每一个都是对象,所以高层模块的功能是通过许多底层模块的功能实现的,高层模块调用底层模块,也就是高层模块依赖于底层模块。由于没有考虑依赖倒置的设计原则,高层和底层直接就是直接依赖,两者之间的产生强耦合,在开发过程中,底层模块是比较细节的,而细节的东西往往就是比较繁琐的,所以底层模块一旦需要变化,由于高层模块是直接依赖于底层模块,那么高层模块必须跟着变,而开闭原则要求的是程序对修改关闭,对扩展开放。而且频繁的修改高层模块代码,也会很容易引入错误。所以为了解决这个问题,可以对于具体的实现类加上抽象,它们之间的依赖关系不通过具体的实现类,而是抽象之间的依赖,这样的话,字节的类需要变化,不影响高层模块的使用,因为对于高层的模块(或者原来的依赖方)来说,它看到的只是抽象,具体的实现细节是把看不到的。而抽象的比较稳定,不会发生变化,所以高层的模块不需要改变

    依赖导致的核心是其面向接口编程,总结其有以下原则:

    1尽量不要用直接依赖,而是通过抽象进行依赖,即每个类最好有抽象

    2依赖关系的对象引用变量用的抽象的类型

    3任何类不要从具体的类派生

    4不要重写基类的方法

    3.里氏替换原则(SLP):

    所有基类出现的地方都可以派生类替换而不会让程序产生错误,派生类可以扩展基类的功能,但不能改变基类原有的功能

    4.开放封闭原则(OCP):

    对扩展开放,对修改关闭,一个类独立之后就不应该去修改它,而是以扩展的方式适应新需求

    5.接口隔离原则(ISP):

    客户端不应该强迫依赖它不需要的接口,一个接口应该拥有尽可能少的行为,使其精简单一。对于不同的功能的模块分别使用不同的接口,而不是使用同一个通用接口

     6.迪米特法则(Law of  Demeter, LoD):

    一个软件实体应当尽可能少地与其他实体发生相互作用。

    cs