函数式编程与面向对象编程的区别

定义

  • 函数式编程:以函数思维做为核心,在这种思维的角度去思考问题。这种编程最重要的基础是λ演算,接受函数当作输入和输出。
  • 面向对象编程:这种编程是把问题看作由对象的属性与对象所进行的行为组成。基于对象的概念,以类作为对象的模板,把类和继承作为构造机制,以对象为中心,来思考并解决问题。

 

函数式编程

支持

  • 闭包:一个函数内定义另一个函数
  • 高阶函数:参数作为函数,或者返回值作为函数的函数
  • 惰性计算:在将表达式赋值给变量的时候,不计算表达式的值,而是在变量第一次使用的时候再计算
  • 独立性:函数不依赖外部的状态,也不修改外部的状态
  •             (只要我们输入的参数不变,那么输出的结果也一定是一样的)
  • 无锁并发:因为函数的独立性,所以函数各个部分的执行顺序可以打乱,多个线程之间的执行不会互相干扰,不需要锁来保护,所以函数式编程的多线程并发是安全的

 

面向对象编程

面向对象的程序设计把计算机程序视为一组对象的集合,而每个对象都可以接收其他对象发过来的消息,并处理这些消息

面向对象的三个特征

  • 封装:把对象的属性和操作结合为一个独立的整体,并尽可能隐藏对象的内部实现细节,对数据的访问只能通过已定义的接口
  • ——(例如将属性设置为私有,然后为其设置setter/getter方法,这就是封装)
  • 继承:继承可以使得子类具有父类的属性和方法或者重新定义、追加属性和方法等
  • ——(例如一个类A继承另一个类B,则称A为B的子类,B为A的父类)
  • 多态:多态指同一个实体同时具有多种形式
  • ——(例如同一个接口,使用不同的实例而执行不同操作)

如果一个语言只支持类而不支持多态,只能说明它是基于对象的,而不是面向对象的

总结一下

函数式编程:将程序数学化

面向对象编程:万物皆为对象

发布了34 篇原创文章 · 获赞 20 · 访问量 6974

猜你喜欢

转载自blog.csdn.net/weixin_42193813/article/details/105416243