`
wuhua
  • 浏览: 2112300 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

面向对象设计的11原则--你称得上OO专家么?(专自CSDN)

阅读更多
转自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. MartinObject Mentor公司总裁,面向对象设计、模式、UML、敏捷方法学和极限编程领域内的资深顾问。他不仅是Jolt获奖图书《敏捷软件开发:原则、模式与实践》(中文版)(《敏捷软件开发》(英文影印版))的作者,还是畅销书Designing Object-Oriented C++ Applications Using the Booch Method的作者。MartinPattern Languages of Program Design 3More C++ Gems的主编,并与James Newkirk合著了XP in Practice。他是国际程序员大会上著名的发言人,并在C++ Report杂志担任过4年的编辑。

分享到:
评论

相关推荐

    面向对象的设计原则--ooprinciples

    ### 面向对象的设计原则——开放关闭原则详解 #### 一、背景介绍 面向对象编程(Object-Oriented Programming, OOP)是一种广泛应用于现代软件工程的方法论,旨在通过抽象、封装、继承和多态等特性提高软件的可复用...

    面向对象编程,OO设计的五大原则

    总而言之,OOP的五大原则为开发者提供了一套行之有效的方法论,用于指导面向对象的设计过程。遵循这些原则可以帮助我们构建出更加健壮、灵活和易于维护的软件系统。在实际开发中,理解并应用这些原则是非常重要的,...

    《Head First Java》是本完整的面向对象(object-oriented,OO)程序设计和Java的学习指导

    第一册:《Head First Java》是本完整的面向对象(object-oriented,OO)程序设计和Java的学习指导。 第二册:《HeadFirst设计模式》(中文版)共有14章,每章都介绍了几个设计模式,完整地涵盖了四人组版本全部23个设计...

    OO设计原则 -- OO设计的 DIP依赖倒置原则

    在软件工程领域,特别是面向对象设计中,依赖倒置原则(Dependency Inversion Principle, DIP)是六大设计原则之一,由著名软件架构师Robert C. Martin提出。DIP主要强调的是模块之间的依赖关系应该基于抽象而不是...

    面向对象设计原则解析

    面向对象设计原则是软件开发中的一种核心思想,它为创建可维护、可扩展且易于理解的代码提供了指导方针。在本文中,我们将深入探讨这些原则,帮助你更好地理解和应用它们。 1. **单一职责原则(Single ...

    面向对象分析与设计 麻志毅的课件

    9. **OO设计**:这部分内容可能涵盖了面向对象设计的整体流程,包括分析结果的转化、类的设计原则、接口设计等。 通过这些课件,学习者可以深入了解面向对象分析与设计的全貌,掌握从需求分析到系统实现的关键步骤...

    OO设计原则-里氏替换原则

    ### OO设计原则——里氏替换原则详解 #### 一、引言 面向对象设计原则(Object-Oriented Design Principles)是一套指导软件开发者如何更好地设计类、接口等面向对象元素的原则集合,旨在提高代码的可复用性、可...

    面向对象设计原则和设计模式的概念

    面向对象设计原则与设计模式是软件工程领域的重要组成部分,它们为构建高质量、可维护和可扩展的软件系统提供了指导方针。下面将详细阐述面向对象设计原则及其如何促进软件的复用,以及设计模式的概念。 ### 面向...

    深入浅出面向对象分析与设计.pdf

    面向对象(Object-Oriented,简称OO)是一种软件开发方法,它基于“对象”这一基本概念进行程序设计。在面向对象的世界里,对象是构成系统的基本单元,它们通过消息传递的方式互相作用。面向对象的主要特性包括封装...

    面向对象需求分析(OO RES)

    面向对象需求分析(OO RES) 面向对象需求分析(Object-Oriented Requirements Engineering,OO RES)是一种基于面向对象技术的需求分析方法。该方法将需求分析过程分为三个主要阶段:问题域分析、需求定义和系统...

    UML面向对象建模与设计(Object-Oriented Modeling and Design with UML)习题解

    ### UML面向对象建模与设计(Object-Oriented Modeling and Design with UML)习题解答分析 #### 一、概述 《UML面向对象建模与设计》这本书由Michael Blaha与James Rumbaugh共同撰写,是面向对象设计领域的重要参考...

    oo 面向对象action

    面向对象(Object-Oriented,简称OO)是一种编程范式,它基于“对象”的概念,通过将数据和处理数据的方法封装在一起,实现模块化的、可重用的代码设计。在面向对象编程中,我们通常会涉及到类(Class)、对象...

    面向对象类图-对象图-包图

    面向对象类图是OO方法的核心,用于对系统静态设计视图建模。类图技术可以描述系统的行为和结构,并且可以包含接口、包、关系等建模元素。类图的应用有三类:系统词汇建模、简单协作建模、逻辑数据库模式建模。 类图...

    深入浅出面向对象的分析与设计 完整版 PDF Head First Object-Oriented Design and Analysis.part3

    《深入浅出面向对象分析与设计》将告诉你如何分析、设计以及撰写真正面向对象的软件:容易重利用、好维护、可扩展的软件;不再使你心碎的软件;让你增添新功能而不会破坏旧机制的软件。在本书中,你将学到:  使用...

    面向对象的设计原则——类设计原则

    面向对象设计原则是软件工程领域中的重要组成部分,旨在提高软件系统的可维护性、可扩展性和灵活性。其中,类设计原则尤为关键,它们指导着开发者如何合理地构建类,以适应不断变化的需求。以下是对给定文件中提及的...

    面向对象软件构造(Object-Oriented Software Construction)(已补上33章)

    《面向对象软件构造》是Peter Coad和Edward Yourdon合著的一本经典著作,它深入探讨了面向对象(Object-Oriented,简称OO)软件开发的方法和技术。这本书在IT行业中具有很高的声誉,对于理解面向对象编程思想和实践...

    面向对象的设计原则 doc

    ### 面向对象设计原则详解 面向对象设计的核心目的在于提升软件系统的可维护性和可复用性,这对于软件开发人员来说至关重要。为了达到这一目的,面向对象编程领域总结出了若干设计原则,帮助开发者构建更加健壮、...

    面向对象分析与设计复习提要试题样卷

    面向对象分析与设计是软件开发领域中的核心概念,它涵盖了软件生命周期中从需求理解到系统实现的关键步骤。本文将深入探讨这一主题,并基于提供的资源——"面向对象分析与设计复习提要(2009-2010).ppt" 和 "面向对象...

    UML与面向对象程序设计

    "UML与面向对象程序设计" 面向对象程序设计是一种软件开发方法,它强调从现实世界中客观存在的事务出发来构造软件系统,并在系统的构造中尽可能地运用人类的自然思维方式。面向对象方法的基本思想包括两个主要方面...

Global site tag (gtag.js) - Google Analytics