专栏名称: 亿级流量网站架构
开涛技术点滴
目录
相关文章推荐
程序员小灰  ·  DeepSeek让我的朋友一夜暴富! ·  2 天前  
程序员小灰  ·  DeepSeek + IDEA!辅助编程太强了! ·  昨天  
程序猿  ·  本地部署 DeepSeek ... ·  2 天前  
程序员的那些事  ·  DeepSeek 下棋靠忽悠赢了 ... ·  2 天前  
程序员小灰  ·  这款AI编程工具,将会取代Cursor! ·  3 天前  
51好读  ›  专栏  ›  亿级流量网站架构

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

亿级流量网站架构  · 公众号  · 程序员  · 2019-10-20 11:28

正文

面向对象编程、面向过程编程、函数式编程等等,这些也许是大家经常会听到的术语,这些都是什么意思,干什么用,他们之间有什么区别和联系,这篇文章来给大家讲讲这些以及它们的编程思想,也许会给大家带来一些启示。

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

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

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

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

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






请到「今天看啥」查看全文