面向对象设计(OOD)七大原则
这篇文章我会不停的维护它,它将会越来越长,但它是关于我在面向对象中的一些学习的思考心得。希望对自己对各位都能实用处。
开篇前,说明一下写这篇文章的原因。原因是由于设计模式。由于设计模式里的各种模式。都是建立在这些原则之上的。
好比盖房子须要夯实的地基,或者比作数学论证中的使用到的公理。你不能说为什么盖房子一定要建立在地基之上。也不能说为什么两点一直线,三点一面这些公理为什么就这么牛逼的存在,由于这是自然规律。你必须遵守它们。
这些设计原则也类似,它们没有24种设计模式那样华丽的身姿,但它们是程序设计江湖上真正的法则。
很多的大师总结出了这些原则。告知了我们这些后辈。我们了解了它们,会让我们更好的设计出优秀的软件框架来。
首先,先做一下知识的普及。
假设你在一些文章中看到OOD,你要懂得,这是面向对象设计(Object-Oriented Design。OOD)。假设看到一些设计书籍提到OOD,我们便知道这是指面向对象设计的意思。
接下来,真正的主角们,这些江湖上的大佬登场了。
这些原则,盼望我们都能全然懂得。
OOD七大设计原则一:开闭原则(Open-closed
Principle。OCP)
这个原则是由Bertrand
Meyer大师在1988年提出的。那时候我才1岁。这个原则是这样定义的:
Software entities should be open for extension,but closed for modification。
多简单啊?!这个原则的意思大概是说:软件对扩展应该是开放的,对改动应该是关闭的。说的更通俗点儿。就是说我们开发了一个软件。应该能够对它进行功能扩展(开放)。而在进行这些扩展的时候,不须要对原来的程序进行改动(关闭)。
各位。假设我们有经历一段时间的开发。会发现,一个软件的代码设计。假设能做到对功能扩展,对改动关闭是多么棒的事儿。这意味着这个软件维护的稳定性会大大提高,由于对改动关闭嘛,所以之前的代码,不须要太多的改动,我们以前都做过全文搜索复制替换部分文件的事情,或者在好多个文件里反复的改动某段代码。假设我们的软件编码能依照对扩展开发,对改动关闭的原则去编写,尽力的让这个原则更好的体如今软件设计中,这就是一个很棒的设计了。
总结一下。假设依照OCP原则,软件设计开发中,会有例如以下的长处:
1.在软件可用性上,很灵活。你能够在软件完毕对软件进行扩展。添加新的功能。这样,这个软件就能够通过不断的添加新模块满足不断变化的新需求!
2.因为对软件原来的模块不能改动。因此不用操心软件的稳定性。
对OCP的实现,主要用到的就是抽象。各位,你们在编写代码的时候,会不会常常使用抽象的思想呢。
一定要用上抽象的思想去写代码。把系统全部可能的行为抽象为抽象底层,这些抽象类规定出全部详细的类必须提供的方法,这些作为系统设计的抽象层。
所以使得在不论什么可扩展的情况下。系统的抽象层不须要改动。同一时候。我们也能够从抽象层再派生出其它的抽象类来改动或扩展系统的行为。因此,对于可变部分,是能够扩展的。
我们也非常easy想到,在一開始进行软件设计的时候。把全部的东西都面面俱到的考虑到是不可能的(有时候也不合适)。全部可变的东西都写入到抽象底层是不可能的。
因此,开闭原则非常难被全然实现。仅仅能在某些模块,某些程度。某个限度内使用这个原则。所以说,OCP具有理想主义的色彩。是OOD设计的终极目标。
因此,对OCP的设计原则。很多OOD大师都费尽心思,研究OCP的实现方式。
非常多原则,如:里氏代换原则、合成复用原则,依赖倒转原则。接口隔离原则,抽象类,迪米特法则等,都能够看作是OCP的实现方法。
本文參考:http://blog.csdn.net/brookes/article/details/1896422
(2014-08-22。临时写到这。)
面向对象设计(OOD)七大原则的更多相关文章
- C#面向对象设计的七大原则
本文我们要谈的七大原则,即:单一职责,里氏替换,迪米特法则,依赖倒转,接口隔离,合成/聚合原则,开放-封闭 . 1. 开闭原则(Open-Closed Principle, OCP) 定义:软件实 ...
- S.O.L.I.D 是面向对象设计(OOD)和面向对象编程(OOP)中的几个重要编码原则
注:以下图片均来自<如何向妻子解释OOD>译文链接:http://www.cnblogs.com/niyw/archive/2011/01/25/1940603.html < ...
- # 61条面向对象设计的经验原则-《OOD启思录》Arthur J.Riel
61条面向对象设计的经验原则-<OOD启思录>Arthur J.Riel 原文 http://blog.csdn.net/cpluser/article/details/129291 61 ...
- OOD 面向对象面试干货分享| 面向对象设计的SOLID原则
S.O.L.I.D是面向对象设计和编程(OOD&OOP)中几个重要编码原则(Programming Priciple)的首字母缩写. 简写 全拼 中文翻译 SRP The Single Res ...
- Java成长第五集--面向对象设计的五大原则
S.O.L.I.D 是面向对象设计(OOD)和面向对象编程(OOP)中的几个重要编码原则(Programming Priciple)的首字母缩写.以下图说明: 下面就个人的理解来说说这五大原则的含义到 ...
- 面向对象设计SOLID五大原则
转载自:码农社区,http://w3croom.com/read.php?tid-4522.html 今天我给大家带来的是面向对象设计SOLID五大原则的经典解说. 我们知道,面向对象对于 ...
- 【转】面向对象设计的SOLID原则
S.O.L.I.D是面向对象设计和编程(OOD&OOP)中几个重要编码原则(Programming Priciple)的首字母缩写. SRP The Single Responsibility ...
- 面向对象设计的SOLID原则
S.O.L.I.D是面向对象设计和编程(OOD&OOP)中几个重要编码原则(Programming Priciple)的首字母缩写. SRP The Single Responsibility ...
- Delphi面向对象设计的经验原则(61条)
(1)所有数据都应该隐藏在所在的类的内部. (2)类的使用者必须依赖类的共有接口,但类不能依赖它的使用者. (3)尽量减少类的协议中的消息. (4)实现所有类都理解的最基本公有接口[例如,拷贝操作(深 ...
- JAVA 设计的七大原则
一.开闭原则 开闭原则(Open-Closed Principle, OCP)是指一个软件实体如类.模块和函数应该对 扩展开放,对修改关闭. 所谓的开闭,也正是对扩展和修改两个行为的一个原则.强调 的 ...
随机推荐
- 【Python 学习】通过while循环和for循环猜测年龄
Python中可以通过while和for循环来限制猜测年龄的次数 1. 在猜测年龄的小程序中,不加循环的代码是这样的: age_of_yu = 23 guess_age = int(input(&qu ...
- Python socket通信之FTP
Python中利用socket进行server端和client端通信是网络编程的基础,是最简单的传输范例. (懂网络的请自动跳过这一部分) 首先,要想通信,必须建立连接,建立连接的过程,需要clien ...
- tp框架,addAll方法报错,返回false
tp框架的批量添加addAll($data)方法很实用,但是注意,数据数组的数据结构要保持一致,不然会返回false.
- 2015 Multi-University Training Contest 3 hdu 5325 Crazy Bobo
Crazy Bobo Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others)Total ...
- Nginx 项目部署和配置
nginx 作为代理服务器,需要代理多个项目的话配置如下: server { listen 80; server_name localhost; #charset koi8-r; #ac ...
- soapUI 5.1.2 下载以及破解
转:https://blog.csdn.net/weiqing723/article/details/78865734
- apache rewrite 正則表達式基础
用了好几次rewrite,用的次数不是非常多,每次都忘,都得又一次上网上找一堆现看,总结一下,以免以后忘了 =====================分隔符===================== ...
- QMutex“A mutex must be unlocked in the same thread that locked it”解决(在run里创建对象是不二法宝)
多线程时出现如下警告信息: A mutex must be unlocked in the same thread that locked it: 原因可能有二: 1.创建QMutex不在当前线程: ...
- Elasticsearch yellow 意味着主分片可用,副本不可用
摘自:http://unasm.com/2016/11/644/ 在通过 /_cluster/state 命令查看es 状态的时候,发现es 处于一个yellow的状态, 这个很奇怪,按照官方的解释, ...
- Java TreeMap 介绍和使用
转自:https://www.cnblogs.com/skywang12345/p/3310928.html 概要 这一章,我们对TreeMap进行学习. 我们先对TreeMap有个整体认识,然后再学 ...