`

面向对象的设计(3)

阅读更多
<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>

在基于对象的程序设计中,通常类的提供者只有一个,但是类的用户有许多个提供者

设计,并且通常也会实现。类用户使用提供者提供的公有接口行为的分离,可通过将类分成公

有与私有访问级别而反映出来。

在继承机制下,有多个类的提供者。一个提供基类实现,可能还有一些派生类,另外一

个或多个提供者在继承层次的生命周期内提供派生类。这种行为也是一种实现行为。于类的

提供者经常但并不总是需要访问基类的实现。为了提供这种能力,同时还要防止对基类

实现的一般性访问。C++提供了另外一个访问级别保护protected ,级别在类的保护区

域内的数据成员和成员函数。不提供给一般的程序,只提供给派生类放在基类的私有区

域内的成员,只能供该类自己使用。派生类不能使用下面是修改过的IntArray 类

class IntArray {

public:

// 构造函数

explicit IntArray( int size = DefaultArraySize );

IntArray( int *array, int array_size );

IntArray( const IntArray &rhs );

// 虚拟析构函数

virtual ~IntArray() { delete [] ia; }

// 等于和不等于操作

bool operator==( const IntArray& ) const;

bool operator!=( const IntArray& ) const;

IntArray& operator=( const IntArray& );

int size() const { return _size; }

// 去掉了索引检查功能 . . .

virtual int& operator[](int index) { return ia[index]; }

virtual void sort();

virtual int min() const;

virtual int max() const;

virtual int find( int value ) const;

protected:

// 参见13.5 节的说明

static const int DefaultArraySize = 12;

void init( int sz, int *array );

int _size;

int *ia;

};

在面向对象与基于对象的设计中,指明一个类的成员是public 的准则没有变化,重新设

计的IntArray 类将被用作基类,它仍然把构造函数析构函数下标操作符min()和max()

等等声明为公有成员,这些成员继续提供公有接口,但现在接口不只为IntArray 类服务,同

时也为从它派生的整个继承层次服务。

非公有的成员到底该声明为protected 还是private? 类成员是新的设计准则。如果希望防

止派生类直接访问某个成员,我们就把该成员声明为基类的private成员,如果确信某个成员

提供了派生类,需要直接访问的操作或数据存储,而且通过这个成员派生类的实现会更有效

则我们把该成员声明为protected ,对于IntArray 类,我们已经将全部数据成员设置成protected,

也就是实际上允许后续派生的类访问IntArray 的实现细节。

为了把一个类设计成基类,要做的第二个设计考虑是找出类型相关的成员函数,并把这些成员函数标记virtual 虚拟的。

对于类型相关的成员函数,它的算法由特定的基类或派生类的行为或实现来决定。例如

对每种数组类型下标操作符的实现是不同的,所以我们将它声明为Virtual

等于不等于操作符和size()成员函数的实现对于其应用的数组类型来说是独立的。因此

不把它声明成Virtual。

分享到:
评论

相关推荐

    面向对象概要设计模板

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

    UML面向对象设计基础

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

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

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

    面向对象设计理论

    3. **面向对象设计(OOD)**: - OOD是将分析模型转化为具体的软件设计,包括类的设计、接口设计、结构设计等。 - **设计模式**:解决常见设计问题的标准解决方案,如工厂模式、单例模式、观察者模式等。 - **...

    23种面向对象设计模式

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

    面向对象分析与设计(第3版).pdf

    面向对象设计的核心在于模拟现实世界中的对象,通过抽象、封装、继承和多态四大特性来组织代码结构,提高代码的复用性和模块性。具体而言: 1. **抽象**:是将复杂系统简化,提取出关键特性和行为的过程。在面向...

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

    3. 面向对象程序设计在图书管理系统中的应用 4. C++语言在图书管理系统中的应用 5. 数据结构、算法和数据库在图书管理系统中的应用 6. 面向对象程序设计在提高系统效率和可维护性方面的作用 7. 图书管理系统的优点和...

    面向对象分析与设计.pdf

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

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

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

    SSD3 面向对象程序设计 pdf

    卡耐基梅隆大学的SSD3课程,即面向对象程序设计,主要的教学目标是帮助学生通过面向对象的设计和实现来掌握问题解决的方法。该课程特别强调问题分析与解决方案的设计、文档编写和程序实现。SSD3教材内容覆盖了面向...

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

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

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

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

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

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

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

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

    Java面向对象程序设计

    3. **封装**:封装是面向对象的核心特征之一,它隐藏了对象内部的实现细节,只对外提供公共接口。在Java中,通过访问修饰符(如public、private、protected)来实现封装。 4. **继承**:继承允许一个类(子类)从另...

Global site tag (gtag.js) - Google Analytics