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

时间:2010-08-12 12:42:42

标签: language-agnostic oop programming-languages paradigms

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

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

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

6 个答案:

答案 0 :(得分:41)

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

函数式编程和面向对象编程之间的根本区别在于,您在数据流而非控制流的意义上进行编程。请参阅 Simon Peyton-Jones 的演示文稿Taming Effects with Functional Programming,以获得详细介绍。

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

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

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

答案 1 :(得分:10)

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

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

答案 2 :(得分:4)

首先请注意,当前使用的许多编程语言(特别是“高级语言”)都是 multi-paradigm 。这意味着您永远不会构建纯粹的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视为构造大型复杂关系的不错选择。对于许多其他任务而言,并非总是如此。

答案 3 :(得分:2)

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

答案 4 :(得分:1)

FP - 功能编程是一种非常流行的编程范例,已经存在了很长时间,并且近年来开始变得越来越突出。 FP支持不可变性,递归和函数的不变性,没有副作用。流行的fp语言的一些例子是Erlang,Scala,F#,Haskell和Lisp(等等)。

答案 5 :(得分:-5)

目前没有可以真正取代OOP的范例。 OOP(受益)的问题在于它为您做了大量工作 - 自动发布资源,验证数据等,并且可以轻松验证代码 - 更不用说世界上绝大多数现有的库用C ++,C#或Java等OOP语言编写。如果没有这样大规模的图书馆,那么相处的现实是非常值得怀疑的。

在利基或学术界,你会发现很多功能编程。但是,如果你真的想做一个大型项目,OOP是唯一的出路。

我认为通用编程将成为一种新的范例。但是,它仍然处于开发阶段,只有C ++ / D才能提供真正优秀的通用编程。