编程范式(Programming Paradigm)是某种编程语言典型的编程风格或者说是编程方式。随着编程方法学和软件工程研究的深入,特别是OO思想的普及,范式(Paradigm)以及编程范式等术语渐渐出现在人们面前。面向对象编程(OOP)常常被誉为是一种革命性的思想,正因为它不同于其他的各种编程范式。编程范式也许是学习任何一门编程语言时要理解的最重要的术语。

托马斯.库恩提出“科学的革命”的范式论之后,Robert Floyd在1979年图灵奖的颁奖演说中使用了编程范式一词。编程范式一般包括三个方面,以OOP为例:

1.学科的逻辑体系——规则范式:如类/对象、继承、动态绑定、方法改写、对象替换等等机制。

2.心理认知因素——心理范式:按照面向对象编程之父Alan Kay的观点,“计算就是模拟”。OO范式极其重视隐喻(metaphor)的价值,通过拟人化,按照自然的方式模拟自然。

3.自然观/世界观——观念范式:强调程序的组织技术,视程序为松散耦合的对象/类的集合,以继承机制将类组织成一个层次结构,把程序运行视为相互服务的对象们之间的对话。

简单的说,编程范式是程序员看待程序应该具有的观点。

为了进一步加深对编程范式的认识,这里介绍几种最常见的编程范式。

需要再次提醒注意的是:编程范式是编程语言的一种分类方式,它并不针对某种编程语言。就编程语言而言,一种编程语言也可以适用多种编程范式。

1,过程化(命令式)编程

过程化编程,也被称为命令式编程,应该是最原始的、也是我们最熟悉的一种传统的编程方式。从本质上讲,它是“冯.诺伊曼机“运行机制的抽象,它的编程思维方式源于计算机指令的顺序排列。

(也就是说:过程化语言模拟的是计算机机器的系统结构,而并不是基于语言的使用者的个人能力和倾向。这一点我们应该都很清楚,比如:我们最早曾经使用过的单片机的汇编语言。)

过程化编程的步骤是:

首先,我们必须将待解问题的解决方案抽象为一系列概念化的步骤。然后通过编程的方式将这些步骤转化为程序指令集(算法),而这些指令按照一定的顺序排列,用来说明如何执行一个任务或解决一个问题。这就意味着,程序员必须要知道程序要完成什么,并且告诉计算机如何来进行所需的计算工作,包括每个细节操作。简言之,就是将计算机看作一个善始善终服从命令的装置。

所以在过程化编程中,把待解问题规范化、抽象为某种算法是解决问题的关键步骤。其次,才是编写具体算法和完成相应的算法实现问题的正确解决。当然,程序员对待解问题的抽象能力也是非常重要的因素,但这本身已经与编程语言无关了。

程序流程图是过程化语言进行程序编写的有效辅助手段。

尽管现存的计算机编程语言很多,但是人们把所有支持过程化编程范式的编程语言都被归纳为过程化编程语言。例如机器语言、汇编语言、BASIC、COBOL、C 、FORTRAN、语言等等许多第三代编程语言都被归纳为过程化语言。

过程化语言特别适合解决线性(或者说按部就班)的算法问题。它强调“自上而下(自顶向下)”“精益求精”的设计方式。这种方式非常类似我们的工作和生活方式,因为我们的日常活动都是按部就班的顺序进行的。

过程化语言趋向于开发运行较快且对系统资源利用率较高的程序。过程化语言非常的灵活并强大,同时有许多经典应用范例,这使得程序员可以用它来解决多种问题。

过程化语言的不足之处就是它不适合某些种类问题的解决,例如那些非结构化的具有复杂算法的问题。问题出现在,过程化语言必须对一个算法加以详尽的说明,并且其中还要包括执行这些指令或语句的顺序。实际上,给那些非结构化的具有复杂算法的问题给出详尽的算法是极其困难的。

广泛引起争议和讨论的地方是:无条件分支,或goto语句,它是大多数过程式编程语言的组成部分,反对者声称:goto语句可能被无限地滥用;它给程序设计提供了制造混

乱的机会。目前达成的共识是将它保留在大多数语言中,对于它所具有的危险性,应该通过程序设计的规定将其最小化。

2,模块化编程思想

这个是我加的,虽然没有明确的理论,但历史上有这么一个阶段

一类是按照代码实现的功能实现模块化。也可以说按照业务功能将程序设计称几个功能模块。

一类是按照代码自身组织实现模块化,比如函数、代码块、将代码分布到不同文件中、目录的结构化层次化、头文件的采用

3,事件驱动编程

(虽然有此一说,个人以为这个范式还是放到面向对象中更好,或者说是面向对象的前期萌芽)

其实,基于事件驱动的程序设计在图形用户界面(GUI)出现很久前就已经被应用于程序设计中,可是只有当图形用户界面广泛流行时,它才逐渐形演变为一种广泛使用的程序设计模式。

在过程式的程序设计中,代码本身就给出了程序执行的顺序,尽管执行顺序可能会受到程序输入数据的影响。

