编程范式之面向对象过程函数式编程浅析

Posted 京东零售技术

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编程范式之面向对象过程函数式编程浅析相关的知识,希望对你有一定的参考价值。

面向对象编程、面向过程编程、函数式编程等等,这些也许是大家经常会听到的术语,这些都是什么意思,干什么用,他们之间有什么区别和联系,这篇文章来给大家讲讲这些以及它们的编程思想,也许会给大家带来一些启示。
(本篇文章的观点仅代表本人观点,如有不对还请客气地指出!

编程范式


编程范式 (英语: Programming paradigm),(范即模范、典范之意,范式即模式、方法),是一类典型的编程风格,是指从事软件工程的一类典型的风格。 如: 面向对象编程、面向过程编程、函数式编程、命令式编程等等为不同的编程范型。
面向对象编程: 面向对象程序设计(Object Oriented Programming)作为一种新方法,其本质是以建立模型体现出来的抽象思维过程和面向对象的方法。 模型是用来反映现实世界中事物特征的。 任何一个模型都不可能反映客观事物的一切具体特征,只能对事物特征和变化规律的一种抽象,且在它所涉及的范围内更普遍、更集中、更深刻地描述客体的特征。 通过建立模型而达到的抽象是人们对客体认识的深化。
面向过程编程: “面向过程”(Procedure Oriented)是一种以过程为中心的编程思想。 这些都是以什么正在发生为主要目标进行编程,不同于面向对象的是谁在受影响。 与面向对象明显的不同就是封装、继承、类。
函数式编程: 函数式编程(programming paradigm)是种编程方式,它将电脑运算视为函数的计算。 函数编程语言最重要的基础是λ演算(lambda calculus),而且λ演算的函数可以接受函数当作输入(参数)和输出(返回值)。
命令式编程: 命令式编程(英语: Imperative programming),是一种描述计算机所需作出的行为的编程典范。 几乎所有计算机的硬件工作都是命令式的; 几乎所有计算机的硬件都是设计来运行机器码,使用命令式的风格来写的。 (此编程范式不是本篇文章讲述的重点,只是列出来和其它有个对比。
上述几个术语的官方解释也许不是很好理解,看了术语解释先有一个大概的认识,接下来通过一些通俗易懂的话语和例子来讲述一下,理解不同编程范式都有一些什么思想以及优势。

For example


我们要实现一个计算器的程序,输入(5+4)* 8 - 6后计算出结果值。
任何一种编程范式都可以实现该程序,但是思考和编写方式有着很大的不同。
面向过程编程
面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。
第一步、求5 + 4之和;
第二步、将第一步结果乘以8;
第三步、将第二步的结果减去6;
第四步、输出第三步的结果;
依次执行上面每个步骤即可得到最终值。

面向过程
分析
面向过程其实是最为实际的一种思考方式,就算是面向对象的方法也是含有面向过程的思想。 可以说面向过程是一种基础的方法。 它考虑的是实际地实现,一般的面向过程是从上往下步步求精,所以面向过程最重要的是模块化的思想方法。 当程序规模不是很大时,面向过程的方法还会体现出一种优势。 因为程序的流程很清楚,按着模块与函数的方法可以很好的组织。
函数式编程
函数式编程依靠的是不使用或不改变全局状态的函数,他们唯一使用的状态就是传给函数的参数。 一个函数的结果通常被继续传给另一个函数。 因此,程序通过函数之间传递状态,避免了全局状态的问题,也因此消除了由此带来的副作用和其他问题。

编程范式之面向对象、过程、函数式编程浅析

函数式
或者变换一种展示方式更容易理解

函数式
分析
函数式编程中没有赋值语句,因此变量一旦有了值就不会再改变。 更通俗的讲,函数式编程没有副作用——除了结算结果,调用函数没有别的作用。 这样消除了bug的一个主要来源,也使得执行顺序变得无关紧要。 因为没有能够改变表达式值的副作用,可以在任何时候对它求值。 由于能够在任何时候对表达式求职,所以可以用变量的值来自由替换表达式,反之亦然——即程序是“引用透明”的。
面向对象编程
面向对象是以功能来划分问题,而不是步骤和函数,因此我们关心的是计算器这个类,这个类有什么功能和属性。

面向对象编程
分析
面向对象的分析方法是利用面向对象的信息建模概念,如实体、关系、属性等,同时运用封装、继承、多态等机制来构造模拟现实系统的方法。 传统的结构化设计方法的基本点是面向过程,系统被分解成若干个过程。 而面向对象的方法是采用构造模型的观点,在系统的开发过程中,各个步骤的共同的目标是建造一个问题域的模型。 在面向对象的设计中,初始元素是对象,然后将具有共同特征的对象归纳成类,组织类之间的等级关系,构造类库。 在应用时,在类库中选择相应的类。
已经被证实的是,面向对象程序设计推广了程序的灵活性和可维护性,并且在大型项目设计中广为应用。 此外,面向对象程序设计要比以往的做法更加便于学习,因为它能够让人们更简单地设计并维护程序,使得程序更加便于分析、设计、理解。

总结


函数式相比于面向过程编程方式是进一步的提升,面向过程的特性就是解决一个问题,需要一步一步分析需要怎样,然后需要怎样,一步一步实现的。 而函数式编程则引入了引用透明、不修改状态、无副作用的思想,这样的编程方式更易于代码简洁、并发和管理。
面向过程和函数式是具体的东西,而且面向过程和函数式是面向对象的基础。 面向对象可以说是面向过程和函数式的抽象,比如汽车有开车,加减速和刹车,关于汽车的操作有好多,每一个都需要一个具体的过程来实现,把这些过程抽象的总结起来就可以形成一个类,这个类包括的汽车所有的东西,所有的操作。

以上是关于编程范式之面向对象过程函数式编程浅析的主要内容,如果未能解决你的问题,请参考以下文章

python_函数式编程

面向对象编程

面向对象编程

函数式编程 | 学了就能分配女朋友?

javascript 函数式编程

08-面向过程与函数式