面向对象的一点思考

孤街醉人 提交于 2020-12-21 20:39:30

什么是面向对象?也许你也被面试官曾经这么问过。一直以来,也许你和我一样都不曾纠结与这个问题的答案,这和我们写好程序关系可能不大。我也不清楚为什么面试官会这么问,也许题库上有这么一道题。对于自己没办法回答的问题,我会有拿去考考别人的习惯,后面也有问了好几个学习Java或者C++的朋友,都是有点含糊其辞的回答了关于面向对象语言本身的一些特性,似乎并不是和问题对的上。

很多时候,我很希望要是认识作者就好了,这样,就只需要在平时聊天的时候问他:"嘿,你是怎么想的?"。但现实总是不尽人意的,很多答案我们可能只能自己去猜了。问题上有个非常关键的词:对象。很快,我在google的搜索框中找到了对它的解释:

对象【客体】(英语:Object):指可感知或可想像到的任何事物,既包括客观存在并可观察到的事物(如树木、房屋,抽象的如物价、自由),也包括想像的事物(如神话人物)。

原来这是个哲学概念。对哲学虽然没有什么研究,但是在高中时候被灌输的那点马克思主义的东西,还是可以理解的。有客体就会有主体,主体是实践活动和认识活动的承担着,客体(对象)是主体实践活动和认识活动指向的对象。想想我们人之初,是怎么认识‘鸭’这个物种的?


在见过了各种‘鸭’之后,在我们脑袋中的对‘鸭’的特征和行为便形成了我们对鸭的概念。为什么科学家们会想到用人认识世界的这种方法套用到计算机的身上呢?这让我想起了计算机革命的终极理想: 让机器像人一样。中学时候,计算机的记忆就是那台小小的卡西欧,是用来计算那些cos,sin什么的。对于那种带CRT屏,用个箱子装好,带了个win98的玩意,我尊称它为:电脑。让我们再回顾一下冯诺依曼体系结构,其实整个计算体系其实就是对人的抽象。

  

输入设备就是对我们眼睛耳朵等的模拟; 存储器就是我们的记忆细胞,控制器和运算器就是我们的大脑,输出就是经过大脑处理之后我们对外界的反应。既然计算机就是对人的抽象,那么对于语言设计者来说,是否可以设计一门让机器像人一样理解的语言呢?这样的话,那对于人来说,便可以根据自己的思维去要求计算机达到自己想要的要求了。说到这里,答案也就差不多揭晓了。我们可以通过客体【对象】来认识世界,我们可以通过对象的属性和行为去了解这个对象,同样的,如果可以通过计算机来描述对象的属性和行为,那么,计算机就可以抽象出现实世界。回到面向对象语言诞生之初,在查阅历史的时候有这么一段话:

对象作为编程实体最早是于1960年代由Simula 67语言引入思维。Simula这一语言是奥利-约翰·达尔和克利斯登·奈加特在挪威奥斯陆计算机中心为模拟环境而设计的。据说,他们是为了模拟船只而设计的这种语言,并且对不同船只间属性的相互影响感兴趣。他们将不同的船只归纳为不同的类,而每一个对象,基于它的类,可以定义它自己的属性和行为。 [1]

这里提出了类的概念,对象就是类的一个实例。类具有属性和行为,这和人类认识世界的方法是不吻而合的。这里还有一个关键的问题还没有回答,用面向对象的思想去指导人们编程,是否可以完成它既定的目标: 在软硬件环境逐渐复杂的情况下,让软件得到良好的维护? 这个问题的答案早就在多年后的今天已经得到了证明,在面向大型系统的构建时,面向对象语言的可重复性正充分展示着它独有的魅力。

1、http://zh.wikipedia.org/wiki/%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1%E7%9A%84%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1#.E5.8E.86.E5.8F.B2

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!