在事件驱动的程序设计中,程序中的许多部分可能在完全不可预料的时刻被执行。往往这些程序的执行是由用户与正在执行的程序的互动激发所致。

1.事件。

就是通知某个特定的事情已经发生(事件发生具有随机性)。

事件与轮询。

轮询的行为是不断地观察和判断,是一种无休止的行为方式。而事件是静静地等待事情的发生。事实上,在Windows出现之前,采用鼠标输入字符模式的PC应用程序必须进行串行轮询,并以这种方式来查询和响应不同的用户操做。

3.事件处理器。

是对事件做出响应时所执行的一段程序代码。事件处理器使得程序能够对于用户的行为做出反映。

事件驱动常常用于用户与程序的交互,通过图形用户接口(鼠标、键盘、触摸板)进行交互式的互动。当然,也可以用于异常的处理和响应用户自定义的事件等等。

事件的异常处理比用户交互更复杂。

事件驱动不仅仅局限在GUI编程应用。但是实现事件驱动我们还需要考虑更多的实际问题,如:事件定义、事件触发、事件转化、事件合并、事件排队、事件分派、事件处理、事 件连带等等。

其实,到目前为止,我们还没有找到有关纯事件驱动编程的语言和类似的开发环境。所有关于事件驱动的资料都是基于GUI事件的。

属于事件驱动的编程语言有:VB、C#、Java(Java Swing的GUI)等。它们所涉及的事件绝大多数都是GUI事件。

4,面向对象编程

过程化范式要求程序员用按部就班的算法看待每个问题。很显然,并不是每个问题都适合这种过程化的思维方式。这也就导致了其它程序设计范式出现,包括我们现在介绍的面向对象的程序设计范式。

面向对象的程序设计模式已经出现二十多年,经过这些年的发展,它的设计思想和设计模式已经稳定的进入编程语言的主流。来自TIOBE

Programming

Community2010年11月份编程语言排名的前三名Java、C、C++中,Java和C++都是面向对象的编程语言。

面向对象的程序设计包括了三个基本概念:封装性、继承性、多态性。面向对象的程序语言通过类、方法、对象和消息传递,来支持面向对象的程序设计范式。

对象

世间万事万物都是对象。

面向对象的程序设计的抽象机制是将待解问题抽象为面向对象的程序中的对象。利用封装使每个对象都拥有个体的身份。程序便是成堆的对象,彼此通过消息的传递,请求其它对象 进行工作。

每个对象都是其类中的一个实体。

物以类聚——就是说明:类是相似对象的集合。类中的对象可以接受相同的消息。换句话说:类包含和描述了“具有共同特性(数据元素)和共同行为(功能)”的一组对象。

比如:苹果、梨、橘子等等对象都属于水果类。

封装

封装(有时也被称为信息隐藏)就是把数据和行为结合在一个包中,并对对象的使用者隐藏数据的实现过程。信息隐藏是面向对象编程的基本原则,而封装是实现这一原则的一种方 式。

封装使对象呈现出“黑盒子”特性,这是对象再利用和实现可靠性的关键步骤。

接口

每个对象都有接口。接口不是类,而是对符合接口需求的类所作的一套规范。接口说明类应该做什么但不指定如何作的方法。一个类可以有一个或多个接口。

方法

方法决定了某个对象究竟能够接受什么样的消息。面向对象的设计有时也会简单地归纳为“将消息发送给对象”。

继承

继承的思想就是允许在已存在类的基础上构建新的类。一个子类能够继承父类的所有成员,包括属性和方法。

继承的主要作用:通过实现继承完成代码重用;通过接口继承完成代码被重用。继承是一种规范的技巧,而不是一种实现的技巧。

多态

多态提供了“接口与实现分离”。多态不但能改善程序的组织架构及可读性,更利于开发出“可扩充”的程序。

继承是多态的基础。多态是继承的目的。

合理的运用基于类继承的多态、基于接口继承的多态和基于模版的多态,能增强程序的简洁性、灵活性、可维护性、可重用性和可扩展性。

面向对象技术一方面借鉴了哲学、心理学、生物学的思考方式,另一方面,它是建立在其他编程技术之上的,是以前的编程思想的自然产物

5,函数式编程

初兴的一种,未来究竟如何要看演变

个人粗浅的一个小结

最后必须说明,没有纯属于某一类范式的编程。这是一个群体演化的过程。后来的范式或者提出了一种新的方式、角度,或者同时涵盖了前一类方法。将之作为特例。比如,无论什么类型的编程均包含过程,只是将过程封装成函数了。甚至将函数封装进对象,称为方法了。编程范式,在某种意义上是软件业对世界的认识、塑造方法的变迁。其中的思想,早已经存在了。比如面向对象就是哲学上的生命体、有机体思想。事物不仅有量,而且有结构,有行为,有生命,有传承。等等

