编程范型

编程范式是按编程语言的功能对其进行分组的一种方式。语文可以有一个以上的范式。

有些范式看的是代码运行的方式,比如允许副作用,或者必须按照一定的顺序来做事情。另一些范式则是看代码的分组方式,比如把代码分成一个或两个片段(或者相反,许多小片段)。其他一些范式看的是程序的顺序和片断,使程序成为这样。

范式主要有两类,即命令式和陈述。一种语言可以同时具备这两种范式。

内容

·         1 Imperative Programming

·         2 声明式方案编制

·         3 其他范例

·         4 概述

·         五、范式的问题

·         6 历史

o    6.1 机器代码

o    6.2 程序性语言

o    6.3 面向对象的方案编制

o    6.4 声明式范式

·         7个相关网页

·         8 参考资料

·         9个其他网站

递进式编程

在命令式程序中,程序员给计算机一套有序的步骤,需要做某件事。如果有人想让计算机画一张猫脸,他们可能会给出这样的指令:"在这里画一个圆,在那里画两个小圆,在上面画两个三角形"等等。强制性程序有时会有很多副作用。

有两种主要的命令式范式,很多时候一种语言会同时拥有这两种范式。

  • 结构化--计算机得到的指令总是按照一定的顺序进行。像"回到第3步"这样的步骤(称为goto语句)是不允许的。
    • 程序化--程序让程序员给命令列表起一个名字,把这些命令变成他们以后可以使用的"程序"。大多数结构化语言也是程序化的。
  •  

声明式编程

在声明式范式中,程序员告诉计算机做什么而不是如何做。如果他们想让计算机画一张猫脸,他们可能会给出"画一张脸,画两只眼睛、两只耳朵和一张嘴"这样的指示。

最著名的陈述式范式是:。

  • 功能性--大部分工作由功能完成,无副作用
  • 逻辑--先陈述一组事实,然后提出一个或多个"问题"。
  • 事件驱动--当某些事情发生时(如计算机被打开),代码片段被设置为运行。

其他范例

有些范式在命令式语言和陈述式语言中都可以找到。这些范式通常是与上述范式中的一种一起出现,而不是单独进行。

概述

编程语言按范式分组,就像机器按用途分组一样。

少数语言只适合一种主要范式,如:

  • Smalltalk(面向对象)
  • 汇编(命令式,但不是结构化或面向对象)
  • 哈斯克尔
  • 普罗格

不过,大多数语言都不只一种范式。其中一些因具有不止一种范式而脱颖而出的语言有:

  • Scala(面向对象、函数式、并行)
  • Visual Basic (事件驱动,面向对象)
  • 普通Lisp(程序性、功能性、面向对象、元)
  • 方案(功能、程序、元)
  • Perl (函数式、过程式、元、面向对象、事件驱动)
  • Python (函数式、面向对象、程序式)
  • Ruby(功能型、面向对象、程序型)
  • 沃尔夫拉姆语言(功能型、程序型、一般声明型)
  • 奥兹(逻辑、函数式、命令式、面向对象)
  • F#(函数式、命令式、面向对象、元)

范式多了不一定是好事。有一种情况是,当有一种语言只是功能型语言时,拥有较少的范式可能是一件好事。在这些语言中,一个函数有时做的工作(比如只去看它实际需要的一组事物的部分)比如果该语言也是程序性的可能要少。

许多编程范式因为它们不让人们做的事情和它们让人们做的事情而闻名。有一次是这样的,就是函数式语言。当一种函数式语言只有大部分是函数式的时候,它通常不会允许出现副作用。另一个真实的时候是结构化编程:它与一般的命令式语言不同,因为它不允许程序员使用"goto语句"(告诉程序进入先前步骤的语句)。由于这个原因和其他原因,人们有时会认为新范式不允许有足够的东西。不过有时候计算机不让人们做的事情也是可以的:它可以帮助人们避免他们的代码出现问题,让计算机做出猜测,这样它就可以更快地运行代码,甚至在代码运行之前检查代码是否有问题!

根据Peter Van Roy的说法,各种编程范式的概述。Zoom
根据Peter Van Roy的说法,各种编程范式的概述。

范例的问题

有些研究编程语言的人不喜欢用范式来归类编程语言,比如Harper和Krishnamurthi。这些人说,很多编程语言不能只用范式来归类,因为语言从很多范式中借用了东西和思想。

