程序设计六个原则

单一职责原则,SRP(Single Responsibility Principle)
里氏替换原则,LSP(Liskov Substitution Principle)
开放-关闭原则,OCP(Open-Close Principle)
接口隔离原则,ISP(Interface Segregation Principle)
依赖倒置原则,DIP(Dependence Inversion Principle)
最少知识原则,LKP(Least Knowledge Principle),又称迪米特法则,LOD(Law Of Demeter)

1.单一职责原则

定义:不要存在多于一个导致类变更的原因。通俗的说,即一个类只负责一项职责。

问题由来:类T负责两个不同的职责:职责P1,职责P2。当由于职责P1需求发生改变而需要修改类T时,有可能会导致原本运行正常的职责P2功能发生故障。

解决方案:遵循单一职责原则。分别建立两个类T1、T2,使T1完成职责P1功能,T2完成职责P2功能。这样,当修改类T1时,不会使职责P2发生故障风险;同理,当修改T2时,也不会使职责P1发生故障风险。

2.里氏替换原则

定义1:如果对每一个类型为 T1的对象 o1,都有类型为 T2 的对象o2,使得以 T1定义的所有程序 P 在所有的对象 o1 都代换成 o2 时,程序 P 的行为没有发生变化,那么类型 T2 是类型 T1 的子类型。

定义2:所有引用基类的地方必须能透明地使用其子类的对象。

问题由来:有一功能P1,由类A完成。现需要将功能P1进行扩展,扩展后的功能为P,其中P由原有功能P1与新功能P2组成。新功能P由类A的子类B来完成,则子类B在完成新功能P2的同时,有可能会导致原有功能P1发生故障。

解决方案:当使用继承时,遵循里氏替换原则。类B继承类A时,除添加新的方法完成新增功能P2外,尽量不要重写父类A的方法,也尽量不要重载父类A的方法。

3.开放-关闭原则

定义:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。

问题由来:在软件的生命周期内,因为变化、升级和维护等原因需要对软件原有代码进行修改时,可能会给旧代码中引入错误,也可能会使我们不得不对整个功能进行重构,并且需要原有代码经过重新测试

解决方案:当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化。

4.接口隔离原则

定义:客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。

问题由来:类A通过接口I依赖类B,类C通过接口I依赖类D,如果接口I对于类A和类B来说不是最小接口,则类B和类D必须去实现他们不需要的方法。

解决方案:将臃肿的接口I拆分为独立的几个接口,类A和类C分别与他们需要的接口建立依赖关系。也就是采用接口隔离原则。

5.依赖倒置原则

定义:高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。

问题由来:类A直接依赖类B,假如要将类A改为依赖类C,则必须通过修改类A的代码来达成。这种场景下,类A一般是高层模块,负责复杂的业务逻辑;类B和类C是低层模块,负责基本的原子操作;假如修改类A,会给程序带来不必要的风险。

解决方案:将类A修改为依赖接口I,类B和类C各自实现接口I,类A通过接口I间接与类B或者类C发生联系,则会大大降低修改类A的几率。

6.最少知识原则(迪米特法则)

定义:一个对象应该对其他对象保持最少的了解。

问题由来:类与类之间的关系越密切,耦合度越大,当一个类发生改变时,对另一个类的影响也越大。

解决方案:尽量降低类与类之间的耦合。

时间: 2024-11-24 07:37:42

程序设计六个原则的相关文章

杰克?康菲尔德:佛法心理疗愈的二十六项原则

https://www.douban.com/note/518933460/ 该文整理于临床心理学博士.禅修大师杰克•康菲尔德所著<慧心自在>,此书结合禅修思想与心理治疗,将灵性修行落实于日常生活,治愈身心的疾病.适合以下人群: 1.医生或心理治疗专业人员 2.刚接触佛法,对禅坐也很陌生的人 3.对佛法的修炼经验较丰富者 4.对生命探索充满无限好奇的人 5.渴望心灵健康和心灵提升的人 第一部分 你到底是谁 第一项原则 观看众人的内在神圣性和美德.第二项原则 慈悲是我们最深的天性,它源于我们与万

优秀程序设计的Kiss原则(keep it simple,stupid)

优秀程序设计的Kiss原则(keep it simple,stupid) 良好的编程原则与良好的设计工程原则密切相关.本文总结的这些设计原则,帮助开发者更有效率的编写代码,并帮助成为一名优秀的程序员. 1.避免重复原则(DRY – Don’t repeat yourself) 编程的最基本原则是避免重复.在程序代码中总会有很多结构体,如循环.函数.类等等.一旦你重复某个语句或概念,就会很容易形成一个抽象体. 2.抽象原则(Abstraction Principle ) 与DRY原则相关.要记住,

