0

0

多范式的编程语言有哪些

coldplay.xixi

coldplay.xixi

发布时间:2020-12-07 14:25:21

|

4203人浏览过

|

来源于php中文网

原创

多范式的编程语言有:1、面向对象编程,提高软件的重用性、灵活性和扩展性;2、函数式编程,以数学函数为编程语言建模的核心的编程范式;3、泛型编程,提供了更高层级的抽象。

多范式的编程语言有哪些

本文操作环境:Windows7系统,Dell G3电脑。

多范式的编程语言有:

概要:

本文主要讲述了三种编程范式——面向对象编程、函数式编程、泛型编程的概念

编程范式

编程范式是程序语言背后的思想。代表了程序设计者认为程序应该如何被构建和执行的看法。常见的编程范式有:过程式,面向对象,函数式,泛型编程等。

一些编程语言是专门为某种特定范式设计的,例如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、函数式编程-发展

函数式编程是一种以数学函数为编程语言建模的核心的编程范式。它将计算机运算视为数学函数计算,并且避免使用程序状态以及可变对象。

函数式编程思想主要有两点:

  • 以函数为编程语言建模的核心;

  • 避免状态和可变性。

函数是函数式编程的基石。函数式编程语言的代码就是由一个个函数的组合而成的。编写函数式语言的过程就是设计函数。大规模程序由成千上万的函数组成,为了有效的组合这些函数。函数式编程语言,会尽量避免状态,避免可变对象。没有可变的状态,就使得函数式语言中的函数变为了纯函数。纯函数更容易模块化,更容易理解,对于复用是友好的。

函数式编程语言也产生了一些有用的编程工具:

网趣购物系统加强升级版
网趣购物系统加强升级版

新版本程序更新主要体现在:完美整合BBS论坛程序,用户只须注册一个帐号,即可全站通用!采用目前流行的Flash滚动切换广告 变换形式多样,受人喜爱!在原有提供的5种在线支付基础上增加北京云网支付!对留言本重新进行编排,加入留言验证码,后台有留言审核开关对购物系统的前台进行了一处安全更新。在原有文字友情链接基础上,增加LOGO友情链接功能强大的6种在线支付方式可选,自由切换。对新闻列表进行了调整,

下载
  • 一级函数,闭包;

  • 柯里化函数;

  • 惰性求值。

这些在后面的章节里都会提到。这些编程工具也越来越多地出现在其他编程语言中。

函数式编程语言并不年轻,它的历史和面向对象编程一样悠久。1958年被创造出来的LISP是最古老的函数式编程语言。它比C语言年代更为久远。但直到最近函数式编程思想才逐渐被重视。几乎所有新发明的编程语言都或多或少受到了函数式编程思想的影响。Python,Scala,Groovy,Swift都有一级函数,闭包。使得你可以将函数直接传给另外一个函数,函数也能够以返回值形式被另一个函数返回。消除状态,提供不变性的好处越来越多被接受,Scala,Groovy,Swift都提供了方便地声明不可变对象的方法,以支持你编写更趋近于函数式的风格的代码。

函数编程语言有其优秀的地方,也许将来会成为一个重要的编程范式。但是,函数式编程语言的重要性可能更多会体现在影响其他编程语言的发展上。未来,可能很难出现一门主要以函数式编程范式设计的编程语言成为主流的编程语言。如同Java这样的以单一编程范式(面向对象)构建,而成为主流的编程语言的机会应该不多了。而如同Haskell这样追求纯粹的函数式编程语言,更多的可能只是一个偏学术的语言实验。

再重复一次上一节的提到理由,这个世界是如此得丰富多彩,使用单一模式为世界建模并不会成功。

面向对象与函数式编程

如果,我们按语言范式给现在流行的语言分类。支持面向对象的编程语言应该会是最长的队伍。现在大部分流行的现代编程语言都是面相对象的,它们都会允许你创建对象。但同时,你会发现比较流行的几个编程语言,Python,Scala,甚至Java都或多或少得受到了函数式编程语言的影响。它们都引入一些函数式编程的概念,让你一定程度上可以编写出具有函数式风格的代码。

在熟悉了类面向对象编程语言之后,再接触函数式编程语言,常常会觉得耳目一新,甚至会隐约觉得函数式语言是救世良方。那我们是否应该就此彻底转向函数式编程语言呢?使用Haskell拯救世界。

面向对象编程语言在大规模实践之后,我们确实更深刻地了解了它们的缺点(例如,难以编写多线程环境下的软件应用;继承并不是代码复用的好方法)。函数式语言也确实有不少优点,有些优点恰恰就能解决面向对象语言的问题(纯函数十分适应多线程环境,纯函数天生就是模块化的,对于代码复用十分友好)。但是,函数式编程也许也存在某些问题。而这些问题,可能在更大规模的业界实践之后才会暴露出来。现在我们已经可以确信,单纯以对象为世界建模是有困难的。那么以数学模型来为世界建模可能也并不会好到哪里去。可以确信的是,它们都有自己擅长的领域和环境。我们现在仍然还无法使用某种编程范式来解决所有问题。

而更大的现实是无数企业已经在面向对象编程语言上做了巨大的投资,即使现在面向对象编程已经暴露出一些问题,而函数式编程又呈现出不少能解决这些问题的优点,任何一个谨慎的人都不会,也不可能马上抛弃面向对象编程,彻底全面地转向函数式编程语言。

