文档章节

面向对象设计原则(OOP)

NinjaFrog
 NinjaFrog
发布于 09/22 18:59
字数 953
阅读 19
收藏 0

单一职责原则(Single responsibility principle)又称单一功能原则。它规定一个类应该只有一个发生变化的原因。
核心原则:低耦合,高内聚。
一个类,应该只有一个引起它变化的原因,也就是只有一个职责。如果一个类有多个职责,就提高了该类的耦合性,如果其中一个职责发生变化,可能会影响其它职责,会影响复用性。

开闭原则(Open Closed Principle)对扩展开放,对修改关闭。
在设计一个模块式,应该使这个模块在不被修改的前提下被扩展。找到一个系统的可变因素,并把它封装起来,称之为“对可变性的封装原则”。实现开闭原则的关键就在于“抽象”。在开发的设计阶段,很难罗列出系统所有可能的行为,所以我们应该现实的接受修改拥抱变化,使我们的代码可以对扩展开放,对修改关闭。

里氏替换原则(Liskov Substitution Principle)任何基类可以出现的地方,子类一定可以出现。 里氏替换原则是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。
衍生类的形参可以比基类的形参范围大,返回值类型可以比基类的小。

接口隔离原则(Interface Segregation Principle)客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。
过于臃肿的接口是对接口的污染(Interface Contamination)。
不应该强迫客户依赖于它们不用的方法。

依赖倒置原则(Dependence Inversion Principle)要依赖于抽象,不要依赖于具体实现。
1.高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象。
2.抽象不应该依赖于具体实现,具体实现应该依赖于抽象。
客户端依赖于抽象,即使具体实现经常变动,只要抽象不变,客户端就不需要变化。这大大降低了客户程序与实现细节的耦合度。

合成复用原则(Composite Reuse Principle)一个实体应当尽量少的与其他实体之间发生相互作用,使得系统功能模块相对独立。原则是尽量使用合成/聚合的方式,而不是使用继承。
采用继承来进行复用会破坏系统的封装性。

迪米特法则(Law of Demeter)又叫最少知道原则。一个对象应当对其他对象有尽可能少的了解,不和陌生人说话。
遵循类之间的迪米特法则会是一个系统的局部设计简化,因为每一个局部都不会和远距离的对象有直接的关联。但是,这也会造成系统的不同模块之间的通信效率降低,也会使系统的不同模块之间不容易协调。
广义的迪米特法则在类的设计上的体现:
优先考虑将一个类设置成不变类。
尽量降低一个类的访问权限。
谨慎使用Serializable。
尽量降低成员的访问权限。

© 著作权归作者所有

共有 人打赏支持
NinjaFrog
粉丝 3
博文 61
码字总数 10503
作品 0
昌平
程序员
面向对象设计的SOLID原则

S.O.L.I.D是面向对象设计和编程(OOD&OOP)中几个重要编码原则(Programming Priciple)的首字母缩写。 SRP The Single Responsibility Principle 单一责任原则 OCP The Open Closed Principle ...

银月光海
2016/01/07
24
0
2、面向对象的分析与设计方法

面向对象的方法是当前应用最广的程序设计方法 在软件的模块化、可重用性、可扩展性等方面体现出强大的优势。 面向对象的要素: 对象:客观世界里的任何实体都可以称之为对象; 封装: 把对象...

把南墙撞开
2016/04/13
70
0
34岁!100天!学会Java编程(Day49-Day52)—OOP设计模式

新书发布会 下午的昊海楼9层阁楼,阳光从分别从西侧落入,从东侧大厦的玻璃幕墙反射回来,将阁楼填满了阳光。在这样的阳光下目睹一本新书的发布,有一种迷幻的味道。 (一)为什么要学设计模...

魏小筠
2017/12/18
0
0
面向对象的三个基本特征 和 五种设计原则

一、三个基本特征 面向对象的三个基本特征是:封装、继承、多态。 封装 封装最好理解了。封装是面向对象的特征之一,是对象和类概念的主要特性。 封装,也就是把客观事物封装成抽象的类,并且...

NickHomeSelf
2016/08/18
23
0
面向对象的OOA、OOD、OOP

OOA   Object-Oriented Analysis:面向对象分析方法   是在一个系统的开发过程中进行了系统业务调查以后,按照面向对象的思想来分析问题。OOA与结构化分析有较大的区别。OOA所强调的是在...

ke_ry
2017/01/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

wordpress 汉化

在 wp-config.php 添加 define('WPLANG','zh_CN'); 在后台,更新 now ,即可。

james_laughing
4分钟前
0
0
Android JNI开发系列(十一) JNI 访问父类的构造方法和父类实例方法

JNI 访问父类的构造方法和父类实例方法 构造方法和父类实例方法 先看一段Java代码, Java package org.professor.jni.animal;import android.util.Log;public class Animal {protecte...

蔡小鹏
11分钟前
0
0
腾讯投资最高1.75亿美元正式进军菲律宾移动支付市场

菲律宾长途电话公司(PLDT)公司今日宣布,中国互联网巨头腾讯和私募股权公司KKR将获得该公司旗下金融科技公司Voyager Innovations的少数股权。 PLDT在一份声明中称:“腾讯和KKR最多将分别收...

linuxCool
38分钟前
2
0
正则介绍及grep/egrep用法

10月16日任务 9.1 正则介绍_grep上 9.2 grep中 9.3 grep下 扩展 把一个目录下,过滤所有*.php文档中含有eval的行 grep -r --include="*.php" 'eval' /data 正则介绍 正则就是一串有规律的字符...

hhpuppy
49分钟前
1
0
J2Cache 中使用 Lettuce 替代 Jedis 管理 Redis 连接

一直以来 J2Cache 都是使用 Jedis 连接 Redis 服务的。Jedis 是一个很老牌的 Redis 的 Java 开发包,使用很稳定,作者维护很勤勉,社区上能搜到的文章也非常非常多。算是使用范围最广的 Redi...

红薯
今天
15
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部