web前端之JavaScript高级程序设计六:事件

web前端之JavaScript高级程序设计六:事件 JavaScript 与 HTML 之间的交互是通过事件实现的.事件,就是文档或浏览器窗口中发生的一些特定的交互瞬间.可以使用侦听器(或处理程序)来预订事件,以便事件发生时执行相应的代码.这种在传统软件工程中被称为观察员模式的模型,支持页面的行为(JavaScript 代码)与页面的外观(HTML 和 CSS 代码)之间的松散耦合. 事件流: 事件流描述的是从页面中接收事件的顺序.但有意思的是, IE 和 Netscape 开发团队居然提出了

乐观主义者信奉的六个原则

Managershare:保持一种持久的阳光心态,整个人生都会因此而改变,这篇文章用6个办法让乐观变成一种生活的信念. 你有没有想过,如何变得更快乐.更健康的秘诀,在于你认为一个杯子里有多少水吗? 当你面对现实的时候,如果你的心态是一个杯子里有一半是空的,你应该能够从抱有相反心态的人那里学到一些东西.乐观主义者往往有着更优质的胆固醇,更好的缓解压力的方法和更完善的免疫系统. 那么我们才能怎样拥有一个更健康的心态?乐观的人在日常生活中总是提醒自己保持特定的信念,而且这些信念改善了他们面对生活的方式

面向对象三大特性,六个原则

三大特性: 封装:  一个类封装了数据以及操作数据的代码逻辑体.定义了数据的可访问属性(私有.公有) 继承 : 可以让一个类型获取另外一个类型的属性的方式.分为实现继承和接口继承 多态 : 类实例的一个方法在不同情形下有不同的表现形式,即不同的外在行为.使具有不同的内部结构的对象可以共享相同的外部接口. 五大原则: 单一功能原则 : 每个类型(包括接口和抽象)功能要求单一,只负责一件事情. 开放封闭原则:一个软件实体应该对扩展开发,对修改关闭.可扩展但是不可更改. 核心:用抽象构建框架,用实现类

面向对象的三大特征、六个原则

三大特征 封装:  一个类封装了数据以及操作数据的代码逻辑体.定义了数据的可访问属性(私有.公有) 继承 : 可以让一个类型获取另外一个类型的属性的方式.分为实现继承和接口继承 多态 : 类实例的一个方法在不同情形下有不同的表现形式,即不同的外在行为.使具有不同的内部结构的对象可以共享相同的外部接口. 六大原则 单一功能原则 : 每个类型(包括接口和抽象)功能要求单一,只负责一件事情.降低代码复杂度,增加可读性可维护性,只有在逻辑足够简单.类中的方法足够少时才可以在代码级别上违反单一职责原则.职

C#程序设计六大原则记录

本文目的在于记录,方便以后的回顾 http://www.uml.org.cn/sjms/201211023.asp 设计模式六大原则(1):单一职责原则 定义:不要存在多于一个导致类变更的原因.通俗的说,即一个类只负责一项职责. 问题由来:类T负责两个不同的职责:职责P1,职责P2.当由于职责P1需求发生改变而需要修改类T时,有可能会导致原本运行正常的职责P2功能发生故障. 解决方案:遵循单一职责原则.分别建立两个类T1.T2,使T1完成职责P1功能,T2完成职责P2功能.这样,当修改类T1时,

设计模式详解之程序设计六大原则

设计模式(Designpattern)是一套被反复使用(spring源码当中就出现了很多模式,如模板模式,代理模式,单例模式,工厂模式等).多数人知晓的.经过分类编目的.代码设计经验的总结.还有一种说法,设计模式是可以解决特定场景的问题的一系列方法. 设计模式可以帮助我们改善系统的设计,增强系统的健壮性.可扩展性,为以后铺平道路,但是过多的模式也会系统变的复杂. 在学习设计模式之前,先了解程序设计六大原则. 这些原则是指导模式的规则,原则是死的,人是活的,所以并不是要完完全全遵守这些规则,否则为

程序设计原则(总结)

结构化程序设计的主要原则 1.自顶向下 程序设计时,应先考虑总体,后考虑细节:先考虑全局目标,后考虑局部目标.不要一开始就过多追求众多的细节,先从最上层总目标开始设计,逐步使问题具体化. 2.逐步求精 对复杂问题,应设计一些子目标作为过渡,逐步细化. 3.模块化 一个复杂问题,肯定是由若干稍简单的问题构成.模块化是把程序要解决的总目标分解为子目标,再进一步分解为具体的小目标,把每一个小目标称为一个模块. 4.限制使用goto语句 结构化程序设计方法的起源来自对GOTO语句的认识和争论.肯定的结论