- 浏览: 124696 次
- 性别:
- 来自: 武汉
-
文章分类
最新评论
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。
发表评论
-
在ubuntu7.10用终端编译运行c++程序
2008-02-27 15:54 1039<script>function StorePag ... -
函数指针大全
2009-01-01 18:44 520<script>function StorePag ... -
问题的解决
2009-05-20 00:16 522<script>function StorePag ... -
1.2 C++程序
2009-05-20 23:16 600<script>function StorePag ... -
C++的预处理器指示符
2009-05-21 22:58 900<script>function StorePag ... -
1.4 注释
2009-05-23 00:05 569<script>function StorePag ... -
1.5 输入输出初步
2009-05-23 23:18 566<script>function StorePag ... -
2.3 基于对象的设计
2009-05-27 22:17 595<script>function StorePag ... -
基于对象的设计(2)
2009-05-28 23:48 513<script>function StorePag ... -
基于对象的设计(3)
2009-05-30 00:51 529<script>function StorePag ... -
基于对象的设计(4)
2009-05-31 02:07 630<script>function StorePag ... -
基于对象的设计(5)
2009-05-31 22:50 691<script>function StorePag ... -
面向对象的设计(2)
2009-06-03 00:22 676<script>function StorePag ... -
面向对象的设计(3)
2009-06-03 22:51 612<script>function StorePag ... -
面向对象的设计(4)
2009-06-05 00:05 635<script>function StorePag ... -
面向对象的设计(5)
2009-06-05 23:17 742<script>function StorePag ... -
泛型设计(1)
2009-06-07 00:28 621<script>function StorePag ... -
泛型设计(2)
2009-06-08 01:04 680<script>function StorePag ... -
泛型设计(3)
2009-06-09 01:14 609<script>function StorePag ... -
基于异常的设计(1)
2009-06-10 00:39 552异常exception 是指在运行时刻程序出现的反情形,例如数 ...
相关推荐
面向对象设计是一种软件设计方法,它强调对象之间的交互和协作,以达到软件系统的高内聚、低耦合的目标。在软件设计中,面向对象设计方法可以帮助开发者更好地理解系统的需求和行为,从而提高软件系统的质量和可维护...
面向对象设计(Object-Oriented Design,OOD)是一种软件开发方法,它基于“对象”的概念,将现实世界的问题域转化为计算机程序。UML(Unified Modeling Language)是面向对象设计的一种标准化建模语言,用于可视化...
### UML面向对象设计基础 #### 基本概念与符号表示 《UML面向对象设计基础》一书详细介绍了面向对象软件设计的基础知识,包括基本概念、符号表示、术语、准则和原理。面向对象设计是一种软件设计范式,强调通过对象...
第1 章 面向对象设计 1 第2 章 Python 对象 24 第3 章 当对象是相似的 . 54 第4 章 异常处理 . 86 第5 章 何时使用面向对象编程 114 第6 章 Python 数据结构 . 147 第7 章 Python 里面向对象的快捷方式 180 第8 章 ...
面向对象设计理论是软件开发领域中的核心概念,它是一种基于现实世界中对象和它们之间交互的编程模型。这种设计方法论极大地提高了代码的可维护性、可扩展性和重用性。下面将详细阐述面向对象设计的基本概念、原则...
面向对象设计模式是软件开发中的一种重要思想,它通过总结和提炼在软件设计过程中常见的问题和解决方案,形成了可复用的设计规范。标题提到的“23种面向对象设计模式”涵盖了设计模式的主要分类,这些模式在Java、...
1. 面向对象程序设计的概念和特点 2. 图书管理系统的需求分析和系统设计 3. 面向对象程序设计在图书管理系统中的应用 4. C++语言在图书管理系统中的应用 5. 数据结构、算法和数据库在图书管理系统中的应用 6. 面向...
面向对象设计是在分析的基础上进行的,它关注于如何将需求转化为软件系统的内部结构。设计阶段的输出通常包括更详细的类图、活动图、序列图、状态图和组件图等UML模型。设计过程还会确定系统组件的接口和协作方式。 ...
《面向对象设计原理与模式(Java版)》全面介绍了Java面向对象程序设计的原理和模式,帮助解决Java程序中的设计问题。此外,该书十分注重Java面向对象程序设计的每个细节,以及继承、方法、类、设计模式等在程序设计...
面向对象设计模式是软件开发中的重要工具,它们是经过时间考验和广泛实践验证的设计解决方案,旨在提高代码的可重用性、灵活性和可维护性。C#作为一款强大的面向对象编程语言,为开发者提供了实现这些设计模式的良好...
国外计算机科学经典教材-面向对象分析与设计(UML 2.0版) 简介:本书详细介绍了面向对象的分析与设计,全面探讨了面向对象概念、软件开发过程、UML和多层技术。 本书使用最常见的技术和方法,通过一个贯穿全书的...
4. 继承:继承是面向对象设计中的一个核心机制,它允许创建一个新类来继承现有类的属性和方法。这使得软件设计可以复用和扩展。 5. UML(统一建模语言):UML是一种标准的图形化建模语言,用于软件系统的设计和文档...
在《面向对象系统设计》一书中,作者蒋能学详细介绍了面向对象设计的基本原理和实践技巧,并结合统一建模语言(UML)进行阐述。 1. 面向对象概念: 面向对象设计的核心概念包括: - 封装:将数据和操作这些数据的...
面向对象程序设计 c++面向对象程序设计 c++面向对象程序设计
《面向对象程序设计:C++语言描述(原书第2版)》内容丰富,结构合理,写作风格严谨,深刻地论述了c++语言的面向对象编程的各种技术,主要内容包括:面向对象编程方法、c++语言的各种特性、stl、c++输入/输出流、mfc等。...
面向对象设计之3_基于UML的图书管理系统的分析与设计说明 本资源摘要信息主要介绍面向对象设计和UML(Unified Modeling Language)在图书管理系统中的应用。面向对象设计是一种程序设计方法,强调使用对象、类、...