依赖倒转原则_面向对象设计原则总结(软件设计师必看)

《大数据和人工智能交流》头条号向广大初学者新增C 、Java 、Python 、Scala、javascript 等目前流行的计算机、大数据编程语言,希望大家以后关注本头条号更多的内容。

先声明:本文理论性强,大家看不懂不代表不能做开发,建议软件设计师级别以上的读者看,我也是看了湖南大学刘伟教授 文档之后感觉写的很好,很有感慨,特想分享给大家的,这次没有具体的例子,只有理论,具体的举例下次总结。

面向对象设计原则总结

先说软件开发过程中的两个重要概念:

(1)可维护性(Maintainability):指软件能够被理解、改正、适应及扩展的难易程度

(2)可复用性(Reusability):指软件能够被重复使用的难易程度

面向对象设计的目标之一在于支持可维护性复用,一方面需要实现设计方案或者源代码的复用,另一方面要确保系统能够易于扩展和修改,具有良好的可维护性。

面向对象的设计原则:

(一)、单一职责原则(Single Responsibility Principle, SRP)

一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中。单一职责原则是最简单的面向对象设计原则,用于控制类的粒度大小,因为一个类(大到模块,小到方法)承担的职责越多,它被复用的可能性就越小,当一个职责变化时,可能会影响其他职责的运作,应该将这些职责进行分离,将不同的职责封装在不同的类中,将不同的变化原因封装在不同的类中,故单一职责原则是实现高内聚、低耦合的指导方针。

单一职责原则:一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中。Single Responsibility Principle (SRP): Every object should have a single responsibility, and that responsibility should be entirely encapsulated by the class.

(二)、开闭原则(Open-Closed Principle, OCP)

软件实体应当对扩展开放,对修改关闭。Open-Closed Principle (OCP): Software entities should be open for extension, but closed for modification.

在开闭原则的定义中,软件实体可以是一个软件模块、一个由多个类组成的局部结构或一个独立的类,开闭原则是指软件实体应尽量在不修改原有代码的情况下进行扩展。

(三)、里氏代换原则(Liskov Substitution Principle, LSP)

所有引用基类的地方必须能透明地使用其子类的对象。Liskov Substitution Principle (LSP): Functions that use pointers or references to base classes must be able to use objects of derived classes without knowing it.

在软件中将一个基类对象替换成它的子类对象,程序将不会产生任何错误和异常,反过来则不成立。如果一个软件实体使用的是一个子类对象的话,那么它不一定能够使用基类对象。在程序中尽量使用基类类型来对对象进行定义,而在运行时再确定其子类类型。

(四)依赖倒转原则(Dependence Inversion Principle, DIP)

依赖倒转原则:高层模块不应该依赖低层模块,它们都应该依赖抽象。抽象不应该依赖于细节,细节应该依赖于抽象。Dependency Inversion Principle (DIP): High level modules should not depend upon low level modules, both should depend upon abstractions. Abstractions should not depend upon details, details should depend upon abstractions.

含义:要针对接口编程,不要针对实现编程:在程序代码中传递参数时或在关联关系中,尽量引用层次高的抽象层类,即使用接口和抽象类进行变量类型声明、参数类型声明、方法返回类型声明,以及数据类型的转换等。

在程序中尽量使用抽象层进行编程,而将具体类写在配置文件中。

(五)接口隔离原则(Interface Segregation Principle, ISP)

客户端不应该依赖那些它不需要的接口。Interface Segregation Principle (ISP): Clients should not be forced to depend upon interfaces that they do not use.

当一个接口太大时,需要将它分割成一些更细小的接口,使用该接口的客户端仅需知 道与之相关的方法即可。

每一个接口应该承担一种相对独立的角色,不干不该干的事,该干的事都要干。

(六)合成复用原则(Composite Reuse Principle, CRP)

合成复用原则:优先使用对象组合,而不是继承来达到复用的目的。Composite Reuse Principle (CRP):Favor composition of objects over inheritance as a reuse mechanism.

合成复用原则就是在一个新的对象里通过关联关系(包括组合关系和聚合关系)来使用一些已有的对象,使之成为新对象的一部分,新对象通过委派调用已有对象的方法达到复用功能的目的,复用时要尽量使用组合/聚合关系(关联关系),少用继承。

1、继承复用:实现简单,易于扩展。破坏系统的封装性;从基类继承而来的实现是静态的,不可能在运行时发生改变,没有足够的灵活性;只能在有限的环境中使用。(“白箱”复用 )

2、组合/聚合复用:耦合度相对较低,有选择性地调用成员对象的操作;可以在运行时动态进行,新对象可以动态地引用与成员对象类型相同的其他对象。(“黑箱”复用 )

(七)迪米特法则(Law of Demeter, LoD)

迪米特法则:每一个软件单位对其他的单位都只有最少的知识,而且局限于那些与本单位密切相关的软件单位。Law of Demeter (LoD): Each unit should have only limited knowledge about other units: only units "closely" related to the current unit.

迪米特法则要求一个软件实体应当尽可能少地与其他实体发生相互作用,应用迪米特法则可降低系统的耦合度,使类与类之间保持松散的耦合关系。

迪米特法则要求在设计系统时,应该尽量减少对象之间的交互,如果两个对象之间不必彼此直接通信,那么这两个对象就不应该发生任何直接的相互作用。如果其中一个对象需要调用另一个对象的方法,可以通过“第三者”转发这个调用,通过引入一个合理的“第三者”来降低现有对象之间的耦合度。

fedb00866a506d06e6fd8ea01112cf42.png

《大数据和人工智能交流》的宗旨

1、将大数据和人工智能的专业数学:概率数理统计、线性代数、决策论、优化论、博弈论等数学模型变得通俗易懂。

2、将大数据和人工智能的专业涉及到的数据结构和算法:分类、聚类 、回归算法、概率等算法变得通俗易懂。

3、最新的高科技动态:数据采集方面的智能传感器技术;医疗大数据智能决策分析;物联网智慧城市等等。

根据初学者需要会有C语言、Java语言、Python语言、Scala函数式等目前主流计算机语言。

根据读者的需要有和人工智能相关的计算机科学与技术、电子技术、芯片技术等基础学科通俗易懂的文章。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值