面向对象编程的替代方案?

Dar*_*iak 72 language-agnostic oop paradigms programming-languages

OOP可能是当今软件设计中使用最多的编程范例.我的问题是 - 其他范例可以与之竞争并且可以代替oop?为了澄清这个问题,我不是在询问其他范例是什么.其中有很多,我想知道哪一个:

  • 已经在实践中使用,不仅在理论上.
  • 可以与oop竞争,因此它可以在没有或最少痛苦的大型项目中使用.
  • 可用于开发具有业务逻辑,数据库等的桌面应用程序.
  • 不与oop的伴侣一起使用,但可以替换oop.

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

Jon*_*nas 46

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

函数式编程和面向对象编程之间的根本区别在于,您在数据流而不是控制流的意义上进行编程.见演示函数式编程驯服影响西蒙·佩顿-琼斯的一个很好的介绍.

Erlang是业界使用的函数式编程的一个很好的例子.它主要用于电信,分布式和容错系统.见演示二郎山-软件并发世界乔·阿姆斯特朗.

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

现在,新编程语言的趋势是多范式,其中面向对象编程和函数编程等多种范例被组合在同一种语言中.

  • Scala旨在集成面向对象和功能语言的功能. (4认同)
  • 很好的答案,但我认为功能编程和面向对象编程不是奖牌的两面,它们可以完美共存(正如你所提到的).它更像是这样:程序VS面向对象,命令式VS功能.Lisp是一种流行的过程函数式语言,Java是一种面向对象的命令式语言. (4认同)
  • @ ventr1s:查看有关函数式编程和设计模式的问题:http://stackoverflow.com/questions/327955/does-functional-programming-replace-gof-design-patterns (2认同)

Woo*_*ody 10

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

它当然可以用于具有最小疼痛和最大性能的大规模产品中

  • 是的,无数的指标研究表明它的气体耗尽约150K LOC.查看Petzold大约时间的Windows SDK,了解结构化编程如何在复杂性负载下解体:具有8个参数的函数,2个具有6-10个成员的结构.将数据推入和推出每个计算单元最终都不起作用. (4认同)
  • 好的但是 - 有多少应用程序变得这么大?OOP 的问题在于它的理解极其复杂,并且是为大量应用程序设计的——但即使对于小型应用程序也是默认的。这会产生相反的效果,不必要地使较小的应用程序过于复杂。 (2认同)

Bla*_*bam 6

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

PHP为例:

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

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

Java 还实现了许多不是来自面向对象范式(例如来自函数式编程)的概念。

查看维基百科中按类型分类的编程语言列表: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 通常被认为是构建大型复杂关系的好选择。它并不总是适用于许多其他任务的范式。