2

到目前为止,我使用过 Java、Prolog、SQL 和 C# 语言。我知道 Java 和 C# 是命令式的,Prolog 声明性和 SQL 有点声明性语言。Java 和 C# 是面向对象的,您可以使用它们开发面向方面的程序。

这已经是某些语言可能适合或实现的四种不同特征:命令式、声明式、面向对象、面向方面,我还遇到过其他各种类别:函数式语言、汇编语言,可能还有更多我没听说过的语言。

是否存在某种约定和/或逻辑分类或多维分类,其中编程语言可以以某种一致的方式分类?

4

5 回答 5

14

您可以在这篇 Wikipedia 同名文章中找到大量的编程范例。尤其是右边的树非常有用和全面。

而且我担心,许多编程语言可能适合不止一个类别,例如,C# 是结构化的、命令式的、面向对象的、事件驱动的、函数式的。

  • 结构化,因为它包含流控制语句。
  • 势在必行,因为您编写了计算机应该执行的操作。
  • 面向对象,因为您可以对类问题进行建模。
  • 事件驱动,因为在语言语法中直接包含了多播委托和事件,使得一些设计模式过时了。
  • 功能性,因为委托是作为一等对象的功能,并允许您以功能性方式编写程序。

另一方面,Java 仅共享该列表的结构化、命令式面向对象,使其更像是一种“纯”OO 语言,不受太多其他范式的污染。

注意:这些分类取自各自的维基百科页面。

这些分类中的每一个都是相互正交的,上面文章中提到的许多分类都是正交的。它们描述了如何处理语言、语法或执行的不同方面。

于 2009-10-23T15:24:18.133 回答
4

在Peter Landin的这篇开创性的 CS 论文(早于 OO,顺便说一句)的末尾有一个有趣的讨论,我们可以看到,最基本的区别是命令式语言与声明性语言的区别。仍然在基础级别,类型系统类别提供高级语言分组。语法的可扩展性是另一个相当高级和基本的分类。

我认为多维矩阵比层次结构更适合您的目的,而且我认为上面概述的 3 个维度是绝对基础的。

于 2009-10-23T23:49:55.910 回答
4

有点切题,但 O'Reilly 根据Éric Lévénez 的原作制作了一张很棒的海报,该海报追溯了主要编程语言的历史。

http://cdn.oreillystatic.com/news/graphics/history-poster20.gif

于 2009-10-24T01:37:29.707 回答
2

这些特征(范式)被很好地理解和接受。但他们不一定定义语言。C#既具有命令式和函数式的特点,又是面向对象的,而F#也具有命令式的特点。

于 2009-10-23T15:25:03.047 回答
1

很难按类别击败维基百科的编程语言列表。它使用四十个类别。

于 2010-07-02T20:32:50.113 回答