我经常会困惑什么是面向过程编程,什么是面向对象编程。
我们首先必须有个共识,有些问题不论是采用面向过程编程的方法,还是采用面向对象编程的方法,他们的解决方式基本上相同的,针对这些问题的算法我称之为算法元过程。面向过程使用函数去实现算法元过程,面向对象使用方式去实现算法元过程。举个例子:实现一个排序算法。针对这个问题的实现就是一个算法元过程。你可以实现一个面向过程的方式,也可以实现一个面向对象的方式,然后对比这两个的算法元过程,你会发现他们没有本质的区别。
现在来说说这两种编程的方式的区别。我们先举个例子:读取一个文件,然后输出。
这个问题和上一个问题有个本质的差别,这个问题不能一次性的解决(实际的项目大部分是类似这样的问题的)。
面向过程的编程:
- 打开一个文件,得到一个文件标识符。
- 使用这个文件标识符按行读取文件。
- 使用文件标识符,关闭文件。
- 将读取的内容输出。
面向对象的编程:
- 生成一个对象。
- 使用该对象打开文件的方法。
- 使用该对象的读取文件的方法。
- 使用该对象关闭文件方法。
- 将读取的内容输出。
从上面的列出的步骤,我们能清楚的看到,面向过程是一个自底向上的过程,我们知道文件的读取操作必须依赖文件标识符,面向过程的思考的方式没有脱离这个基础。但是,面向对象的思考方式是自顶向下的过程,从面向对象的实现步骤中,我们只是按照某个设想去完成这件事情,但是,至于这个事情如何实现我们并没有给出具体的内容。这点我想是面向对象不同与面向过程的本质。因为有了这个特性,面向对象才有了什么封装,继承,多态等等的东西。
从上述论述中我们可以看到,面向对象的思维方式更符合人类的思维方式,我们只关心解决问题的方法和步骤,而不会去关心方法的具体实现,这样可以把我们的重心放在如何解决问题,而不是纠结如何实现的细节。不过,话说回来,如果涉及到实现的细节的时候,我们还是会回到面向过程的那一套方式,也就是说,面向过程的编程方式是面向对象编程方式的的基石。不管你怎么面向对象编程,你还是要了解如何打开一个文件,文件标识符是个什么东西,也就是说,你要想真正的完成编程的所有步骤,你需要了解尽可能多的计算机知识,用这些基础的计算机知识搭建你的面向对象的大厦。