历程

随着时间的推移,新的范式被创造出来,人们或在当时指出,或在回顾时指出。最早被认为是一种新的编程方式的范式之一是20世纪60年代的结构化编程。如果不是更早的话,"编程范式"这个概念是1978年的,当时Robert W. Floyd在教学时使用了这个概念。罗伯特所指的"范式"一词最早是由Thomas Kuhn在他的《科学革命的结构》(1962)一书中使用的。

机器码

最低级(最接近计算机喜欢的理解方式)、最古老的编程范式是机器码,是一种命令式范式。机器码中的方向只是一组按一定顺序排列的数字。汇编语言就没有那么低级了(也没有那么古老了)。在汇编语言中,计算机的方向被赋予了记忆符(更容易记忆的名字),内存地址(在计算机中寻找某条信息的方向)也可以被赋予名字。这些有时被称为第一代和第二代语言。

在20世纪60年代,汇编语言通过增加新的东西,如库的COPY、宏(在程序开始运行前被转化为正常代码的"特殊"代码的部分)、运行程序(给定名称并保存起来供以后使用的一组方向)和变量(给定名称并保存起来供以后使用的项目),使程序变得更好。这让人们可以在一个以上的项目中使用一些代码,并且由于READ/WRITE/GET/PUT等命令(方向的名称),不必担心与硬件特定的问题(只发生在一种计算机上的问题)。

汇编曾经是,有时仍然是,用于对代码的速度很重要的系统中,它在嵌入式系统中也被大量使用,因为可以让用户精确控制机器的工作。

程序性语言

在20世纪60年代末,人们开始发明程序化语言。这些第三代语言(也就是我们现在所说的高级语言的前几代)的词都与他们要解决的问题有关。比如说

  • 面向商业的语言(COBOL)--使用文件、移动和复制等词汇。
  • FORmula TRANslation (FORTRAN) - 使用数学单词和符号(书写和打字时使用的形状)。它主要是为科学和工程开发的。
  • ALGOrithmic Language (ALGOL) -- -- 用于编写算法(告诉计算机做什么的一组步骤)。它使用数学单词和符号,就像FORTRAN一样。
  • 编程语言一(PL/I)--本来是对大家有用的。
  • 初学者全能符号指令代码(BASIC)--为帮助初学者编程而作。
  • C--一种编程语言,意在做很多事情。Dennis Ritchie从1969年到1973年在AT&T贝尔实验室从事它的工作。

面向对象的编程

在许多人开始使用程序化语言之后,他们发明了面向对象的编程语言。在这些语言中,数据和它的"方法"(操作数据的方法)被放在一个"对象"中。一些程序员,如Richard Stallman,并不同意面向对象语言比程序语言更适合向计算机解释想法。

因为面向对象编程是一种范式,而不是一种语言,所以人们制作了HLA(High Level Assembly)等面向对象的汇编语言

声明式范式

与此同时,一些人在制作声明式编程语言。以声明式语言著称的语言是SQL(一种从表中添加和删除事物的语言)。

相关网页

  • 心态
  • 类型系统
  • 图灵完备性

问题和答案

问:什么是编程范式?
答:编程范式是根据编程语言的运行方式来分组的一种方式。

问:有哪两组主要的范式?
答:两组主要的范式是命令式和声明式。

问:命令式和声明式范式有什么不同?
答:命令式范式关注的是代码的运行方式,比如允许副作用或必须按照一定的顺序做事,而声明式范式关注的是代码的分组方式,比如把代码分成一到两块(或者相反,很多小块)。

问:一种语言可以既是命令式范式又是声明式范式吗?
答:是的,一种语言可以同时是命令式和声明式范式。

问:编程范式是如何对语言进行分组的?
答:编程范式通过它们所做的事情对语言进行分组。它们看的是代码是如何运行的,如何分组的,以及什么顺序和片段组成了程序。

问:除了命令式和声明式,还有其他类型的编程范式吗?
答:是的,除了命令式和声明式,还有其他类型的编程范式。例如,有的看重代码的运行方式(如允许副作用),有的看重代码的分组方式(如把代码分成一到两块)。

问:是否每种语言都只属于一种编程范式?
答:不,不是每种语言都只属于一种编程范式;有些语言可以属于一种以上的范式。

AlegsaOnline.com - 2020 / 2023 - License CC3