`

面向对象的设计(1)

 
阅读更多
<script>function StorePage(){d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes'));keyit.focus();}</script>

max()与min()函数的实现没有对数组元素的存储做特殊的假设,因此我们需要检查数

组的每个元素,如果我们要求所有的元素已经排序,则这两个操作就变得非常简单,只要索

引第一个元素和最后一个元素即可,而且如果已知元素已经排序,那么查找一个元素的存

在就会更加高效,但是对数组进行排序增加了Array 类实现的复杂性,我们的设计出错了吗?

实际上,我们现在是否犯了错误与我们做出的选择息息相关,排序的数组是一种特殊的

实现,需要时它完全必要。否则,支持排序数组的额外开销就是一项负担,我们的实现是

比较通用的,在大多数情况下是足够的,它支持更广阔范围内的用户,不幸的是如果用户

绝对需要排序数组的行为,那么我们的实现就不能提供支持,对用户来说他没有办法对

min() max()以及find()这些函数比较通用的实现进行改写。实际上,我们选择的通用实现并不适合特殊的环境。

另一方面,我们的实现对另外一类用户而言又针对性太强了,对索引的范围检查为每次

访问元素增加了额外的负担。在设计中,我们没有考虑这样的开销,而是假设如果结果不正确,那么速度再快也没有价值,但是这种设计至少对于某一类主要

用户实时虚拟和虚拟现实提供商就不成立。在这种情况下数组代表复杂3D 几何图形

的顶点,场景飞快地变化以至于一些偶然的错误不会被看到,但如果访问速度太慢了那

么实时效果就会被打破,我们实现的数组类虽然比没有范围检查的数组类会更安全,但是在这样的实时应用领域却不够实际,

我们怎样才能支持这三种用户的需要呢?解决的方案已经多多少少体现在代码中了,例

如范围检查局限在下标操作符中,去掉check.range()的调用重新命名该数组。现在我们

就有了两种实现,一个有范围检查,一个没有范围检查。进一步拷贝一份代码并把它修改

成针对已排序的数组,现在我们就有了对已排序数组的支持。

// 未排序也没有边界检查

class IntArray{ ... };

// 未排序但支持边界检查

class IntArrayRC{ ... };

// 已排序但没有边界检查

class IntSortedArray{ ... };

这种方案的缺点是什么呢

1.我们必须维护三个包含大量重复代码的数组实现,我们更希望把这些公共代码只保留

一份,然后,由这三个数组类以及其他一些我们以后会选择支持的数组类共享。比

如可能会是一个带有边界检查的排序数组

2.由于三个数组实现是完全独立的类型,所以我们必须编写独立的函数来操作它们,尽

管函数内的一般性操作都是相同的。例如

void process_array( IntArray& );

void process_array( IntArrayRC& );

void process_array( IntSortedArray& );

我们希望只编写一个函数,它不但能接受现有的数组类,而且还能够接受任意将来的

数组类。只要同样的操作集合也能够应用到这些类上,

面向对象的程序设计方法正是为我们提供了这样一种能力。上面第1 项可由继承

inheritance 机制提供。当一个IntArrayRC 类也就是一个带有范围检查的IntArray 类

继承了IntArray 类时,它就可以访问IntArray 的数据成员和成员函数。而不要求我们维护两

份代码拷贝。新的类只需提供实现其额外语义所必需的数据成员和成员函数。

在C++中,被继承的类如本例中的IntArray 被称作基类base class,新类被称作

从基类派生derived 而来,我们把它叫做基类的派生类derived class 或子类型subtype。

分享到:
评论

相关推荐

    面向对象概要设计模板

    面向对象设计是一种软件设计方法,它强调对象之间的交互和协作,以达到软件系统的高内聚、低耦合的目标。在软件设计中,面向对象设计方法可以帮助开发者更好地理解系统的需求和行为,从而提高软件系统的质量和可维护...

    面向对象设计UML实践课后答案

    面向对象设计(Object-Oriented Design,OOD)是一种软件开发方法,它基于“对象”的概念,将现实世界的问题域转化为计算机程序。UML(Unified Modeling Language)是面向对象设计的一种标准化建模语言,用于可视化...

    UML面向对象设计基础

    ### UML面向对象设计基础 #### 基本概念与符号表示 《UML面向对象设计基础》一书详细介绍了面向对象软件设计的基础知识,包括基本概念、符号表示、术语、准则和原理。面向对象设计是一种软件设计范式,强调通过对象...

    Python3 面向对象编程

    第1 章 面向对象设计 1 第2 章 Python 对象 24 第3 章 当对象是相似的 . 54 第4 章 异常处理 . 86 第5 章 何时使用面向对象编程 114 第6 章 Python 数据结构 . 147 第7 章 Python 里面向对象的快捷方式 180 第8 章 ...

    面向对象设计理论

    面向对象设计理论是软件开发领域中的核心概念,它是一种基于现实世界中对象和它们之间交互的编程模型。这种设计方法论极大地提高了代码的可维护性、可扩展性和重用性。下面将详细阐述面向对象设计的基本概念、原则...

    23种面向对象设计模式

    面向对象设计模式是软件开发中的一种重要思想,它通过总结和提炼在软件设计过程中常见的问题和解决方案,形成了可复用的设计规范。标题提到的“23种面向对象设计模式”涵盖了设计模式的主要分类,这些模式在Java、...

    面向对象程序设计—图书管理系统设计.pdf

    1. 面向对象程序设计的概念和特点 2. 图书管理系统的需求分析和系统设计 3. 面向对象程序设计在图书管理系统中的应用 4. C++语言在图书管理系统中的应用 5. 数据结构、算法和数据库在图书管理系统中的应用 6. 面向...

    面向对象分析与设计.pdf

    面向对象设计是在分析的基础上进行的,它关注于如何将需求转化为软件系统的内部结构。设计阶段的输出通常包括更详细的类图、活动图、序列图、状态图和组件图等UML模型。设计过程还会确定系统组件的接口和协作方式。 ...

    面向对象设计原理与模式(Java版)

    《面向对象设计原理与模式(Java版)》全面介绍了Java面向对象程序设计的原理和模式,帮助解决Java程序中的设计问题。此外,该书十分注重Java面向对象程序设计的每个细节,以及继承、方法、类、设计模式等在程序设计...

    C#面向对象设计模式纵横谈(1):面向对象设计模式与原则

    面向对象设计模式是软件开发中的重要工具,它们是经过时间考验和广泛实践验证的设计解决方案,旨在提高代码的可重用性、灵活性和可维护性。C#作为一款强大的面向对象编程语言,为开发者提供了实现这些设计模式的良好...

    面向对象分析与设计1

    国外计算机科学经典教材-面向对象分析与设计(UML 2.0版) 简介:本书详细介绍了面向对象的分析与设计,全面探讨了面向对象概念、软件开发过程、UML和多层技术。 本书使用最常见的技术和方法,通过一个贯穿全书的...

    面向对象系统分析与设计.pdf

    4. 继承:继承是面向对象设计中的一个核心机制,它允许创建一个新类来继承现有类的属性和方法。这使得软件设计可以复用和扩展。 5. UML(统一建模语言):UML是一种标准的图形化建模语言,用于软件系统的设计和文档...

    面向对象系统设计.doc

    在《面向对象系统设计》一书中,作者蒋能学详细介绍了面向对象设计的基本原理和实践技巧,并结合统一建模语言(UML)进行阐述。 1. 面向对象概念: 面向对象设计的核心概念包括: - 封装:将数据和操作这些数据的...

    面向对象程序设计 c++面向对象程序设计 c++面向对象程序设计PPT课件

    面向对象程序设计 c++面向对象程序设计 c++面向对象程序设计

    面向对象程序设计—C++语言描述PDF

    《面向对象程序设计:C++语言描述(原书第2版)》内容丰富,结构合理,写作风格严谨,深刻地论述了c++语言的面向对象编程的各种技术,主要内容包括:面向对象编程方法、c++语言的各种特性、stl、c++输入/输出流、mfc等。...

    面向对象设计之3_基于UML的图书管理系统的分析与设计说明.pdf

    面向对象设计之3_基于UML的图书管理系统的分析与设计说明 本资源摘要信息主要介绍面向对象设计和UML(Unified Modeling Language)在图书管理系统中的应用。面向对象设计是一种程序设计方法,强调使用对象、类、...

Global site tag (gtag.js) - Google Analytics