文档章节

面向对象6大基本原则

 刘景刘恒
发布于 2017/06/09 08:54
字数 759
阅读 1
收藏 0

OOP基本上有6大原则,而实际上都是互补的,也就是说一些原则需要利用另一些原则来实现自己。6大原则如下:
 

1) Open-Close Principle(OCP),开-闭原则,讲的是设计要对扩展有好的支持,而对修改要严格限制。这是最重要也是最为抽象的原则,基本上我们所说的Reusable Software既是基于此原则而开发的。其他的原则也是对它的实现提供了路径。

 

2) Liskov Substituition Principle(LSP),里氏代换原则,很严格的原则,规则是“子类必须能够替换基类(父类),否则不应当设计为其子类。”也就是说,子类只能去扩展基类,而不是隐藏或覆盖基类。

 

3) Dependence Inversion Principle(DIP),依赖倒换原则,“设计要依赖于抽象而不是具体化”。换句话说就是设计的时候我们要用抽象来思考,而不是一上来就开始划分我需要哪些哪些类,因为这些是具体。这样做有什么好处呢?人的思维本身实际上就是很抽象的,我们分析问题的时候不是一下子就考虑到细节,而是很抽象的将整个问题都构思出来,所以面向抽象设计是符合人的思维的。另外这个原则会很好的支持OCP,面向抽象的设计使我们能够不必太多依赖于实现,这样扩展就成为了可能,这个原则也是另一篇文章《Design by Contract》的基石。

 

4) Interface Segregation Principle(ISP),接口隔离原则,“将大的接口打散成多个小接口”,这样做的好处很明显,我不知道有没有必要再继续描述了,为了节省篇幅,实际上我对这些原则只是做了一个小总结,如果有需要更深入了解的话推荐看《Java与模式》,MS MVP的一:本巨作!^_^

 

5) 单一职责:一个类的功能尽量单一,降低耦合

 

6) Law of Demeter or Least Knowlegde Principle(LoD or LKP),迪米特法则或最少知识原则,这个原则首次在Demeter系统中得到正式运用,所以定义为迪米特法则。它讲的是“一个对象应当尽可能少的去了解其他对象”。也就是又一个关于如何松耦合(Loosely-Coupled)的法则。
 

好了,以上是6大原则(或法则)的介绍,对这些原则的深入研究正是如何得到设计模式的道路。在进行了深入了解后我们就可以开始看看设计模式了,设计模式正是对这些法则的应用,著名的设计模式有四人帮(Gang of Four,GoF)的23个模式,除此之外还有很多其他的一些著名模式,大家可以慢慢研究。

 

更过技术问题解决防范请搜索千锋PHP,千锋论坛

 

© 著作权归作者所有

粉丝 1
博文 172
码字总数 139067
作品 0
私信 提问
基于C++的纯面向对象的通用高性能大并发TCP-SERVER/CLIENT开发框架实践系列之前言篇

基于C++的纯面向对象的通用高性能大并发TCP-SERVER/CLIENT开发框架实践系列之前言篇 yijian 2008-12-21 technologier@126.com 1. 回首 工作几年了,没什么沉淀,不是忙工作就是忙着休息,大四...

一见蓝天
2008/12/21
0
0
如何理解面向对象

如何理解面向对象? 什么是面向对象,面向对象其实就是一种设计模型。不用理解太多,这里不是最重要。 面向对象的基本特征如何理解? 1)抽象:将相同事物抽象出来成为一种数据结构,或者是用...

qingliangdexiar
2017/05/31
0
0
android与模式:设计原则

在谈设计模式之前,如果不谈设计原则,我认为是无根之浮萍。 为什么这么说,为什么我们要学设计模式,为什么前人将这些东西抽象和总结出来?这就是要了解设计原则的必要性,开始学的时候,可...

今幕明
2014/03/06
92
0
面向对象基本原则

1.单一职责 2.开放 3.封闭 4.依赖倒置 5.配置化 6.面向接口编程

窗含西岭千秋雪
2016/12/28
3
0
Java Object And Class

1、对象 理解面向对象技术的关键,真实世界中的对象有2个共同的特征:它们都有行为和状态。识别真实世界的状态和行为是从面向对象思维的一个好方法。 软件对象在概念上类似于现实世界对象:它...

Rksi5
2014/04/11
225
1

没有更多内容

加载失败,请刷新页面

加载更多

springboot 403 问题

添加WebAppConfigurer 配置 @Configuration@EnableAutoConfigurationpublic class WebAppConfigurer extends WebMvcConfigurerAdapter { public WebAppConfigurer() { } ......

布袋和尚_爱吃鱼
26分钟前
3
0
Python自动更换壁纸爬虫与tkinter结合

直接上代码 import ctypesimport timeimport requestsimport osfrom threading import Threadfrom tkinter import Tk, Label, Button,Entry,StringVar,messagebox# '放到AppData\Roami......

物种起源-达尔文
27分钟前
3
0
Postgresql Study 笔记

Postgresql 安装 Windows, MAC Install Postgresql 下载地址: https://www.enterprisedb.com/downloads/postgres-postgresql-downloads Linux Install sudo apt-get update sudo apt-get in......

slagga
29分钟前
4
0
layer.open 打开新页面传参问题

如图所示,点击出售,把A页面的数据传到弹框上面,因为弹框比较复杂,所以使用引入一个新页面。 A.html a.js B.html b.js 1、第一种方案 sellInte: function (){ var obj = document.g...

木九天
32分钟前
4
0
沙龙报名 | 区块链数据服务技术应用实践

京东云是国内首家提供区块链数据在线分析服务产品的公司,也是行业内首家对区块链数据服务进行开源的公司。 本次沙龙是京东云BDS开源后,首次在深圳举办线下沙龙,我们将邀请京东云BDS团队核...

京东云技术新知
32分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部