`
AimAtNothing
  • 浏览: 3797 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
最近访客 更多访客>>
社区版块
存档分类
最新评论

面向对象的准则

阅读更多
1.3 面向对象的准则
人们编写软件的目的除了使用外,另一个目的是容易修改,否则我们就改制硬件了。所以说,变更是软件的天
性。我们不应该限制软件的更新,而应该适应更新,创造环境使得容易更新,甚至预计可能的变化(所以我们
才有更多的工作机会)。人们经过长期的经验积累和研究认识到,具有可重用性和可维护性的软件能够很好地
适应变化。这里,可重用性是指一个软件模块能否被用在很多不同场合;可维护性是指一个软件模块是否容易
修改,更新和扩展。在面向对象的实践中,人们为了写出具有这两个性质的模块,总结了一些原则。下面,我
们简略地介绍一下这些原则。值得指出的是,除了第一个开闭原则外,其它原则主要是针对类而言的。现在,
人们又总结了一些针对包的原则,但是因为它和我们的内容没有太多的直接关系,所以我们略去不谈。有兴趣
的读者可以参阅一下相关的资料。
1.3.1 开闭原则(OCP,The Open-Closed Principle)
开闭原则是说,所有软件模块都应该可以扩展,但不可以修改。遵循这个原则的关键在于抽象化。我们在写一
个模块时,不论是一个类,还是一个构件,都应该认真思考它的真正功能,它对其它模块的依赖性,输入和输
出,等等。分离出它的可变部分(例如,用接口或外部配置等),对不变部分进行封装。这些不变部分就是这
个模块的本质。这里需要说明的是,在对不变部分进行封装时,我们如何定义不变的部分。在数学中,当我们
谈到不变量时,总是要指明它是在什么变化下的不变量。否则是没有意义的,因为在一种变化下的不变量很有
可能在另一种变化下就不是不变量了。所以,当我们定义不变的部分时,首先要明确它的变化范围。但是,在
软件开发中,很难事先准确的知道这些变化,很多时候是凭经验或行业知识来判断的。所以,这个原则多多少
少带有主观性,更像一个总纲而不像一个硬性的法律条文。Martin Fowler 的书Analysis Patterns 讲解了一些实
际经验,有兴趣的读者可以参考。下面这些原则是讲如何安排依赖性使得模块具有良好的封闭性,可重用性和
可维护性。
1.3.2 依赖反向原则(DIP,Dependency Inversion Principle)
依赖反向原则是说,要依赖于抽象,而不要依赖于具体。这也就是我们所说的:要针对接口编程,而不要针对
实现编程。之所以是倒置,是因为通常在开始依照需求编程时,我们几乎总是依赖于具体的实现。但是,这些
具体的实现都不易适应变化,所以要抽象出一些不变的,本质的功能,把可变的留到具体的实现中去。这种抽
象的过程是前面过程的反向,例如,当我们需要写出结果时,开始时可能会写到文件里,后来可能会写到网络
流里,等等。抽象的结果是写这个功能。针对接口编程是一个不可能过分强调的原则。接口就像高楼大厦中层
分享到:
评论

相关推荐

    面向对象的分析和设计(教学大纲)

    4、介绍面向对象遵循的分析与设计准则; 5、面向对象设计所要完成的任务系统设计以及对象职责的联系; 6、面向对象设计方法的四个子系统:问题域子系统、人机交互子系统、任务管理子系统、数据库管理子系统。

    面向对象设计的准则.pptx

    面向对象设计的准则.pptx

    C++面向对象程序设计

    本课程以最新ANSI(American National Standards Institute)C++作为准则,以美国Microsoft公司开发的Visual C++ 6.0为语言蓝本,系统介绍C++的主要语言特征,并用以讲述面向对象程序设计技术,使学生具有阅读和编写...

    UML面向对象设计基础.pdf

    美 meilir page-jones 著 本书是关于面向对象软件设计的的基本概念、符号表示、术语、准则以及原理的书籍。

    UML面向对象设计与分析基础教程课件第三章

    UML面向对象设计与分析基础教程课件第三章 本章主要讲解了类图、对象图和包图的概念,用于描述系统的结构或静态特征。类图是面向对象系统建模中最常用和最基本的图之一,其他许多图,如状态图、协作图、组件图和...

    软件工程面向对象设计概述.pdf

    面向对象设计的准则包括: 1. 模块化:面向对象设计支持模块化设计的原则,对象就是模块,把数据结构和操作数据的方法紧密地结合在一起构成模块。 2. 抽象:面向对象方法不仅支持过程抽象,而且支持数据抽象。规格...

    UML面向对象设计基础

    UML面向对象设计基础,关于面向对象软件设计的基本概念、符号表示、术语、准则以及原理的书籍。

    软件工程课件:第10章 面向对象设计(第二堂课).ppt

    这些准则和启发规则可以指导我们如何设计一个好的面向对象系统。 三、软件重用 软件重用是指在不同的软件系统中重复使用已经存在的软件组件,以提高软件开发的效率和降低成本。软件重用可以通过继承、组合和聚合等...

    面向对象软件和EFSM规范测试覆盖准则比较 (2011年)

    该文从面向对象程序代码和EFSM规范两方面出发,对现有测试覆盖准则进行了分析比较,给出了2个新的测试覆盖准则,对现有测试覆盖准则进行了扩充,并对基于面向对象程序和EFSM规范的测试覆盖准则进行了公理化评估。...

    企业人力资源管理系统 c++面向对象课程设计

    (1) 某一企业至少具有三个部门(如生产部门、销售部门、管理部门等),每个部门人数不少于5人;...(9) 使用继承的方法至少构造四个类,一个基类,三个派生类,使用对象数组或链表存放文件读入或读出的信息;

    Python面向对象之多态原理与用法案例分析

    本文实例讲述了Python面向对象之多态原理与用法。分享给大家供大家参考,具体如下: 目标 多态 面向对象三大特性 封装 根据 职责 将 属性 和 方法 封装 到一个抽象的 类 中 定义类的准则 继承 实现代码的重用,相同...

    pundit, 通过面向对象设计和纯 ruby 类进行最小授权.zip

    pundit, 通过面向对象设计和纯 ruby 类进行最小授权 Pundit Pundit提供了一组帮助器,它指导你利用正则 ruby 类和面向对象设计模式构建一个简单。健壮和可以扩展的。链接:API文档源代码 。行为准则。赞助: 安装gem...

    面向对象的DoDAF描述方法

    本文来自于360doc.com,文章主要介绍如何采用面向对象的方法描述DoDAF的核心内容,采用面向对象的建模语言SysML描述DoDAF的主要产品。DoDAF从诞生到现在经历了二十个年头,从最初的C4ISR,到现在的DoDAF2.0,体系...

    面向对象软件和EFSM规范测试覆盖准则比较

    面向对象软件和EFSM规范测试覆盖准则比较

    C++ 面向对象教程 21 courses#

    6.2.4 面向行的输入 90 6.3 文件输入输出流 91 6.4 输入输出流缓冲 93 6.5 在输入输出流中查找 94 6.6 strstreams 96 6.6.1 为用户分配的存储 96 6.6.2 自动存储分配 98 6.7 输出流格式化 100 6.7.1 内部格式化数据 ...

    计算机面向对象分析设计PPT学习教案.pptx

    "计算机面向对象分析设计PPT学习教案.pptx" 本文将对计算机面向对象分析设计的知识点进行详细的解释和总结。 1. 分析模型的测试 分析模型的测试实际上包括两部分内容:针对分析模型测试模型的完整性;根据分析...

    嵌入式系统/ARM技术中的面向对象的嵌入式系统设计方法

    关键词:嵌入式系统 面向对象分析设计 UML 有限状态机1 概述随着我国装备制造业的发展,嵌入式系统已经成为制造业的核心技术。它被广泛地应用到工业控制、仿真系统、医疗仪器、信息家电、通信设备等众多领域。目前...

    面向对象软件测试的蜕变关系构造方法 (2015年)

    首先基于代数规格给出面向对象测试中蜕变关系的构造准则,然后根据构造准则对GFT(Generating a Finite number of Test cases)算法中范式构造蜕变关系方法进行改进,最后通过一个整数栈类对提出的蜕变关系构造准则...

    面向对象的高分辨率遥感影像城区建筑物分级提取方法

    利用初提取的建筑物对象和已剔除的非建筑物对象作为样本建立概率模型,根据贝叶斯准则进行建筑物后提取

Global site tag (gtag.js) - Google Analytics