面向对象和面向过程其实并没有本质的区别。试想,对于面向过程的程序看作一个大的对象,那么全局变量就是属性,全局函数就是方法。只不过这个系统只有一个类。
面向对象是什么?这个话题说起来比较长,要追溯到计算机最初的产生。
最开始图灵用“心内求法”的方式,在思想中构建出了计算机的理论模型——图灵机。简单地说,图灵机是这样一个“输入-输出系统”:输入数据,根据预先编制的程序,改变机器内部的状态,并产生输出。这里面,使得图灵机具有计算能力的关键就是程序,根据需要编制不同的程序,似乎就赋予了图灵机“无限”的计算能力。
后来,冯.诺伊曼用电路实现了图灵机,就是电子计算机。用寄存器处理输入输出,用CPU执行指令进行计算。冯.诺伊曼认识到对于复杂数据的输入输出需要研究数据结构,对于复杂的数据处理需要研究算法。所以提出程序=数据结构+算法。他老人家的这个观点是非常正确的,毕竟计算机是他发明的,原理他最清楚。这也是由计算机的物质基础决定的。
刚开始的时候,人们没期望计算机能干那么多事情,所以按照计算机的“思维”,使用机器语言编写程序告诉计算机该做什么。后来觉得计算机其实很能干,只是跟他说话有点费尽,于是发明了一层层的“翻译程序”,使用越来越接近自然语言的方式编写程序。经过了机器语言-汇编语言-高级语言这么一个过程。
最开始的高级语言是面向过程的,后来才发展到面向对象。其实在我看来,面向对象与面向过程并没有本质的区别。试想,如果我们把面向过程的程序看作一个大的对象,那么全局变量就是属性,全局函数就是方法。只不过这个程序只有一个类,但是整个程序也可以算做是面向对象的。
说了这么多,到底想说什么呢?就是,面向对象其实也没有多“高深”,面向对象的很多原理和面向过程是非常接近的。而且,面向对象编程最基本的原理仍没有超出数据结构和算法。但是,面向对象是其后面向组件,面向服务,面向方面等一系列方法的基础,而且面向对象有其特有的思考问题的方式,即以对象为基础分析和解决问题。这就引出了下一个问题:什么是面向对象的思考问题的方式?
本人的最新博客迁移到http://thinkinside.tk,使用GitHub Pages建立。我会陆续将所写的文章迁移过去,并进行补充和修正,
欢迎过来围观。