现实的选择是支持面向对象编程的同时,提供函数式的支持。这样,在大部分面向对象游刃有余的地方,你仍然可以使用面向对象的方法。而在适合函数式编程的地方,而你又拥有函数式编程的思维和能力时,你还是可以函数式的编程方法改善生产力。

3、泛型编程-美好的点缀

泛型编程是另外一个有趣的话题。泛型为程语言提供了更高层级的抽象,即参数化类型。换句话说,就是把一个原本特定于某个类型的算法或类当中的类型信息抽象出来。这个抽象出来的概念在C++的STL(Standard Template Library)中就是模版(Template)。STL展示了泛型编程的强大之处,一出现就成为了C++的强大武器。除C++之外,C#,Java,Haskell等编程语言都引入了泛型概念。

泛型编程是一个稍微局部一些的概念,它仅仅涉及如何更抽象地处理类型,即参数化类型。这并不足以支撑起一门语言的核心概念。我们不会听到一个编程语言是纯泛型编程的,而没有其他编程范式。但正因为泛型并不会改变程序语言的核心,所以在大多数时候,它可以很好的融入到其他的编程方式中。C++,Scala,Haskell这些风格迥异的编程语言都支持泛型。泛型编程提供了更高的抽象层次,这意味着更强的表达能力。这对大部分编程语言来说都是一道美味佐餐美酒。

在Swift中,泛型得到广泛使用,许多Swift标准库是通过泛型代码构建出来的。例如Swift的数组和字典类型都是泛型集。这样的例子在Swift中随处可见。

总结

这几篇系列文章中,将主要以Swift为例,讲解多范式编程语言。系列文章分为三部分讨论Swift所支持三种编程范式:

  • 面向对象编程范式

  • 函数式编程范式

  • 泛型编程

更多相关知识,请访问常见问题栏目!

相关专题

更多
Golang gRPC 服务开发与Protobuf实战
Golang gRPC 服务开发与Protobuf实战

本专题系统讲解 Golang 在 gRPC 服务开发中的完整实践,涵盖 Protobuf 定义与代码生成、gRPC 服务端与客户端实现、流式 RPC(Unary/Server/Client/Bidirectional)、错误处理、拦截器、中间件以及与 HTTP/REST 的对接方案。通过实际案例,帮助学习者掌握 使用 Go 构建高性能、强类型、可扩展的 RPC 服务体系,适用于微服务与内部系统通信场景。

8

2026.01.15

公务员递补名单公布时间 公务员递补要求
公务员递补名单公布时间 公务员递补要求

公务员递补名单公布时间不固定,通常在面试前,由招录单位(如国家知识产权局、海关等)发布,依据是原入围考生放弃资格,会按笔试成绩从高到低递补,递补考生需按公告要求限时确认并提交材料,及时参加面试/体检等后续环节。要求核心是按招录单位公告及时响应、提交材料(确认书、资格复审材料)并准时参加面试。

44

2026.01.15

公务员调剂条件 2026调剂公告时间
公务员调剂条件 2026调剂公告时间

(一)符合拟调剂职位所要求的资格条件。 (二)公共科目笔试成绩同时达到拟调剂职位和原报考职位的合格分数线,且考试类别相同。 拟调剂职位设置了专业科目笔试条件的,专业科目笔试成绩还须同时达到合格分数线,且考试类别相同。 (三)未进入原报考职位面试人员名单。

58

2026.01.15

国考成绩查询入口 国考分数公布时间2026
国考成绩查询入口 国考分数公布时间2026

笔试成绩查询入口已开通,考生可登录国家公务员局中央机关及其直属机构2026年度考试录用公务员专题网站http://bm.scs.gov.cn/pp/gkweb/core/web/ui/business/examResult/written_result.html,查询笔试成绩和合格分数线,点击“笔试成绩查询”按钮,凭借身份证及准考证进行查询。

11

2026.01.15

Java 桌面应用开发(JavaFX 实战)
Java 桌面应用开发(JavaFX 实战)

本专题系统讲解 Java 在桌面应用开发领域的实战应用,重点围绕 JavaFX 框架,涵盖界面布局、控件使用、事件处理、FXML、样式美化(CSS)、多线程与UI响应优化,以及桌面应用的打包与发布。通过完整示例项目,帮助学习者掌握 使用 Java 构建现代化、跨平台桌面应用程序的核心能力。

65

2026.01.14

php与html混编教程大全
php与html混编教程大全

本专题整合了php和html混编相关教程,阅读专题下面的文章了解更多详细内容。

36

2026.01.13

PHP 高性能
PHP 高性能

本专题整合了PHP高性能相关教程大全,阅读专题下面的文章了解更多详细内容。

75

2026.01.13

MySQL数据库报错常见问题及解决方法大全
MySQL数据库报错常见问题及解决方法大全

本专题整合了MySQL数据库报错常见问题及解决方法,阅读专题下面的文章了解更多详细内容。

21

2026.01.13

PHP 文件上传
PHP 文件上传

本专题整合了PHP实现文件上传相关教程,阅读专题下面的文章了解更多详细内容。

35

2026.01.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
【李炎恢】ThinkPHP8.x 后端框架课程
【李炎恢】ThinkPHP8.x 后端框架课程

共50课时 | 4.4万人学习

RunnerGo从入门到精通
RunnerGo从入门到精通

共22课时 | 1.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号