- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《c从零开始12
C++从零开始(十二)何谓面向对象编程思想前面已经说明了C++中最重要的概念——类,并且介绍了大部分和类相关的知识,至此,已经可以开始做些编程方面比较高级的应用——设计程序,而不再只是将算法变成代码。要说明如何设计程序,有必要先了解何谓编程思想。编程思想 编程,即编写程序,而之前已经说过,程序就是方法的描述,那么编程就是编写方法的描述。我知道如何到人民公园,然后我就编写了到人民公园的方法的描述——从市中心开始向东走400米再向右转走200米就是。接着另一个人也知道如何去,但他编的程序却是——从市中心沿人民东路走过两个交叉口,在第三个交叉口处右转,直走就能在右手方看到。很明显,两个程序不同,但最后走的路线是相同的,即大家的方法相同,但描述不同。 所谓的编程思想,就是如何编程,即编写程序的方法。那么之前在《C++从零开始(八)》中说的编程的三个步骤其实就是一种编程思想。这也是为什么不同的人对同一算法编写出的程序不同(指程序逻辑,不是简单的变量或函数名不同),不同的人的编程思想不同。 如果多编或多看一些程序,就会发现编程思想是很重要的。好的编程思想编出的程序条理分明,可维护性高;差的编程思想编出的程序晦涩难懂,可维护性低。注意,这里是从程序的易读性来比较的,实际出于效率,是会使用不符合人脑思维习惯的编程思想,进而导致代码的难于维护,但为了效率还是会经常在程序的瓶颈位置使用被优化了的代码(这种代码一般使用汇编语言编写,算法则很大程度上是数学上的优化,丢弃了大部分其在人类世界中的意义)。 本系列一直坚持并推荐这么一个编程思想——一切均按照语义来编写。而语义是语言的意义,之前说它是代码在人类世界中的意义。比如桌子,映射成一个结构,有桌脚数、颜色等成员变量,那么为什么没有质量、材料、价格、生产日期等成员?对此有必要说明一下“人类世界”的含义。世界 我们生活在一个四维的客观物理世界中,游戏中的怪物生活在游戏定义的游戏世界中,白雪公主生活在一个童话世界中。什么叫世界?世界即规则的集合。比如客观世界中,力可作用于有质量的物体上,并进而按照运动学定律改变物体的速度;电荷异性相吸同性相斥;能量守恒等,这些都是对客观世界这个规则的集合中的某些规则的描述。注意它们都只是规则的描述,不是规则,就好像程序是方法的描述,但不是方法。即方法和规则都是抽象的逻辑概念,各自通过程序和论调来表现。程序就是我们要编写的,而论调就是一门理论,如概率论、运动学、流体力学等。而前面所说的游戏世界,是因为游戏也是一系列规则,关于这点,我在我写的另一篇文章《游戏论》中做了详细的阐述,如果还未理解世界的概念,《游戏论》中关于何谓游戏的阐述希望能有所帮助。同样,童话世界也是由一系列的规则组成。如白雪公主能吃东西,能睡觉,并且能因为吃了毒苹果而中毒;魔镜能回答问题等。 那么就算了解了世界这个概念又怎样?有什么用?前面说了本系列是推荐按照语义来编写程序,即知道了算法后按照《C++从零开始(八)》中说的三步来编写程序。而算法是基于某些规则的,如给出1到100求和的算法是(1+100)*100/2,这里就暗示已经有那么些规则说明什么是加减乘除,什么是求和。即一个算法一定是就一个世界来说的,它在另一个世界可能毫无意义。因为算法就是方法,是由之前说的命令和被操作的资源组成,而命令和资源就是由世界来定义的。 前面说根据算法写代码,其实是先制订了一个世界来做为算法展示的平台。如之前的商人过河,其就在如下的一个规则集上表现的:有一只能坐两人的船可以载人过河;有三个商人和三个仆人在河的一边;河的任意一边仆人数多过商人数商人就会被杀。这是对过河问题所基于的世界的严重不准确的描述,但在这过于抽象并没什么好处,只用注意:上面的商人和仆人不是现实世界中的商人和仆人,他们不能吃饭不能睡觉不能讲话,甚至连走路都不会,唯一会的是通过坐船过河来改变自身的位置。当某一位置(即河的某一岸)的仆人的实例多于商人的实例时(且商人的实例至少有一个),则称商人被杀。上面的描述暂且称为商人仆人论,它是对过河问题所基于的世界的一个描述。 另一个人却不像上面那样看待问题。河有两个岸,每个河岸总对应着两个数字——商人数和仆人数。有一个途径能按照某个规则改变河岸对应的两个数字(就是坐只能坐两人的船过河),而当任何一个河岸所对应的仆人数多于商人数时(且商人数不为零),则称商人被杀。此人没有定义商人和仆人这么两个概念,而只定义了一个概念——河岸,此概念具有两个属性——商人数和仆人数。这是另一个论调,暂且称为河岸论。 什么意思?上面就是对商人过河问题所基于的世界的两个不同论调。注意上面论调不同,但描述的都是同一个世界,就好像动力学和量子力学,都是对客观世界物体之间作用规则的描述,但大相径庭。算法总是基于一个世界,但更准确点的说法应是算法总是基于一
文档评论(0)