关于语言不可知:面向对象编程的替代方案?

Alternatives to Object-Oriented Programming?

OOP可能是当今软件设计中最常用的编程范例。我的问题是——还有什么样的范式可以与之竞争,并且能够取代OOP?为了澄清这个问题,我不想问还有什么其他的范例。其中有很多,我想知道哪一个:

  • 不仅在理论上,而且在实践中得到了应用。
  • 可以与OOP竞争,因此它可以在一个大型项目中使用,而不需要或最小的痛苦。
  • 可用于开发具有业务逻辑、数据库等功能的桌面应用程序。
  • 不与OOP配套使用,可替代OOP。

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


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

函数式编程和面向对象编程的根本区别在于,您是在数据流而不是控制流的意义上编程的。请参阅Simon Peyton Jones的演示文稿《用函数编程控制效果》,以获得良好的介绍。

Erlang就是一个很好的行业功能编程的例子。它主要用于电信、分布式和容错系统。参见Joe Armstrong的演示Erlang-软件,了解并发世界。

还有一些新的函数式编程语言结合了函数式编程和OOP。两个很好的例子是.NET平台和Scala对于Java平台的F.*;它们可以经常使用其他语言编写的平台上使用现有的库。

新编程语言的发展趋势是多范式,多范式如面向对象编程和功能编程在同一种语言中结合在一起。


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

它当然可以用在最大限度地减少痛苦和性能的大型产品中。


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


功能编程是一种非常流行的编程范式,已经存在了很长的时间,近年来,它开始变得越来越突出。与不可变、递归和无副作用的函数相比,fp更倾向于不可变。流行的fp语言有erlang、scala、f_、haskell和lisp等。


目前还没有能够真正取代OOP的范例。OOP的好处是它为你做了大量的工作——自动释放资源、验证数据等,并且它使代码验证变得容易——更不用说世界上大多数现有的库都是用像C++、C语言或Java这样的OOP语言编写的。没有如此大规模的图书馆和如此规模的图书馆,生活得很好的现实是令人非常怀疑的。

在利基或学术领域,你会发现很多函数式编程。然而,如果你真的想做一个大的项目,OOP是唯一的方法。

我认为通用编程将成为一种新的范例。然而,它仍然处于开发阶段,只有C++/D提供真正好的泛型编程。