python支持的编程范式有_转并修改:Python编程范式(Programming Paradigm)相关推荐

  1. 学习python这门课的感受_关于我学习了编程小白的第一本Python入门书之后的感受 200110900207...

    关于我学习了<编程小白的第一本Python入门书>之后的感受 200110900207 计算机类2班 胡敏 其实这本书更多的不是写关于Python的介绍的,而是关于Python的学习,也就 ...

  2. 小学生python编程写游戏_小学生开始学Python,开发AI的首选编程语言:推荐一波Python书单...

    AlphaGo 都在使用的 Python 语言,是最接近 AI 的编程语言. 教育部考试中心近日发布了"关于全国计算机等级(NCRE)体系调整"的通知,决定自2018年3月起,在全 ...

  3. python不支持以下哪种数据类型_下列数据类型中, Python不支持的是()。_学小易找答案...

    [判断题]a={},type(a)结果是 . (5.0分) [简答题]内造型设计 [填空题]水分子之间存在着质子的传递作用,称为水的 作用,这个作用的平衡常数在25度时等于 . [填空题]len('3 ...

  4. python创意编程培训 体会_省人工智能和创意编程教学研讨会学习心得

    省 人 工 智 能 和 创 意 编 程 教 学 研 讨 会 学 习 心 得 博兴乐安实验学校刘凯月 11 月 28 日到 29 日为期两天的人工智能和创意编程的教学研讨 会学习活动结束了,我有幸参加了 ...

  5. python开发面试问题及答案_前50个Python面试问题(最受欢迎)

    热门Python面试问答 下面列出的是关于Python编程语言的最常见面试问题和答案. 让我们探索!! #1)Python可以用于Web客户端和Web服务器端编程吗?哪一个最适合Python? 答案: ...

  6. python在建筑施工方面的应用_有哪些关于 Python 在建筑中的应用和教程?

    2018.02.09更新 (發現距離上一次更新馬上就要兩年了--) 嗯,兩年間發生了很多事.我也莫名其妙跑到ETH來了. 做起了Fab的優化,python已經完全不能滿足效率和複雜度的要求,走上了C+ ...

  7. python基于水色图像的水质评价_零基础学习Python的学习路线及教程

    什么是Python? 在过去的2017年里,Python开发者在全球快速增长,国内小伙伴学习 Python 的热情一路高涨.同时,PYPL发布7月编程语言指数榜,Python 在今年5月首次超越 Ja ...

  8. python语言是网络编程语言吗_三大主流编程语言Python为啥这么牛?

    前段时间,潘石屹几乎将旗下几个耳熟能详的SOHO地标项目,售卖一空.坊间舆论躁动,以为潘石屹要学李嘉诚一手,纷纷网络讨伐:"别让潘石屹跑了!"但他却很镇定,在56岁生日当天,发了条 ...

  9. 利用python爬取知乎评论_一个简单的python爬虫,爬取知乎

    一个简单的python爬虫,爬取知乎 主要实现 爬取一个收藏夹 里 所有问题答案下的 图片 文字信息暂未收录,可自行实现,比图片更简单 具体代码里有详细注释,请自行阅读 项目源码: 1 # -*- c ...

最新文章

  1. Spark Streaming实践和优化
  2. 剑三服务器维护是因为人太多吗,剑网三怀旧服两类服务器哪家强?一类人多且热闹,一类人少却稳定...
  3. SpringMvc中ModelAndView模型的应用
  4. 一年时间!这位22岁的成电博士生,就达到毕业要求!
  5. 简单工厂模式(Simple Factory Pattern)
  6. Java5~11新特性
  7. 大数据之-Hadoop完全分布式_Crondtab定时任务调度---大数据之hadoop工作笔记0042
  8. C++中异常处理中的构造和析构
  9. crontab 问号_轻松搞定crontab和quartz表达式
  10. 关于java Stream流将list集合分组之后与原list的集合的顺序不一致的问题
  11. 当代计算机科学的先驱John Todd逝世
  12. yaml-cpp保存标定文件-Node/Emitter
  13. 研发人员的几个典型性格特征
  14. 2017年中秋前记录
  15. python图片旋转脚本_Python实现PS滤镜的旋转模糊功能示例
  16. 人脸识别 —— insightface
  17. python3.7 如何去掉字符串\xa0/\xa0
  18. windows10如何安装IIS6.0
  19. PHP实现24节气的计算方法
  20. 从开始到验收:我做外包项目测试的经验总结

热门文章

  1. Unity 使用 Ffmpeg 加密视频
  2. 2022Android面经,历时一个半月,斩获大厂offer
  3. 【Python学习过程】关于入门Python初期接触到的函数
  4. 橱柜也可以这样美!!
  5. 服务器增加显卡 电压,Nvidia显卡提高电压的一个方法
  6. 如何提升速卖通店铺流量
  7. 最新小白设置sublime默认浏览器以及快捷键
  8. 【Java】静态代理和动态代理简单实现和原理分析
  9. 华硕电脑如何开启虚拟化?华硕飞行堡垒7开启虚拟化后,电脑开机黑屏;BOIS中将SVM Mode选择为Enabled就开不了机;控制面板中打开Hyper-V和windows虚拟机监控平台后,重启电脑黑屏
  10. 安装linux戴尔找不到引导,dellR720重启找不到启动引导项,手动选择也无用。