Alternatives to Object-Oriented Programming?
OOP可能是当今软件设计中最常用的编程范例。我的问题是——还有什么样的范式可以与之竞争,并且能够取代OOP?为了澄清这个问题,我不想问还有什么其他的范例。其中有很多,我想知道哪一个:
- 不仅在理论上,而且在实践中得到了应用。
- 可以与OOP竞争,因此它可以在一个大型项目中使用,而不需要或最小的痛苦。
- 可用于开发具有业务逻辑、数据库等功能的桌面应用程序。
- 不与OOP配套使用,可替代OOP。
如果有,它的优点/缺点是什么,为什么它比OOP更好/更差,什么语言最适合使用它,在流行语言中使用它怎么样,它有什么设计模式,它能完全取代OOP吗?
- @贾斯汀:我知道有很多,但是哪一个可以和OOP竞争?@Tobiasopdenbrouw&;宏:确定,已更改。
- OOP很受欢迎,因为它很受欢迎,如果你不吞下OOP的怪人,你就没有任何项目要做…
- 面向数据的编程更容易,因为您关心对象集合及其关系,而不是单个对象,"db-object"方法提供封装。JSON和SExpressions让SQL、CSS、HTML、Excel、shell脚本变得很流行和有用,但"编程"意味着OOP或过程性。尽管oop占代码的20%,但对于python/javascript程序的可维护性还是表示感谢。闭包和JSON可以在90%的时间内代替对象,而且更简单和易于使用。
函数式编程是另一种流行的编程范式,主要在学术界。函数式编程语言的最佳示例是haskell和标准ML。
函数式编程和面向对象编程的根本区别在于,您是在数据流而不是控制流的意义上编程的。请参阅Simon Peyton Jones的演示文稿《用函数编程控制效果》,以获得良好的介绍。
Erlang就是一个很好的行业功能编程的例子。它主要用于电信、分布式和容错系统。参见Joe Armstrong的演示Erlang-软件,了解并发世界。
还有一些新的函数式编程语言结合了函数式编程和OOP。两个很好的例子是.NET平台和Scala对于Java平台的F.*;它们可以经常使用其他语言编写的平台上使用现有的库。
新编程语言的发展趋势是多范式,多范式如面向对象编程和功能编程在同一种语言中结合在一起。
- 函数式编程可以代替OOP吗?或者它与OOP一起使用?在这个范例中是否有应用程序的真实例子?设计模式呢?
- scala旨在集成面向对象语言和功能语言的特性。
- 很好的答案,但是我认为函数式编程和面向对象编程不是奖牌的两面,它们完全可以共存(如您所提到的)。更像是:过程性与面向对象性,命令性与功能性。LISP是一种流行的过程函数语言,Java是一种面向对象的命令语言。
- @ventr1s:是的,函数式编程可以取代oop,但是它很可能在scala和f_等语言中与oop一起使用。
- @ventr1s:一个很好的行业功能编程的例子是用erlang编写的分布式NoSQL数据库RIAK。BasHo.RiaK.BasHo.com
- @ventr1s:请参阅这个关于函数式编程和设计模式的问题:stackoverflow.com/questions/327955/…
程序化处理是OOP出现之前的一切,已经产生了一些大型的现实世界应用程序(实际上,大部分是最初的)和许多操作系统。
它当然可以用在最大限度地减少痛苦和性能的大型产品中。
- 是的,无数的指标研究表明,它在大约150K的位置耗尽了天然气。看看大约在petzold时代的windows sdk,你会发现结构化编程在复杂的负载下是如何分解的:函数有8个参数,2个是结构,有6-10个成员。最终,将数据输入和输出到每个计算单元都是行不通的。
- 好吧,但是-有多少应用程序会这么大?OOP的问题在于,它的理解非常复杂,并且是为大量应用而设计的——但即使是对于小型应用,它也是默认的。这有一个相反的效果,那就是不必过分复杂化较小的应用程序。
- 面向对象编程有时会因为需要构造函数和长的getter/setter方法而导致应用程序变长。这些早期的过程语言(如C)不支持元编程、没有多态性系统、闭包或简单的JSON/通用数据表示语法。C甚至不支持可选参数。monad和宏可以用来构建强大的嵌入式领域特定语言。
- 有8个参数的函数-听说过默认参数吗?对hashtables+闭包(如javascript、python等)的过程+第一类支持怎么样?它们具有OOP的许多优点,没有那么多的代码。
矢量关系数据建模用于在全局信息网络体系结构(一个网络驻留模型代理)中创建具有域相关语义的可执行信息模型。
功能编程是一种非常流行的编程范式,已经存在了很长的时间,近年来,它开始变得越来越突出。与不可变、递归和无副作用的函数相比,fp更倾向于不可变。流行的fp语言有erlang、scala、f_、haskell和lisp等。
目前还没有能够真正取代OOP的范例。OOP的好处是它为你做了大量的工作——自动释放资源、验证数据等,并且它使代码验证变得容易——更不用说世界上大多数现有的库都是用像C++、C语言或Java这样的OOP语言编写的。没有如此大规模的图书馆和如此规模的图书馆,生活得很好的现实是令人非常怀疑的。
在利基或学术领域,你会发现很多函数式编程。然而,如果你真的想做一个大的项目,OOP是唯一的方法。
我认为通用编程将成为一种新的范例。然而,它仍然处于开发阶段,只有C++/D提供真正好的泛型编程。
- OOP不做这些事情。它可以使它们更简单,但前提是OO框架的设计包含它们,比如在.NET中,或者您愿意编写它们。
- 从技术上讲,你是对的。然而,现实情况是所有流行的OO语言都将资源管理作为面向对象的特性。你很难找到一个直接支持对象的语言,而不包括它。而OP显然对实践感兴趣,而不是理论。
- 资源管理不是面向对象的特性——资源管理是命令式编程语言的特性,可以是面向对象的,也可以不是面向对象的。我不知道有什么纯粹的函数式语言强迫您显式地管理系统资源。