函数式编程和面向对象编程

介绍

函数式编程,以函数思维作为核心,在这种思维的角度去思考问题。这种编程最重要的基础就是λ演算,接受函数当作输入输出。

面向对象编程,把问题看作由对象的属性与对象所进行的行为组成。基于对象的概念,以类作为对象的模板,把类和继承作为构造机制,以对象为中心来思考问题。

优点

函数式编程:支持闭包和高阶函数,闭包是一种可以起函数的作用并可以如对象般操作的对象;而高阶函数是可以以另一个函数作为输入值来进行编程。支持惰性计算,这就可以在求值需要表达式的值得时候进行计算,而不是固定在变量时计算。还有就是可以用递归作为控制流程。函数式编程所编程出来的代码相对而言少很多,而且更加简洁明了。
面向对象编程:面向对象有三个主要特征,分别是封装性继承性多态性。类的说明展现了封装性,类作为对象的模板,含有私有数据和公有数据,封装性能使数据更加安全依赖的就是类的特性,使得用户只能看到对象的外在特性,不能看到对象的内在属性,用户只能访问公有数据不能直接访问到私有数据。类的派生功能展现了继承性,继承性是子类共享父类的机制,但是由于封装性,继承性也只限于公有数据的继承(还有保护数据的继承),子类在继承的同时还可以进行派生。而多态性是指对象根据接收的信息作出的行为的多态,不同对象接收同一信息会形成多种行为。

缺点

函数式编程:所有的数据都是不可变的,严重占据运行资源,导致运行速度也不够快。
面向对象编程:为了编写可以重用的代码导致许多无用代码的产生,并且许多人为了面向对象而面向对象导致代码给后期维护带来很多麻烦。

对比分析

简单来讲,面向对象编程和函数式编程,其所关注的维度是不同的。现在假设我们要增加一个额外的运算方法如减法,那么在函数式编程中,我们只需要增加一个减法函数即可,对于已有的代码无需做任何改动,在面向对象编程中则需要对基类和每个数据类添加减法操作;但假设我们要增加的是一个操作数类型,比如分数,那么在面向对象编程中,我们只需要增加一个类并让其继承基类,编写相关抽象方法的实现过程即可,而在函数式编程中则需要修改所有的已有函数,添加新的操作数类型。

posted @ 2018-12-12 17:42  xlupc  阅读(481)  评论(0编辑  收藏  举报