面向对象设计(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)是指一个软件实体如类.模块和函数应该对 扩展开放,对修改关闭. 所谓的开闭,也正是对扩展和修改两个行为的一个原则.强调 的 ...
随机推荐
- Qt编程—去掉标题栏和设置窗口透明用法
学习Qt编程,有时候我们很想做出好看又比较炫的画面,这时就常用到qt上的一些技巧. 这里我以一个小例子来展示qt的这些技巧,此qt编程写的,如图:(去掉标题栏和设置窗口透明后) 代码实现部分: .h文 ...
- 2019-03-21 Python Request InsecureRequestWarning
问题: 使用Python3 requests发送HTTPS请求,已经关闭认证(verify=False)情况下,控制台会输出以下错误: InsecureRequestWarning: Unverifi ...
- Java并发和多线程1:并发框架基本示例
Executor框架是指java 5中引入的一系列并发库中与executor相关的一些功能类,其中包括ThreadPool,Executor,Executors,ExecutorService,Com ...
- Maven中的parent定义的dependency,其中继承者是可以直接使用parent中的Maven Dependencies的。
Maven中的parent定义的dependency,其中继承者是可以直接使用parent中的Maven Dependencies的. packagin要选择jar,parent project要选择 ...
- pip安装-mac电脑
If you meant "pip" specifically: Homebrew provides pip via: `brew install python`. However ...
- HDU 4314 Contest 2
可以知道,逃出的人中,最后一个应当是A+B最长的,这是很容易发现的.那么,最选逃出去的必定是A+B最短的.这符合最优. 于是,可以把各小矮人按A+B的和由大到小排序.定义DP[i][j]为i个人中逃出 ...
- 【剑指offer】Q31:连续子数组的组大和
简短的分析见:http://blog.csdn.net/shiquxinkong/article/details/17934747 def FindGreatestSumOfSubArray(arra ...
- cmd 下命令
tasklist 查看当前进程 taskkill /? 查看taskkill 的帮助信息 详情 cmd /? 查看cmd详情 color /? 查看颜色详情 比如 color 2 md d:\ji ...
- 对象不支持“abigimage”属性或方法
在一个网页中用了一个js插件, js文件引用的没有错,代码也和demo差点儿相同, 可是执行时ie的调试工具报了一个错: 解决方式: jquery文件冲突,发现原来自己引过一个 <script ...
- group_concat函数