里氏替换原则:
在实际项目中,每个子类对应不同的业务含义,使用父类作为参数,传递不同的子类完成不同的业务逻辑。
父类的一个方法返回值是类型T,子类的相同方法(重载或覆盖)的返回值是S,那么里氏替换原则就要求S必须小于等于T,也就是说,要么S和T是同一个类型,要么S是T的子类。
输入参数:大于等于
输出参数:小于等于
采用本原则时,应该尽量避免子类有“个性”,一旦子类有了个性,与父类之间的关系就难以调和。把子类当做父类用,子类的个性被抹杀;把子类单独作为一个业务来使用,则代码间的耦合关系就过于复杂缺乏类替换的标准
依赖倒置原则:
定义:高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。
问题由来:类A直接依赖类B,假如要将类A改为依赖类C,则必须通过修改类A的代码来达成。这种场景下,类A一般是高层模块,负责复杂的业务逻辑;类B和类C是低层模块,负责基本的原子操作;假如修改类A,会给程序带来不必要的风险。
解决方案:将类A修改为依赖接口I,类B和类C各自实现接口I,类A通过接口I间接与类B或者类C发生联系,则会大大降低修改类A的几率。
依赖倒置原则基于这样一个事实:相对于细节的多变性,抽象的东西要稳定的多。以抽象为基础搭建起来的架构比以细节为基础搭建起来的架构要稳定的多。在java中,抽象指的是接口或者抽象类,细节就是具体的实现类,使用接口或者抽象类的目的是制定好规范和契约,而不去涉及任何具体的操作,把展现细节的任务交给他们的实现类去完成。
依赖倒置原则的核心思想是面向接口编程
接口隔离原则:
的含义是:建立单一接口,不要建立庞大臃肿的接口,尽量细化接口,接口中的方法尽量少。通过分散定义多个接口,可以预防外来变更的扩散,提高系统的灵活性和可维护性。
迪米特法则:
一个对象应该对其他对象保持最少的了解
类与类之间的关系越密切,耦合度越大,当一个类发生改变时,对另一个类的影响也越大
通俗的来讲,就是一个类对自己依赖的类知道的越少越好。也就是说,对于被依赖的类来说,无论逻辑多么复杂,都尽量地的将逻辑封装在类的内部,对外除了提供的public方法,不对外泄漏任何信息。
每个对象都会与其他对象有耦合关系,只要两个对象之间有耦合关系,我们就说这两个对象之间是朋友关系。耦合的方式很多,依赖、关联、组合、聚合等。
其中,我们称出现成员变量、方法参数、方法返回值中的类为直接的朋友,而出现在局部变量中的类则不是直接的朋友。也就是说,陌生的类最好不要作为局部变量的形式出现在类的内部。
开闭原则:
开闭原则无非就是想表达这样一层意思:用抽象构建框架,用实现扩展细节。因为抽象灵活性好,适应性广,只要抽象的合理,可以基本保持软件架构的稳定。而软件中易变的细节,我们用从抽象派生的实现类来进行扩展,当软件需要发生变化时,我们只需要根据需求重新派生一个实现类来扩展就可以了。当然前提是我们的抽象要合理,要对需求的变更有前瞻性和预见性才行。
说到这里,再回想一下前面说的5项原则,恰恰是告诉我们用抽象构建框架,用实现扩展细节的注意事项而已:单一职责原则告诉我们实现类要职责单一;里氏替换原则告诉我们不要破坏继承体系;依赖倒置原则告诉我们要面向接口编程;接口隔离原则告诉我们在设计接口的时候要精简单一;迪米特法则告诉我们要降低耦合。而开闭原则是总纲,他告诉我们要对扩展开放,对修改关闭。
单一功能原则:
一个function做一件事
分享到:
相关推荐
面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了 描叙某个事物在整个解决问题的步骤中的行为。 例如五子棋,面向过程的设计思路就是首先分析问题的步骤:1、开始游戏,2、...
2.12 面向对象程序的工作原理 2.13 垃圾收集 2.14 类 2.15 类定义的内容 2.16 共享数据和共享操作 2.17 类型 2.18 术语 2.19 重用代码 2.20 小结 2.21 课外阅读 2.22 复习题 2.23 练习1的答案 2.24 复习题...
1、用C++程序设计语言,面向对象程序设计风格 2、命令行形式 3、有禁手功能 4、满足基本的五子棋规则 5、有悔棋功能 6、实现人人、人机对战
了解在非面向对象方面C++也作了很多工作 了解由于引入了函数默认值和函数的重载而引发 熟悉变量的引用是不需要分配内存空间的 熟练运用使用cin,cout,处理输入和输出 熟练运用简单数据类型的const用法 熟练...
javascript面向对象编程范例,范例包含功能在页面DIV上画直线,折线,圆,椭圆,不规则图形选区,并进行文字编辑以及拖放操作。最终还有对画出的图形进行保存还原功能。附件包含drawApi.js,index.htm等6个文件 绝对...
面向对象系统分析与设计课件及复习资料 为老师上课用课件和复习指导 内容包括: 1.3 uml概述 1.3.1 uml简史 1.3.2 uml概貌 1.3.3 uml的特点和用途 第2章 面向对象的软件开发过程 2.1 rational统一...
面向对象编程思想;Java语言的语法;Java虚拟机执行Java程序的原理;在实际项目中的运用;设计模式;性能优化技巧。 看清Java万花筒的本质,从复杂的表象中寻找普遍的规律,深刻理解Java的核心思想。 紧密结合实际,...
•==和equals比较运算符:==要求两个引用变量指向同一个对象才会返回true。equals方法则允许用户提供自 定义的相等规则。 •Object类提供的equals方法判断两个对象相等的标准与==完全相同。因此开发者通常需要...
开始游戏后,产生一个没有重复数字/字母的4位随机数,下面以数字为例讲解规则。用户每猜一个数字,显示出“完全猜中的数字个数”和“猜中数字但位置错误的数字个数”,比如nAmB,数字n表示猜中的位置正确的数字个数...
耕具我多年的实践:面向对象包括两个思想: 从大往小想,从小往大做 从难往易想,从易往难做 同意一下观点-----能深入浅出,真高手也! 真正的面向对象编程思想就是忘掉一切关于计算机的东西,从问题领域考虑问题, ...
在面向对象的编程语言中,类是一个独立的程 序单位,它应该有一个类名并包括属性说明和服务说明两个主要部分。 LAMP 大讲堂PHP 面向对象技术(全面讲解) 网站:http://www.phpchina.com 投稿:phper@phpchina.com ...
北京邮电大学教学 教 案 课程名称:Python编程与实践 本节内容:Python面向对象编程(下) 授课学院:信息与通信工程学院 授课对象:大一本科生 授课教师:朱旭振 授课时间:50分钟 2018年4月 1. 教学目的 本课时的...
使用面向对象的技术完成双色球彩票购买及抽奖程序,完成以下功能,双色球的游戏规则自行百度。 购买彩票功能,需输入购买几张彩票,每张彩票采用机选方1.式产生5注号码,将本次产生的所有号码和购买日期以及购彩人...
面向对象程序设计与实践-Java抽象类和接口[33页]全文共33页,当前为第6页。 抽象类 5-1关联知识 抽象类在类层次结构中代表一般性概念,规定必须实现方法的统一接口,子类将基于此概念来定义方法,定义方法如下: ...
使用面向对象的技术完成双色球彩票购买及抽奖程序,完成以下功能,双色球的游戏规则自行百度。 购买彩票功能,需输入购买几张彩票,每张彩票采用机选方1.式产生5注号码,将本次产生的所有号码和购买日期以及购彩人...
这次的资源是关于遥感图像解译的,包含了六个内容,分别是目视解译、传统计算机解译方法、决策树分类、面向对象分类、神经网络分类和卷积神经网络分类法。它们有以下特点: 目视解译是指利用人的视觉和认知能力,...
使用面向对象的技术完成双色球彩票购买及抽奖程序,完成以下功能,双色球的游戏规则自行百度。 购买彩票功能,需输入购买几张彩票,每张彩票采用机选方1.式产生5注号码,将本次产生的所有号码和购买日期以及购彩人...
、语法规则等方面加深理解,打好面向对象程序设计、软件开发良好基本。 (2) 在上机实验中,提高学生对Java 语言各某些内容综合使用能力,逐渐掌握Java语言程序设计规律与技巧。 (3) 在对Java 程序调试过程中,提高...
DLT 790.6-2010 采用配电线载波的配电自动化 第6部分:A-XDR编码规则.pdf GBT 16262.1-2006 信息技术 抽象语法记法一(ASN.1) 第1部分基本记法规范.pdf GBT 16262.2-2006 信息技术抽象语法记法一(ASN.1) 第2部分...
面向对象之成员访问总规则6.面向对象类成员之静态方法与类方法7.面向对象类成员之特性8.面向对象类成员梳理9.面向对象之成员修饰符9.1 成员修饰符9.2 静态字段9.3 普通字段 五、核心知识梳理 2.面对对象继承 2.1 ...