- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
概念问题
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 operations possible are those provided in the types definition
3、const 和static 有什么作用?
const 是一个 C 和 C++语言的关键字,它限定一个变量不允许被改变,即只读。使用 const 在一定程度上可以提高程序的安全性和可靠性,也便于实现对此进行优化(如把只读对象放入 ROM 中)。const 作为类型限定符
文档评论(0)