java五大原则_Java成长第五集--面向对象设计的五大原则
S.O.L.I.D 是面向对象设计(OOD)和面向对象编程(OOP)中的几个重要编码原则(Programming Priciple)的首字母缩写。以下图说明:
下面就个人的理解来说说这五大原则的含义到底是什么?
一、单一职责: 我们通常都说“低耦合,高内聚”。在我看来,这里的"单一职责"就是我们通常所说的“高内聚”,即一个类只完成它应该完成的职责,不能推诿责任,也不可越殂代疱,不能成为无所不能的上帝类。如果你的团队中实施宽松的“代码集体所有权”,在编码的过程中出现许多人同时修改(维护)同一个类的现象,而且成员之间的沟通不够及时,主动和畅通的话,那么时间一长,就很可能出现“承担过多职责”的上帝类。这时,提炼基类/接口和提炼类重构将能帮助我们消除或减轻这种设计臭味。
二、开放封闭原则:从面向对象设计角度看,这个原则可以这么理解:"软件实体(类,模块,函数等等)应当对扩展开放,对修改闭合。" 通俗来讲,它意味着你(或者类的客户)应当能在不修改一个类的前提下扩展这个类的行为。在OOD里,对扩展开放意味着类或模块的行为能够改变,在需求变化时我们能以新的,不同的方式让模块改变,或者在新的应用中满足需求。也就是说,对扩展是开放的,而对修改是封闭的。我们通常都说:向系统中增加功能时应该只是添加新代码,而应该尽量少的修改原代码。在我看来,这就是遵循开放封闭原则所能带来的效果。
三、里氏替换原则(LSP):"子类型必须能够替换它们的基类型。"或者换个说法:"使用基类引用的地方必须能使用继承类的对象而不必知道它。" 这个原则正是保证继承能够被正确使用的前提。通常我们都说,“优先使用组合(委托)而不是继承”或者说“只有在确定是 is-a 的关系时才能使用继承”,因为继承经常导致”紧耦合“的设计。在基本的面向对象原则里,"继承"通常是"is a"的关系。如果"Developer" 是一个"SoftwareProfessional",那么"Developer"类应当继承"SoftwareProfessional"类。在类设计中"Is a"关系非常重要,但它容易冲昏头脑,导致使用错误的继承造成错误设计。例如:鸟都有一种行为fly,翠鸟和鸵鸟都继承自鸟,但是却不能够在使用鸟类的地方用鸵鸟来进行替换,因为鸵鸟不会飞,所以这就违背了里氏替换原则。
为什么LSP如此重要?
如果没有LSP,类继承就会混乱;如果子类作为一个参数传递给方法,将会出现未知行为;
如果没有LSP,适用与基类的单元测试将不能成功用于测试子类;
四、接口分离原则(ISP):这个原则的意思是"客户端不应该被迫依赖于它们不用的接口。" 也就是说,一个接口或者类应该拥有尽可能少的行为(那么,什么叫尽可能少?就是少到恰好能完成它自身的职责),这也是保证“软件系统模块的粒度尽可能少,以达到高度可重用的目的。接口包含太多的方法会降低其可用性,像这种包含了无用方法的"胖接口"会增加类之间的耦合。如果一个类想实现该接口,那么它需要实现所有的方法,尽管有些对它来说可能完全没用,所以这样做会在系统中引入不必要的复杂度,降低代码的可维护性或鲁棒性。接口分离原则确保实现的接口有它们共同的职责,它们是明确的,易理解的,可复用的。
五、依赖倒置原则(DIP):这个原则的意思是:高层模块不应该依赖底层模块,两者都应该依赖其抽象。其实又是”面向接口编程,不要面向实现编程“的内在要求。
java五大原则_Java成长第五集--面向对象设计的五大原则相关推荐
- Java成长第五集--面向对象设计的五大原则
S.O.L.I.D 是面向对象设计(OOD)和面向对象编程(OOP)中的几个重要编码原则(Programming Priciple)的首字母缩写.以下图说明: 下面就个人的理解来说说这五大原则的含义到 ...
- solid 设计原则 php,面向对象设计SOLID五大原则
今天我给大家带来的是面向对象设计SOLID五大原则的经典解说. 我们知道,面向对象对于设计出高扩展性.高复用性.高可维护性的软件起到很大的作用.我们常说的SOLID五大设计原则指的就是: S = 单一 ...
- PHP面向对象设计的五大原则
面向对象设计的五大原则:单一职责原则.接口隔离原则.开放-封闭原则.替换原则.依赖倒置原则.这些原则主要是由Robert C.Martin在<敏捷软件开发--原则.方法.与实践>一书中总结 ...
- java中高级面试_中高级面试常问:Java面向对象设计的六大原则
这篇文章主要讲的是面向对象设计中,我们应该遵循的六大原则.只有掌握了这些原则,我们才能更好的理解设计模式.我们接下来要介绍以下6个内容.单一职责原则--SRP 开闭原则--OCP 里式替换原则--LS ...
- 61条面向对象设计的经验原则
61条面向对象设计的经验原则 摘抄自<OOD 启思录>--Arthur J.Riel 著 鲍志云 译 "你不必严格遵守这些原则,违背它们也不会被处以宗教刑罚.但你应当把这些原则看 ...
- 深入理解面向对象设计的七大原则
一.面向对象设计的七大原则是什么? 1.开放封闭原则 2.里氏转换原则 3.依赖倒转原则 4.组合/聚合原则 5.接口隔离原则 6."迪米特"法则 7.单一职责原则 二.七大原则是 ...
- 面向对象设计与开发原则
介绍 这里介绍了5个面向对象设计与开发原则–SOLID原则,分别是:单一职责原则.开放封闭原则.里氏替换原则.接口隔离原则.依赖倒置原则.另外还介绍了其他3个原则:迪米特法则."Tell, ...
- 面向对象设计的七大原则 (包括SOLID原则)
文章目录 概述 1. 单一原则 2. 里氏替换原则 3. 依赖倒转原则 4. 接口分隔原则(Interface Segregation Principle ,ISP) 5. 迪米特法则 (Law of ...
- 61条Java面向对象设计的经验原则
1)所有数据都应该隐藏在所在的类的内部. (2)类的使用者必须依赖类的共有接口,但类不能依赖它的使用者. (3)尽量减少类的协议中的消息. (4)实现所有类都理解的最基本 ...
最新文章
- c语言交错级数前10项和,怎么求一个交错级数的和,谢谢
- 24 年前的 IE 仍能在 Win10中运行,这无敌兼容性与你的代码比比?
- buffer 与cache 的区别
- 控制寄存器,CPU缓存,PWT,PCD
- 前端技术分享:锥形渐变conic-gradient你了解多少?
- 手把手教会你(单/多)文件上传(并修改文件默认的最大最小值)
- eclipse发布web显示异常,清除缓存也无效?
- 80后程序员必须知道的编程语言和它们的创造者
- C#调用第三方ocx控件 (winform /aspx)
- PCL Lesson 4:直通滤波+多视图可视化
- [推荐]网店代销的卖家,你的宝贝名称修改了吗?
- 编译cwm-recovery(含部分修改步骤)[转]
- Growth—电子书预览版
- ASCII 在线转换器
- 业大宗商品价格简史:经验总结与未来展望-20210107.PDF
- 如何准备机器学习数据集_机器学习演练第一部分:准备数据
- Swift不深入只浅出入门教程-孟祥月-专题视频课程
- Android设计模式(十六)-中介者模式
- 手游测试常见10个坑及填坑建议
- 区块链在网络安全中有何作用?
热门文章
- OD使用教程16 - 调试篇16
- HDUOJ 2089
- 【MM模块】Vendor Consignment 供应商寄售
- LSMW批处理使用方法(01)_总述及界面说明
- SAP WebService基础知识
- Excel表格复制到word中
- 做了这么久数据分析没收获,原来一直在做“伪数据分析”
- jquery 取对象数组下标_JQuery使用index方法获取Jquery对象数组下标的方法
- 给服务器装系统U盘要处理吗,服务器装系统从u盘装
- python字符串换行连接_零基础学python_03_字符串(拼接+换行+制表符)