90

OOP 可能是当今软件设计中最常用的编程范式。我的问题是——还有什么其他范式可以与之竞争并可以代替 OOP?为了澄清这个问题,我不是在问还有哪些其他范式。有很多,但我想知道是哪一个……</p>

  • 已在实践中使用,而不仅仅是在理论上。
  • 可以与 OOP 竞争,因此可以以最小的痛苦用于大型项目。
  • 可用于开发具有业务逻辑、数据库等的桌面应用程序。
  • 不与 OOP 一起使用,而是作为 OOP 的替代品。

如果有的话,它的优点/缺点是什么,为什么它比 OOP 更好/更差,什么语言最适合使用它,在流行语言中使用它怎么样,是否有任何设计模式,是否可以完全取代OOP?

4

6 回答 6

55

函数式编程是另一种流行的编程范式,主要在学术界。函数式编程语言的最佳示例是HaskellStandard ML

函数式编程和面向对象编程的根本区别在于,您是在数据流而不是控制流的意义上进行编程。请参阅Simon Peyton-Jones的演讲Taming Effects with Functional Programming以获得很好的介绍。

业界使用的函数式编程的一个很好的例子是Erlang。它主要用于电信、分布式和容错系统。请参阅Joe ArmstrongErlang-Software for a concurrent World演示文稿。

还有更新的函数式编程语言将函数式编程与 OOP 相结合。两个很好的例子是.NET 平台的F#和 Java 平台的Scala;他们通常可以使用平台上以其他语言编写的现有库。

现在新的编程语言的趋势是多范式,将面向对象编程和函数式编程等多种范式结合在同一种语言中。

于 2010-08-12T12:44:41.437 回答
13

在 OOP 出现之前,程序处理就是一切,已经产生了一些大型的现实世界应用程序(实际上,它们中的大部分是最初的)和许多操作系统。

它当然可以用于具有最小痛苦和最大性能的大型产品

于 2010-08-12T12:59:58.870 回答
8

首先请注意,目前使用的许多编程语言(尤其是“高级语言”)都是多范式的。这意味着您永远不会构建纯粹的 OOP 程序(除非您使用 Smalltalk 或 Eiffel 来构建您的大型项目)。

PHP为例:

  • 具有许多 OOP 元素(从版本 5 开始)
  • 以前主要是程序性的
  • 具有声明式编程的元素(例如数组函数)
  • 实现了函数式编程的许多元素(从 5.4 版开始)

基本上,PHP 将许多不同的范式粘合在一起(并且本身就是一种“粘合语言”)。

此外,Java 实现了许多并非来自面向对象范式的概念(例如,来自函数式编程)。

在 Wikipedia 中按类型查看编程语言列表:https ://en.wikipedia.org/wiki/List_of_programming_languages_by_type#Imperative_languages (不是 100% 准确)。

函数式编程(声明式编程的子集)

  • Wideley 在实践中使用(它成为PHP等粘合语言的一部分,Java和许多其他语言都实现了函数式编程的概念)
  • 许多想法源于LISP,绝对值得一看
  • 您可以构建整个应用程序,例如使用 Haskell,因此它可以“替换”OOP

程序化编程

  • C(作为一种主要的程序语言)仍然是最广泛使用的语言之一
  • 许多现代胶水语言在一开始都是程序性的
  • 仍然有许多程序主要是程序性的(所以如果你想要它可以“替换”OOP)

逻辑编程

  • 最突出的例子是 Prolog。这用于受益于基于规则的逻辑查询的特定任务
  • 在构建大型项目方面不能“替代”OOP,但可以在其他方面替代它

一般的声明性/特定领域语言

  • 在您的项目中使用 SQL?然后它们不是纯粹的OOP,SQL本质上是声明性的。
  • 许多特定领域的语言(如 CSS)是声明性的

一般的命令式编程

这个列表并不完整,它只是给出一个想法。请注意,在编写大型应用程序时,您通常会使用许多不同的范例,甚至您使用的每种语言都在实现多个范例。

在建模数据时,OOP 通常被认为是构建大型复杂关系的好选择。它并不总是适用于许多其他任务的范例。

于 2020-05-29T14:07:50.200 回答
4

矢量关系数据建模用于在全球信息网络架构(网络驻留模型代理)中创建具有域相关语义的可执行信息模型。

于 2015-09-04T20:42:58.467 回答
1

FP - 函数式编程是一种非常流行的编程范式,已经存在了很长时间,并且在最近几年开始变得越来越突出。FP 更倾向于不变性,而不是可变性、递归和没有副作用的函数。流行的 fp 语言的一些示例是 Erlang、Scala、F#、Haskell 和 Lisp(以及其他)。

于 2010-08-12T12:49:40.407 回答
-5

目前没有可以真正取代 OOP 的范式。OOP 的(好处)问题在于它为您完成了大量工作——自动释放资源、验证数据等,并且它使验证代码变得容易——更不用说世界上绝大多数现有的库是用 C++、C# 或 Java 等 OOP 语言编写的。没有像这样的大型图书馆这样相处的现实是非常令人怀疑的。

在利基或学术世界中,您会发现很多函数式编程。但是,如果你真的想做一个大项目,OOP 是唯一的选择。

我认为泛型编程将成为一种新的范式。然而,它实际上仍处于开发阶段,只有 C++/D 提供真正优秀的泛型编程。

于 2010-08-12T13:01:09.650 回答