【新手向】面向过程与面向对象的区别

 我大学的专业是跟硬件息息相关的自动化专业,因此最开始接触的编程语言是C语言,典型的面向过程语言。后来自学java和前端的时候感觉和C差距还是蛮大的,“类”、“封装”、“继承”这些概念都不了解是什么意思,教程让怎么用自己就怎么写,对“面向对象”和“面向过程”这两个词没有概念,现在回顾一下这二者说下自己的理解。

一、应用

 语言的使用场景最能体现出两种语言的优缺点,在与硬件相关的领域,比如单片机、嵌入式开发等等,基本都是C语言这样的面向过程语言,甚至是汇编这样的低级语言,因为在硬件领域追求的是性能。面向过程语言性能更加优越,可以最大化的让小小的芯片“物尽其用”,但开发效率相比面向对象语言要低很多。

 而我们常用的计算机软件大部分则是java这样的面向对象语言所开发的,面向对象语言开发效率更高,而且鉴于计算机相关配置的快速发展,虽然性能不如面向过程语言,但是这个劣势在计算机系统中可以忽略不计。

 后文会说明是什么原因导致了性能的优劣。

二、面向过程

 顾名思义,面向过程就是针对整个事件的从开始到结束的流程进行编程,也就是对步骤的编写,属于是比较形象的编程语言,因此初学者入门面向过程语言要比入门面向对象语言更简单一些。

 用开车来举例,面向过程的编写过程是:开车门 > 系安全带 > 打火 > 松手刹 > 挂挡 > 起步,一步一步从头到尾的对整个事件进行编程,和我们常规的思考方式相同。

三、面向对象

 对每个涉及到的事物进行编写,然后以搭积木的方式组合到一起来形成一个系统,属于是比较抽象的编程语言,理解起来有一定的难度,学习的起点比面向过程语言更高,但如果理解了之后学习速度会比面向过程语言快很多。

 同样是开车,面向对象语言是针对每一个涉及到的对象进行编程,对象又包含了属性与方法。比如车门是白色的,白色就是车门这个对象的属性,车门对象还有两个方法:“打开车门”、“关闭车门”。这个属性为“白色”,有“打开车门”和“关闭车门”两种方法的车门就是一个我们所说的对象。

 面向对象就需要将整个过程中涉及到的车门、发动机、轮子等等都作为对象先编写好,然后根据我们过程中的需要去一个一个调用。当开车门时,我们就会拿到我们之前编写好的车门对象,执行“打开车门”这个方法。

四、对比

 面向过程与面向对象就好比打印机打印与人类绘画,打印机从上到下一丝一丝的打印,而人类绘画则是先画一个物体,然后再画另一个物体,然后所有物体拼到一起构成一幅画。

开发效率

 面向对象语言之所以被计算机软件开发者大量使用,是因为面向对象语言在开发效率上有个非常明显的优势,就是低耦合,每个对象都是相互独立的,一个对象的改变不会影响其他对象。

 面向过程语言就不是这样,很多情况下都是牵一发而动全身,就好比你今天计划好了看电影、逛街、吃饭,突然老板通知你要开会,那你一整天的计划就都被打乱,不得不重新计划。因此面向过程语言很少在计算机软件中使用,而更多用于需求一开始就很明确的硬件领域。

性能

 面向过程语言仍在被硬件领域大量使用的重要一点是性能相比面向对象语言更好,最根本的就是对资源的占用。大部分面向对象语言没有指针这个概念(C++基于C发展而来因此包含了指针),没有指针也就意味着无法直接操作内存,这样的好处是安全,而面向过程语言则可以通过指针来直接操作内存。

 这次用买车来举例,面向过程就好比是私人订制,各方面都由自己设计打造,哪怕是设计个独轮车也是可以的,但是有可能由于设计的不合理导致车的崩溃。

 面向对象的话就是去4S店买车,各种车型摆在你面前给你选,可以在已有车型的基础上选颜色等等,但是对于基本的发动机等要素是不可变的,虽然不如私人订制更适合自己,但更加安全方便。

 实际应用中的差异在于,面向对象语言使用对象前需要先实例化(不懂实例化的话可以理解为创建)这个对象,假如我只需要“打开车门”,我就必须实例化整个车门对象,尽管我没有用到“关闭车门”这个方法。因此如果我要执行了对象的其中一个方法,我就必须要加载这个对象包含的所有属性与方法,对资源的占用就比面向过程语言要多很多了。

 C语言这类面向过程语言就没有对象的概念,但是由于需要自己亲自操刀来操作内存,因此只有对内存、堆栈、数据类型这类概念有较为全面的理解之后才可以运用自如,否则很容易导致程序的崩溃。

 总的来说面向过程语言理解容易,但是掌握很难,面向对象语言则与之相反,一旦理解的话学习起来也是很快的。

    原文作者:Switchhh
    原文地址: https://www.jianshu.com/p/addc909aafeb
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