观点问题

C++/数据结构

1、简述你对“面向对象”和“面向过程”编程思想的认识与思考用便可以了。

面向过程

就是剖析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个

一个依次调

面向对象是把组成问题事务分解成各个对象,成立对象的目的不是为了达成一个步骤,而是

为了描叙某个事物在整个解决问题的步骤中的行为。

比如五子棋,面向过程的设计思路就是首先剖析问题的步骤:1、开始游戏, 2、黑子先走,

3、绘制画面,4、判断输赢,5、轮到白子,6、绘制画面, 7、判断输赢,8、返回步骤2,

9、输出最后结果。把上面每个步骤用分其他函数来实现,问题就解决了。

而面向对象的设计则是从此外的思路来解决问题。

整个五子棋能够分为 1 、黑白双方, 这两

方的行为是如出一辙的, 2、棋盘系统,负责绘制画面,

3、规则系统,负责判断诸如犯规、

输赢等。第一类对象(玩家对象)负责接受用户输入,并见告第二类对象(棋盘对象)棋子

布局的变化, 棋盘对象接收到了棋子的 i

变化就要负责在屏幕上面显示出这种变化,

同时利

用第三类对象(规则系统)来对棋局进行判断。

能够明显地看出,面向对象是以功能来划分问题,

而不是步骤。同样是绘制棋局,

这样的行

为在面向过程的设计中分别在了总多步骤中,

很可能出现不同的绘制版本, 因为往常设计人

员会考虑到实际情况进行各种各种的简化。

而面向对象的设计中, 画图只可能在棋盘对象中

出现,进而保证了画图的统一。

功能上的统一保证了面向对象设计的可扩展性。比方我要加入悔棋的功能,如果要变动面向

过程的设计, 那么从输入到判断到显示这一连串的步骤都要变动,甚至步骤之间的顺序都要

进行大规模调整。如果是面向对象的话,只用变动棋盘对象就行了,棋盘系统保存了黑白双

方的棋谱, 简单回溯便可以了,而显示和规则判断则不用顾及,同时整个对对象功能的调用

次序都没有变化,变动只是局部的。

再比方我要把这个五子棋游戏改为围棋游戏, 如果你是面向过程设计, 那么五子棋的规则就散布在了你的程序的每一个角落, 要变动还不如重写。 可是如果你当初就是面向对象的设计,那么你只用变动规则对象便可以了, 五子棋和围棋的区别不就是规则吗 (自然棋盘大小仿佛也不同样,可是你会觉得这是一个难题吗直接在棋盘对象中进行一番小变动便可以了。 )而下棋的大概步骤从面向对象的角度来看没有任何变化。

自然,要达到变动只是局部的需要设计的人有足够的经验, 使用对象不能保证你的程序就是面向对象, 初学者或许很蹩脚的程序员很可能以面向对象之虚而行面向过程之实, 这样设计出来的所谓面向对象的程序很难有优秀的可移植性和可扩展性。

2、 ADT 是什么简述你对“数据抽象”和“信息隐藏”的认

抽象数据种类 (Abstract Data Type简称ADT)是指一个数学模型以及定义在此数学模型上

的一组操作。 抽象数据种类需要通过固有数据种类(高级编程语言中已实现的数据种类)来

实现。抽象数据种类是与表示无关的数据种类,是一个数据模型及定义在该模型上的一组运

算。对一个抽象数据种类进行定义时,必须给出它的名字及各运算的运算符名,即函数名,

并且规定这些函数的参数性质。一旦定义了一个抽象数据种类及详细实现,程序设计中便可

以像使用基本数据种类那样,十分方便地使用抽象数据种类。

抽象数据种类通过类(class)实现

程序设计语言对抽象数据种类的支持是指允许用户自定义具有如下特点的数据种类:

模块封装: The representation of, and operations on, objects of the type are defined in a single

syntactic unit

信息隐蔽: The representation of objects of the type is hidden from the program units that use these

objects,so the only operationspossibleare thoseprovidedin the type'sdefinition

3、 const 和 static有什么作用

const 是一个 C 和 C++语言的重点字,它限定一个变量不允许被改变,即只读。使用 const 在一定程度上能够提高程序的安全性和可靠性, 也便于实现对此进行优化 (如把只读对象放入 ROM中)。 const 作为种类限定符,是种类的一部分。

4、友元关系的利与弊

如果将一个函数或一个类声明为另一个类的友元,那么它便可以直接存取这个类对象中的各

种数据,而不必在意这些数据的