做电商海报的网站,郑州网络营销学校,电脑怎么建网站详细步骤,阿里巴巴每平每屋设计家官网文章目录目录1.函数式编程和面向对象编程概念1.1 函数式编程1.2 面向对象编程2.函数式编程和面向对象编程的优缺点2.1 函数式编程优点缺点2.2 面对对象编程优点缺点3.为什么在并行计算中函数式编程比较好3.1 什么是并行计算3.2 函数式编程兴起原因目录
1.函数式编程和面向对象…
文章目录目录1.函数式编程和面向对象编程概念1.1 函数式编程1.2 面向对象编程2.函数式编程和面向对象编程的优缺点2.1 函数式编程优点缺点2.2 面对对象编程优点缺点3.为什么在并行计算中函数式编程比较好3.1 什么是并行计算3.2 函数式编程兴起原因目录
1.函数式编程和面向对象编程概念
1.1 函数式编程
什么是函数式编程在维基百科中给出了详细的定义函数式编程英语functional programming或称函数程序设计又称泛函编程是一种编程范型它将电脑运算视为数学上的函数计算并且避免使用程序状态以及易变对象。函数编程语言最重要的基础是λ演算lambda calculus。而且λ演算的函数可以接受函数当作输入引数和输出传出值 函数式编程顾名思义这种编程是以函数思维做为核心在这种思维的角度去思考问题。这种编程最重要的基础是λ演算接受函数当作输入和输出。
1.2 面向对象编程
面向对象程序设计英语Object-oriented programming缩写OOP是种具有对象概念的程序编程范型同时也是一种程序开发的方法。它可能包含数据、属性、代码与方法。对象则指的是类的实例。它将对象作为程序的基本单元将程序和数据封装其中以提高软件的重用性、灵活性和扩展性对象里的程序可以访问及经常修改对象相关连的数据。在面向对象程序编程里计算机程序会被设计成彼此相关的对象。 对象与对象之间的关系是面向对象编程首要考虑的问题而在函数式编程中所有的数据都是不可变的不同的函数之间通过数据流来交换信息函数作为FP中的一等公民享有跟数据一样的地位可以作为参数传递给下一个函数同时也可以作为返回值。 面向对象编程这种编程是把问题看作由对象的属性与对象所进行的行为组成。基于对象的概念以类作为对象的模板把类和继承作为构造机制以对象为中心来思考并解决问题。
2.函数式编程和面向对象编程的优缺点
2.1 函数式编程
优点
支持闭包和高阶函数闭包是一种可以起函数的作用并可以如对象般操作的对象而高阶函数是可以以另一个函数作为输入值来进行编程。支持惰性计算这就可以在求值需要表达式的值得时候进行计算而不是固定在变量时计算。还有就是可以用递归作为控制流程。函数式编程所编程出来的代码相对而言少很多而且更加简洁明了。在函数式编程中由于数据全部都是不可变的所以没有并发编程的问题是多线程安全的。可以有效降低程序运行中所产生的副作用对于快速迭代的项目来说函数式编程可以实现函数与函数之间的热切换而不用担心数据的问题因为它是以函数作为最小单位的只要函数与函数之间的关系正确即可保证结果的正确性。函数式编程的表达方式更加符合人类日常生活中的语法代码可读性更强。实现同样的功能函数式编程所需要的代码比面向对象编程要少很多代码更加简洁明晰。函数式编程广泛运用于科学研究中因为在科研中对于代码的工程化要求比较低写起来更加简单所以使用函数式编程开发的速度比用面向对象要高很多如果是对开发速度要求较高但是对运行资源要求较低同时对速度要求较低的场景下使用函数式会更加高效。
缺点
由于所有的数据都是不可变的所以所有的变量在程序运行期间都是一直存在的非常占用运行资源。同时由于函数式的先天性设计导致性能一直不够。虽然现代的函数式编程语言使用了很多技巧比如惰性计算等来优化运行速度但是始终无法与面向对象的程序相比当然面向对象程序的速度也不够快。函数式编程虽然已经诞生了很多年但是至今为止在工程上想要大规模使用函数式编程仍然有很多待解决的问题尤其是对于规模比较大的工程而言。如果对函数式编程的理解不够深刻就会导致跟面相对象一样晦涩难懂的局面。
2.2 面对对象编程
优点
面向对象编程面向对象有三个主要特征分别是封装性、继承性和多态性。类的说明展现了封装性类作为对象的模板含有私有数据和公有数据封装性能使数据更加安全依赖的就是类的特性使得用户只能看到对象的外在特性不能看到对象的内在属性用户只能访问公有数据不能直接访问到私有数据。类的派生功能展现了继承性继承性是子类共享父类的机制但是由于封装性继承性也只限于公有数据的继承还有保护数据的继承子类在继承的同时还可以进行派生。而多态性是指对象根据接收的信息作出的行为的多态不同对象接收同一信息会形成多种行为。面向对象程序设计可以看作一种在程序中包含各种独立而又互相调用的对象的思想这与传统的思想刚好相反。传统的程序设计主张将程序看作一系列函数的集合或者直接就是一系列对电脑下达的指令。面向对象程序设计中的每一个对象都应该能够接受数据、处理数据并将数据传达给其它对象因此它们都可以被看作一个小型的“机器”即对象。目前已经被证实的是面向对象程序设计推广了程序的灵活性和可维护性并且在大型项目设计中广为应用。此外支持者声称面向对象程序设计要比以往的做法更加便于学习因为它能够让人们更简单地设计并维护程序使得程序更加便于分析、设计、理解。同时它也是易拓展的由于继承、封装、多态的特性自然设计出高内聚、低耦合的系统结构使得系统更灵活、更容易扩展而且成本较低。在面向对象编程的基础上发展出来的23种设计模式广泛应用于现今的软件工程中极大方便了代码的书写与维护。 创建型模式共五种工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。结构型模式共七种适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。行为型模式共十一种策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
缺点
面向对象编程以数据为核心所以在多线程并发编程中多个线程同时操作数据的时候可能会导致数据修改的不确定性。在现在的软件工程中由于面向对象编程的滥用导致了很多问题。首先就是为了写可重用的代码而产生了很多无用的代码导致代码膨胀同时很多人并没有完全理解面向对象思想为了面向对象而面向对象使得最终的代码晦涩难懂给后期的维护带来了很大的问题。所以对于大项目的开发使用面向对象会出现一些不适应的情况。面向对象虽然开发效率高但是代码的运行效率比起面向过程要低很多这也限制了面向对象的使用场景不能包括那些对性能要求很苛刻的地方。
3.为什么在并行计算中函数式编程比较好
3.1 什么是并行计算
并行计算或称平行计算是相对于串行计算来说的。它是一种一次可执行多个指令的算法目的是提高计算速度及通过扩大问题求解规模解决大型而复杂的计算问题。所谓并行计算可分为时间上的并行和空间上的并行。 时间上的并行就是指流水线技术而空间上的并行则是指用多个处理器并发的执行计算。[百度百科]
3.2 函数式编程兴起原因
随着web2.0的到来无论是数据的数量还是数据的形式都大大的增加。而随着芯片制造工艺的限制硬件摩尔定律的失效而大数据的摩尔定律的发展对计算机的计算能力要求越来越高压力也越来越大。其中并行计算是一个很好的解决方法。而目前比较流行的一种并行计算方式是使用集群进行并行计算。这就需要我们把一个大的任务进行拆解成很多小问题然后在不同的机器上单独进行运行最终将计算结果进行合并这便是Hadoop中MapReduce的思想。函数式编程具有不可变性和并行操作性两个特点使得函数式编程思想在并行计算中发挥比较大的作用。这也是函数式编程兴起的原因。