面向对象编程的基本原则

原创 2016年06月01日 14:41:40

面向对象的基本设计原则有:单一职责原则,开放-封闭原则,依赖倒转原则,里氏代换原则,迪米特法则,接口隔离原则。

1.单一职责原则:就一个类而言,应该仅有一个引起它变化的原因。

如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力,这种耦合会导致脆弱的设计,当变化发生时,设计会遭受到意想不到的破坏。也就是说,当能够想到多余一个动机去改变一个类,那么这个类就具有多余一个的职责,也就应该考虑类的职责分离。

2.开放-封闭原则:是说软件实体(类、模板、函数等)应该可以扩展,但是不可修改。

开放-封闭原则的两个特征:一是说对于扩展是开放的,另一个是说对于更改是封闭的。也就是说,当有新的需求或者变化时,设计的软件可以相对容易修改,可以对现有的代码进行扩展,来适应新的情况,而不是说当有新的需求时,从头来设计这个程序。

实现开放-封闭原则的核心思想就是对抽象编程,而不是对具体编程,因为抽象相对稳定。让类依赖于固定的抽象,所以修改就是封闭的;而通过面向对象的继承和多态机制,又可以实现对抽象类的继承,通过覆写其方法来改变固有行为,实现新的拓展方法,所以扩展就是开放的。

开放-封闭原则是面向对象设计的核心,遵循这个原则可以带来许多好处,例如,可维护、可扩展、可复用、灵活性好等。然而,对于应用程序中的每个部分都刻意进行抽象不是一个好主意,应当拒绝不成熟的抽象。

3.依赖倒转原则:A.高层模块不应该依赖低层模块。两个都应该依赖抽象。

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

面向过程的开发中,往往为了使代码可以复用,一般都将常用代码写成许多的程序库,这样在做新的项目时,去调用这些低层的函数。这就是高层模块依赖于低层模块。就像是电脑里如果CPU、内存、硬盘都依赖于具体的主板,主板坏了,所有的部件就都没用了。这肯定是不合理的。而如果不管是高层模块还是低层模块,它们都依赖于抽象(接口或者抽向类),只要接口是稳定的,那么任何一个的更改都不用担心其他受到影响,这样使得无论高层模块还是低层模块都可以很容易的被复用。

依赖倒置原则可以说是面向对象设计的标志,编写代码时应时刻考虑针对抽象编程而不是针对细节编程,即程序中所有的依赖关系都是终止于抽象类或者接口。

4.里氏代换原则:子类型必须能够替换掉它们的父类型。

只有当子类可以替换掉父类,软件单位的功能不受到影响时,父类才能真正的被复用,而子类也能在父类的基础上增加新的行为。例如,猫继承了动物类,以动物的身份拥有吃、喝、叫等行为,当我们需要狗、猪也拥有类似的行为时,只需要更改实例化的部分,代码的其他部分都不需要改变。

5.迪米特法则:如果两个类不必彼此直接通信,那么这两个类就不应当直接的相互作用。如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。

迪米特法则首先强调的前提是在类的结构设计上,每一个类都应当尽量降低成员的访问权限。即一个类包装好自己的private状态,不需要让别的类知道的字段或行为不要公开。

迪米特法则的根本思想,是强调了类之间的松耦合。在程序设计时,类之间的耦合越弱,越有利于复用。

6.接口隔离原则:建立单一接口,不要建立庞大臃肿的接口,尽量细化接口,接口中的方法尽量少。

我们要为各个类建立专用的接口,而不要试图去建立一个很庞大的接口供所有依赖它的类去调用。在程序设计中,依赖几个专用的接口要比依赖一个综合的接口更灵活。接口是设计时对外部设定的“契约”,通过分散定义多个接口,可以预防外来变更的扩散,提高系统的灵活性和可维护性。

以上就是面向对象的基本设计原则,在进行程序设计时,遵守这些原则可以使我们的代码可维护、可扩展、可复用、灵活性好,需要我们在实践中时时刻刻的遵守这些原则。


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

对面向对象编程的6个基本原则的理解

单一职责原则 定义:一个类中应该是一组相关性很高的函数,数据的封装。 做法:根据对业务和需求的理解,去划分一个类,一个函数的职责。 举例:比如要实现一个加载图片的功能,并在加载图片的时候实...

慕课网----大话PHP设计模式 六(面向对象编程的基本原则,自动加载config)

一。面向对象编程的基本原则 1.单一职责:一个类,只需要做好一件事情。不要使用一个类来完成一个很复杂的功能。而是拆分成更小更具体的类。 2.开放封闭:一个类,应该是可扩展的,而不可修改的。不应该使...

(Java)面向对象编程六大基本原则

《Android源码设计模式解析与实战》 面向对象六大原则

13.面向对象设计基本原则

1.一个类只做一件事情,不要使用一个类完成很复杂的功能。而是拆分成更小,更具体的类。2.一个类在实现之后,应该对扩展开发,对修改封闭。3.如果有A,B两个类。假如A 依赖B,不应该在A 中直接调用 B...

面向对象五大基本原则

面向对象五大基本原则 原文:http://www.cnblogs.com/seacryfly/archive/2011/12/29/seacryfly.html 以前一直认为程序中的类有使用到封装继承...

23种 设计模式---面向对象的基本原则

设计模式以前学了几个简单的Factory, Singleton等, 前一段时间决定系统的学习一下,耗时两个月, 读了3本书,包括,, , 还参考了大量的网友的经验和思想, 最终把自己认为精华的部分,记...

面向对象的基本原则

一、单一职责原则: 全称:“Single-Responsibility Principle” 说明:就一个类而言,应该只专注于做一件事和仅有一个引起它变化的原因。所谓职责,我们可以理解他为功能,就...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)