多范式的编程语言有:1、面向对象编程,提高软件的重用性、灵活性和扩展性;2、函数式编程,以数学函数为编程语言建模的核心的编程范式;3、泛型编程,提供了更高层级的抽象。
多范式的编程语言有:
概要:
本文主要讲述了三种编程范式——面向对象编程、函数式编程、泛型编程的概念
编程范式
编程范式是程序语言背后的思想。代表了程序设计者认为程序应该如何被构建和执行的看法。常见的编程范式有:过程式,面向对象,函数式,泛型编程等。
一些编程语言是专门为某种特定范式设计的,例如C语言是过程式编程语言;Smalltalk和Java是较纯粹的面向对象编程语言;Haskell是纯粹的函数式编程语言。另外一些编程语言和编程范式的关系并不一一对应,如Python,Scala,Groovy都支持面向对象和一定程度上的函数式编程。C++是多范式编程语言成功的典范。C++支持和C语言一样的过程式编程范式,同时也支持面向对象编程范式,STL(Standard Template Library)使C++具有了泛型编程能力。支持多种范式可能是C++直到现在仍然具有强大的生命力的原因之一。
Swift是一门典型的多范式编程语言,即支持面向对象编程范式,也支持函数式编程范式,同时还支持泛型编程。Swift支持多种编程范式是由其创造目标决定的。Swift创造的初衷就是提供一门实用的工业语言。不同于Haskell这类出自大学和研究机构的学术性质的编程语言。苹果推出Swift时就带着着明确的商业目的:Mac OS和iOS系统的主要编程语言Objective-C已显老态,Swift将使得苹果系统的开发者拥有一门更现代的编程语言,从而促进苹果整个生态圈的良性发展。
Swift的设计和开发无不体现着“实用的工业语言”这一目标。这决定了Swift无法做极端的语言实验,它需要在理智地面对现实的基础上,谨慎地寻求突破。这就决定了Swift需要继承历史遗产,照顾现在大多数程序员的现实需求,同时面向未来有所发展。
1、面向对象-继承遗产
面向对象编程将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性。
面向对象编程的核心概念:
-
多态,指由继承而产生的相关的不同的类,其对象对同一消息会做出不同的响应;
-
继承,在某种情况下,一个类会有“子类”。子类比原本的类(称为父类)要更加具体化;
-
封装,面向对象程序设计隐藏了某一方法的具体执行步骤,取而代之的是通过消息传递机制传送消息给它。
以对象构建程序的基本单元的面向对象编程语言中。多态提供了更高的抽象能力,使得我们可以设计出更通用的程序。继承提供了一种复用代码的方法。封装提供一种使用其他代码更为便捷安全的机制。
现在绝大部分程序员的工作语言仍然是面向对象编程语言。大部分流行的现代编程语言都会允许你创建对象。使用面向对象编程语言,易于构建软件模型。因为,对象很类似乎很容易和现实世界上的所有事物和概念。但编程实践表明,并不是任何东西成为对象都是一件好事情。举一个Java中的蹩足的例子:Java中只有对象才能作为参数传入函数(当然还有原始类型primitive type)。所以为了将函数传递给另外一个函数,你需要将函数包裹在一个对象中,通常会用一个匿名类,因为这个类不会有其他作用,只是为了让Java的一切皆为对象的设计高兴。
Java拥有纯粹的面向对象概念。它从设计之初,就希望以一切皆为对象的纯对象模型来为世界建模。但发展到现在,Java中加入了越来越多非对象的东西。引入了闭包,从而获得了函数式编程中的一级函数;引入泛型,从而获得了参数化的类型。这可能暗示了,这个世界是如此得丰富多彩,使用单一模式为世界建模并不会成功。
2、函数式编程-发展
函数式编程是一种以数学函数为编程语言建模的核心的编程范式。它将计算机运算视为数学函数计算,并且避免使用程序状态以及可变对象。
函数式编程思想主要有两点:
-
以函数为编程语言建模的核心;
-
避免状态和可变性。
函数是函数式编程的基石。函数式编程语言的代码就是由一个个函数的组合而成的。编写函数式语言的过程就是设计函数。大规模程序由成千上万的函数组成,为了有效的组合这些函数。函数式编程语言,会尽量避免状态,避免可变对象。没有可变的状态,就使得函数式语言中的函数变为了纯函数。纯函数更容易模块化,更容易理解,对于复用是友好的。
函数式编程语言也产生了一些有用的编程工具:
-
一级函数,闭包;
-
柯里化函数;
-
惰性求值。
这些在后面的章节里都会提到。这些编程工具也越来越多地出现在其他编程语言中。
函数式编程语言并不年轻,它的历史和面向对象编程一样悠久。1958年被创造出来的LISP是最古老的函数式编程语言。它比C语言年代更为久远。但直到最近函数式编程思想才逐渐被重视。几乎所有新发明的编程语言都或多或少受到了函数式编程思想的影响。Python,Scala,Groovy,Swift都有一级函数,闭包。使得你可以将函数直接传给另外一个函数,函数也能够以返回值形式被另一个函数返回。消除状态,提供不变性的好处越来越多被接受,Scala,Groovy,Swift都提供了方便地声明不可变对象的方法,以支持你编写更趋近于函数式的风格的代码。
函数编程语言有其优秀的地方,也许将来会成为一个重要的编程范式。但是,函数式编程语言的重要性可能