在学习编程的道路上,理解对象与类几乎是所有学习编程的朋友都面临的一个门槛,尤其是面向对象已经是最广为人知的编程思想,不仅仅有大量的书籍、专著阐述面向对象,更为关键的是几乎所有主流的企业级应用,都是采用面对对象这种编程思想。
就拿我所服务的企业举例,整个公司大大小小能数得上名字的应用系统有一百多个,而这些应用系统中90%以上都使用Java这种面对对象的开发语言,不仅如此,为了能够保证各个系统间信息传递的互联互通,我相信即使在未来新上的应用系统,也还是第一优先考虑Java这种面对对象开发语言的应用系统。
这倒不是什么利益驱使,我个人觉得更多的是基于效率的考量,必须这么做,相同的开发语言,相同的编程思想,就是更容易实现各应用系统之间互联互通,这就如同很多跨国企业都使用英语作为企业内部的官方语言一样,使用同一种语言,相互之间的沟通效率就是更高。
但是,即便面向对象这种编程理念这么流行,我们还是会听到有不同的声音,在李骏老师的编程课中,有这样一段描述:
Erlang 的发明者,Joe Armstrong 就专门写过一篇文章 Why OO Sucks(为什么面向对象逊毙了),这篇文章基本上可以算所有反面向对象人士必引用的檄文,其实 他很认同面向对象方法里一些核心理念,他反对的是一些冗余和不必要的限制。有一次,他参加一个技术论坛接受采访时提到,面向对象方法有三点很有价值,分别是消息、隔离和多态(messaging, isolating and polymorphism),他自己发明的 Erlang 语言以实时并发处理为主要目标,对这三个特性都有很好的设计和实现。他还打过个令人忍俊不禁的比方:
支持OOP的语言的问题在于,它们总是随身携带着一堆并不明确的环境——你明明只不过想要个香蕉,可你所获得的是一个大猩猩手里拿着香蕉…… 以及那大猩猩身后的整个丛林!
-Coders at Work
看完这段话,我不禁感慨,大师就是大师,他们总是能够用最生动、最形象比喻,向我们传达他对这个世界的理解,只是简单的几句话,就能让大部分没有专业知识或者专业背景的人也能理解面对对象语言的问题所在。
在面向对象的编程语言中,最常面对的就是对象和类,顾名思义,面向对象把一切事物都看作“对象(object)”,而把类似事物的共性特征抽象出来称为“类(class)”。反过来说,class 定义一类事物的特征,就像一个模板,需要时可以按照这个模板创造(或者描述)一个具体的 object 出来。
这不禁让我想到了张泉灵老师替孩子们问吴军老师的一个问题:计算机行业的从业者都在干什么?
吴军老师给出的答案是这样的:
从事计算机科学的工作,第一步是将我们这个世界的现实问题变成一个数学问题,这就是计算机科学家们做的事情,第二步就是将数学问题重新描述一下,变成计算机能处理的问题,这就是计算机工程师的工作。
而计算机编程语言所起到的作用就是将这些问题,翻译为计算机能够处理的代码,然后由计算机去完成运算,而面向对象的编程思维,就是将现实世界中的各种抽象成一个个可以操作的对象,然后再对这些对象做运算的过程,而“类”就是人们对相似对象的再一次抽象,仅仅是为了更加方便的去创建新的对象而已,想到这里,以前对于“面向对象”编程的种种不理解一下子消失了。
刘润老师说过:
不抽象,就无法深入思考,不还原,就看不到本来面目,
我想计算机变成语言的出现,其实就是让人重新思考现实问题的开始,而且很显然,计算机编程语言的出现也让人看到了这个世界原来无法看到的本来面目。
网友评论