今天有幸了解了C、C++、C#三种语言的区别,它们重新提及Java一个很重要的概念--面向对象的思想。
C可以说是高级汇编语言的鼻祖,它是完全面向过程的一种开发。C++则是继承于C,在C的基础上增加了“类”的概念,即“对象”。因此,C++可以说既兼容了C的开发特点,又衍生出了新的优点,因此也是公认比较难学的语言。C#则跟Java一样,完全面对对象,因此也是比较易于上手的。
但是究竟什么是面向过程什么是面向对象?今天,我想结合实际,并用个例子讲讲我的理解。
面向过程:我前面说过了,C是完全面向过程的,而相信大家作为软件开发的也都知道,软件运行必须是建立在硬件上的。作为软硬交互、沟通所需的一项重要媒介,就是C语言(android的四层基础架构,底层使用的便是C/C++运行库,这也是大部分底层驱动为什么都用C和C++的原因--面向过程)。 开始打比方了。我想通过软件操控机械手臂去做搬砖,把砖头从A搬到B地点。要设计这么一套指令,那么问题来了,我就必须要考虑到每个问题:机械手臂伸长多少才能取到砖头?机械手臂需要调整多少角度,改变多少距离才能把砖头送到B?我抓砖头的力道是多少?等等一大堆的问题。而这些问题无外乎共同体现了“机械手臂把砖头从A搬到B过程中,该怎么做?”这一思想。怎么去操纵好机械手臂,它就必须精确运算,综合考虑以上各个问题集中解决所有“过程动作”,才能实现最终目的。这就是“面向过程”的思想,集中考虑到各个细节的处理,因此它的业务逻辑特别多,特别麻烦,因为需要处理的问题真的太多了。
面向对象:同样用“操控机械手臂去做搬砖,把砖头从A搬到B地点”为例子,那么C#跟Java就没那么麻烦了,因为他只需要给出(封装出)一个“机械手臂”这个对象(类),然后在A处get砖头,在B处put砖头就行,过程根本不用你考虑。这就是面向对象!怎么样?太简单了还是听不懂?没错,就是这么简单!面向对象了,我们就不管对象是什么,是怎么工作的,我们只要知道,它这个对象能“搬砖”就行,具体怎么搬不用你管。
总结:对比以上例子,或许你就能想到,为什么底层使用的都是C和C++,因为只有面向过程才能对细节处理作出正确、精确地处理。它必须对每个过程,每个动作都定义,这样才能去“驱动”硬件。而对象则是需要有底层基础,才能去行使“动作”,它舍去了内部运行的操作细节,只考虑整体,因此,它不能被选作为驱动基础语言。