三个面向的联系与区别

三种编程模式的联系与区别

  • 面向过程
  • 面向对象
  • 面向函数

它们的相同点在于:都是为了解决一个复杂的现实问题,这个问题包括数据和算法。
有同学说,那简单问题呢?
对于简单问题这三者几乎没有区别,比如你可以试试用三种模式写一个算法求两个数的最大公约数。

它们的区别在于:化解这种复杂性时所用的思路不同。

面向过程

先说面向过程的编程模式。在面向过程的时代,计算机运行速度很慢,而算法部分必须用些功夫优化才能让系统有实用价值;而且存储空间昂贵,以至于数据部分根本就不会太复杂。于是面向过程的着眼点更多地放在的算法上。把数据作为一个整体存放,每个过程都对这个整体数据(的某个局部)进行处理。化解复杂性的办法就是把每个处理方法写成一个过程。这就是面向过程。
这种拆解方法,每个函数都基于整体数据的结构进行设计。在不同的项目中,由于整体数据很难完全相同,所以跨项目的可重用性几乎为零。

面向对象

面向对象的编程模式,多了一种洞察。注意到了一个编程中有这样一个特点:若干个过程都是针对整体数据的某个局部A进行处理,另外若干过程都是针对某个局部B进行处理。在进行处理之时,这些过程几乎无须看到数据的整体样子,只须了解这个局部。把数据和处理过程封装在一起,就是面向对象思路的开端。通过这种方式,不但拆解了处理方法,同时也拆解了数据结构。将一个原本复杂的整体数据变成了多个高内聚、低耦合的局部数据。
这一改进,极大增加了程序模块(对象)的可复用性,因而极大提升了编程效率。随着计算机速度越来越快,存储空间价格大幅下降,伴随面向对象模式的性能折扣几乎到了可以忽略不计的程度。面向对象也就因此普及开来。

面向函数

面向函数的编程模式,经常叫做“函数式”编程。而面向过程与面向对象则很少有人做这样的简称。值得强调的是,所谓面向函数编程,这里的函数指的是闭包函数。因为无论面向过程还是面向对象,里面都有函数的使用。
面向函数的编程模式对系统的拆解更多地是通过层次化的方法来进行拆解。面向函数的重点是语言级别的抽象,着眼于描述。建立起一种语言体系,让系统的其他部分都能够基于这种语言来表述。这种操作可以进行很多层,每一层都建立在前一层的基础上。每一层不关心下层的实现,只关心它的接口,同时无须知道上层的存在。
虽然有些语言,比如python,同时支持面向对象和面向函数两种编程模式,但做一个项目的时候一般不会同时使用两种模式,因为难以得到实际的好处。

猜你喜欢

转载自blog.csdn.net/xiaorang/article/details/105914751