转自
blog.csdn.net/rmartin/archive/2006/09/28/1299516.aspx
面向对象设计是什么?都包含了哪些内容?它所带来的好处是什么?需要你为之付出些什么?在如今这个年代,问这些问题似乎显得很愚蠢,因为这年头几乎每位软件开发人员都知道如何使用某种面向对象编程语言。可是这个问题还是很重要,因为在我看来,绝大多数人在使用这些语言的时候并不知道为什么,而且也不知该如何最充分的运用它们。
软件业曾经爆发过的所有变革里,其中曾经有两个派系如此广泛的深入人心,它们就是结构化编程和面向对象编程。所有主流的现代编程语言都被它们两个激烈的影响着。实际上,要想不像结构化和面向对象编程的样子来编写程序都是一件难事。我们的主流编程语言都没有goto,因此它们服从了结构化编程中最重要的禁令。我们的大多数主流编程语言都是基于类的,而且不支持在类以外定义函数或是变量,因此也避免了面向对象编程中最容易坠入的陷阱。
用这些编程语言所编写的程序可能看起来是结构化的或是面向对象的,可是“看起来”是会欺骗人的。当今的编程语言经常不顾他们所从属那种派系的编程语言的基本原则。我会在另篇blog中再探讨结构化编程的原则,本篇,我想要谈论的是面向对象编程的基本原则。
在1995年的三月,我写了一篇文章并发表在comp.object上,那是我第一次写OOD(译注1)原则的文章,此后就一发不可收拾的写了很多。你可以在我的PPP一书(译注2)中看到它们,在object mentor的很多文章中也都有,其中就有那篇众所周知的纲要(近期会译为中文,请关注)。
这些原则着重于OOD中的依赖管理方面,而淡化抽象与建模方面。这并不是说OO在抽象方面不够强大,或是OO不适合构建模型。当然有很多人都在使用OO的这些部分,只是这些原则集中关注于依赖管理。
依赖管理是我们每个人都要面对的问题,每当我们在屏幕面前打开那些彼此纠结又令人作呕的代码,我们就会遭受不良的依赖管理所带来的恶果。不良的依赖管理导致代码难以改变,易被破坏,而且不可重用。实际上,我在PPP一书中谈论过很多不同的设计坏味道,而这些都与依赖管理有关。从另一方面来说,如果依赖经过了良性的管理,代码就可以保持灵活性、健壮性和重用性。所以依赖管理和这些相关原则是程序员们渴求的让软件保持优良架构的基石。
头五项原则是关于类设计的,它们是:
另外的六项是关于包的设计原则。在本文中,包是指一个二进制的可发布文件,比如.jar文件、或dll文件,而不是Java包或是C++的命名空间(译注3)。
头三项包原则是关于包内聚性的,它们会告诉我们该把什么划分到包中:
最后的三项原则是关于包之间的耦合性原则的,并且论述了评价系统中包结构优良与否的评判标准。
译注:
1,OOD,全称Object Oriented Design,即面向对象设计。
2,PPP,即Bob大叔的著作《敏捷软件开发 原则、模式与实践》一书以及其相关书籍,因都有“原则、模式与实践”,即Priciples, Patterns and Practices,故常简称为PPP。
3,命名空间,原文为namespace,也译作名字空间。它是一种特殊的作用域,它包含了处于该作用域内的所有标示符,且本身也用一个标示符来表示,这样便于将一系列在逻辑上相关的标示符用一个标示符来组织。就Java编程语言来说,命名空间是通过java包来表达的,所有代码都归属与一个包。来自其他包中的代码要通过指定包名来引用某项特定的标示符,例如,包java.lang中的String类要通过java.lang.String的形式引用。在C++中,命名空间常用来避免命名冲突,尽管现今的C++语言对命名空间做出了扩展,但过去的C++代码很少使用此项功能。
(原文链接网址:http://www.butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod; Robert C. Martin的英文blog网址: http://www.butunclebob.com/ArticleS.UncleBob)
作者简介:Robert C. Martin是Object Mentor公司总裁,面向对象设计、模式、UML、敏捷方法学和极限编程领域内的资深顾问。他不仅是Jolt获奖图书《敏捷软件开发:原则、模式与实践》(中文版)(《敏捷软件开发》(英文影印版))的作者,还是畅销书Designing Object-Oriented C++ Applications Using the Booch Method的作者。Martin是Pattern Languages of Program Design 3和More C++ Gems的主编,并与James Newkirk合著了XP in Practice。他是国际程序员大会上著名的发言人,并在C++ Report杂志担任过4年的编辑。
分享到:
相关推荐
面向对象的类的设计原则,本人认为对于学习面向对象的设计很有用。开放关闭原则
面向对象,编程,OO设计的五大原则 OO的五大原则是指SRP、OCP、LSP、DIP、ISP。
第一册:《Head First Java》是本完整的面向对象(object-oriented,OO)程序设计和Java的学习指导。 第二册:《HeadFirst设计模式》(中文版)共有14章,每章都介绍了几个设计模式,完整地涵盖了四人组版本全部23个设计...
面向对象设计原则和设计模式的概念,讲述面向对象的设计模式
OO设计原则 --OO设计的LSP里氏替换原则 ,所以使用基类代码的地方,用派生类代码替换后,能够正确的执行动作处理。 ◇ 换句话说,如果派生类替换了基类后,不能够正确执行动作,那么他们的继承关系就应该废除。
依赖倒置原则的2个重要方针 1.高层模块不应该依赖于低层模块,二者都应该依赖于抽象 2.抽象不应该依赖于细节,细节应该依赖于抽象
《面向对象分析与设计(第3版)》是UML创始人Grady Booch的代表作之一,书中介绍的概念都基于牢固的理论基础。同时,《面向对象分析与设计(第3版)》又是一本注重实效的书,面向架构师和软件开发者等软件工程实践者的...
《深入浅出面向对象分析与设计》将告诉你如何分析、设计以及撰写真正面向对象的软件:容易重利用、好维护、可扩展的软件;不再使你心碎的软件;让你增添新功能而不会破坏旧机制的软件。在本书中,你将学到: 使用...
主要讲解面向对象的设计原则,在面向对象设计中,如何通过很小的设计改变就可以应对设计需求的变化,这是令设计者极为关注的问题。为此不少OO先驱提出了很多有关面向对象的设计原则用于指导OO的设计和开发
面向对象(Object Oriented ,OO)它是一种设计思想,现在这种思想已经不单应用在软件设计上,数据库设计、计算机辅助设计(CAD)、网络结构设计、人工智能算法设计等领域都开始应用这种思想。 针对面向对象思想应用的...
《深入浅出面向对象分析与设计》将告诉你如何分析、设计以及撰写真正面向对象的软件:容易重利用、好维护、可扩展的软件;不再使你心碎的软件;让你增添新功能而不会破坏旧机制的软件。在本书中,你将学到: 使用...
面向对象设计根本的指导原则是提高可维护性和可复用性。这些原则主要有:1. 开闭原则;2. 依赖倒转原则;3. 里氏代换原则;4. 合成/聚合复用原则;5. 迪米特原则;6. 接口隔离原则
设计模式-可复用面向对象软件的基础 设计模式-可复用面向对象软件的基础 设计模式-可复用面向对象软件的基础 设计模式-可复用面向对象软件的基础 设计模式-可复用面向对象软件的基础
掌握内聚度和耦合度的概念 掌握面向对象设计原则
使用通俗的举例让大家知道oo的概念OO 面向对象概念通俗说明
《深入浅出面向对象分析与设计》将告诉你如何分析、设计以及撰写真正面向对象的软件:容易重利用、好维护、可扩展的软件;不再使你心碎的软件;让你增添新功能而不会破坏旧机制的软件。在本书中,你将学到: 使用...
面向对象(Object Oriented,OO),注重的是一个个的对象,这些对象各司其职,我们只需发号施令,即可指挥这些对象帮我们完成任务。 6.1.1 面向过程与面向对象 1、概念 2、面向过程与面向对象的优缺点 优点 缺点 ...
面向对象设计原则,doc格式,方便编辑整理。
, 《深入浅出面向对象分析和设计》将告诉你如何分析、设计以及撰写真正面向对象的软件:容易重利用、好维护、可扩展的软件;不再使你心碎的软件;让你增添新功能而不会破坏旧机制的软件。在本书中,你将学到:, ·...