面向对象设计(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)是指一个软件实体如类.模块和函数应该对 扩展开放,对修改关闭. 所谓的开闭,也正是对扩展和修改两个行为的一个原则.强调 的 ...
随机推荐
- 洛谷 P1147 连续自然数和 (滑动窗口)
维护一个滑动窗口即可 注意不能有m到m的区间,因为区间长度要大于1 #include<cstdio> #define _for(i, a, b) for(int i = (a); i &l ...
- 【codeforces 500E】New Year Domino
[题目链接]:http://codeforces.com/problemset/problem/500/E [题意] 有n个多米诺骨牌; 你知道它们的长度; 然后问你,如果把第i骨牌往后推倒,然后要求 ...
- Winserver服务器-AD字段对照简图
AD字段对照简图
- ASP.NET-使用json
数据格式 vat strJson =' {"name":"jingya","Age":88} '; // 数字不用写双引号 JSON.par ...
- POJ 2480
可以容易得知,F=sum(p*phi(n/p)).思路就断在这里了... 看过别人的,才知道如下: 由于gcd(i,n*m)=gcd(i,m)*gcd(i,n),所以gcd为积性函数.而积性函数之和为 ...
- IntelliJ IDEA could not autowire no beans of 'Decoder'
IntelliJ IDEA could not autowire no beans of 'Decoder' 学习了:http://blog.csdn.net/u012453843/article/ ...
- SSH Key的生成和使用(for git)
SSH Key的生成和使用 一.总结 1.用git base生成ssh,会生成id_rsa.pub文件,还有一个私钥文件. $ ssh-keygen -t rsa -C “youremailn ...
- 时间处理工具类TimeUtil
转自:https://cnblogs.com/ityouknow/p/5662753.html 功能 Date与String之间的互相转换,以及一些特殊格式的时间字符串处理 代码 /** * 类名:T ...
- TabPage判断重复添加Page
..... ........ ...........代码如下: bool isPag = true; foreach (TabPage page in tbpDynamicMenu.TabPages) ...
- Oracle数据库to_date函数注意事项
使用PL/SQL连接到Oracle数据库服务器,执行一条update语句: update pjnl set transtime = to_date('2015-05-14 12:13:20','yyy ...