OOP与功能编程vs程序


他们都擅长自己的方式 - 他们对于同样的问题只是不同的方法。

在纯粹的程序风格中,数据往往与其上运行的函数高度分离。

在面向对象的风格中,数据往往带有一系列功能。

在功能风格上,数据和功能倾向于具有更多共同点(如Lisp和Scheme),同时在实际使用功能方面提供更多的灵活性。 算法也倾向于用递归和组合来定义,而不是循环和迭代。

当然,语言本身只影响哪种风格是首选。 即使在像Haskell这样的纯函数语言中,你也可以使用过程式的风格(尽管这非常令人沮丧),甚至在像C这样的过程式语言中,你也可以用面向对象的风格编程(比如在GTK +和EFL API)。

要明确,每个范例的“优点”仅仅在于对算法和数据结构进行建模。 例如,如果您的算法涉及列表和树,则功能算法可能是最明智的。 或者,例如,如果您的数据是高度结构化的,如果它是您的语言的本地范式 - 或者它可以很容易地写成monad的功能抽象,那么将它组合为对象可能更有意义,是Haskell或ML等语言的本地范例。

你选择哪一种只是让你的项目和你的语言支持的抽象更有意义。


我认为现在可用的图书馆,工具,例子和社区完全胜过了这个范例。 例如,ML(或其他)可能是最终的多用途编程语言,但如果你无法为你正在做的事情获得任何好的库,那么你就被搞砸了。

例如,如果你制作视频游戏,C ++中有更多优秀的代码示例和SDK,所以你可能会更好。 对于一个小型Web应用程序,有一些很棒的Python,PHP和Ruby框架可以让你快速启动并运行。 由于编译时检查以及企业库和平台的原因,Java对大型项目来说是一个很好的选择。

过去的情况是,不同语言的标准库很小并且很容易复制 - C,C ++,Assembler,ML,LISP等等都有基础知识,但在标准化方面倾向于放弃像网络通信,加密,图形,数据文件格式(包括XML),甚至像平衡树和散列表这样的基本数据结构都被忽略了!

像Python,PHP,Ruby和Java这样的现代语言现在拥有更加体面的标准库,并且拥有许多可以轻松使用的优秀第三方库,这在很大程度上归功于它们采用命名空间来防止库相互冲突,和垃圾回收来标准化库的内存管理方案。


这些范例不必相互排斥。 如果你看python,它支持函数和类,但同时,一切都是一个对象,包括函数。 你可以在一段代码中混合和匹配功能/操作/程序风格。

我的意思是,在函数式语言中(至少在Haskell中,我研究过的唯一一个)没有任何语句! 函数只允许其中一个表达式! 但是,功能是一流的公民,您可以将它们作为参数传递给其他人,以及其他一些功能。 他们可以用几行代码来完成强大的功能。

在像C这样的过程语言中,你可以传递函数的唯一方法是使用函数指针,而这本身并不能启用许多强大的任务。

在python中,函数是一等公民,但它可以包含任意数量的语句。 所以你可以有一个包含程序代码的函数,但你可以像函数式语言一样传递它。

OOP也一样。 像Java这样的语言不允许你在类之外编写程序/函数。 传递函数的唯一方法是将其包装在实现该函数的对象中,然后传递该对象。

在Python中,你没有这个限制。

链接地址: http://www.djcxy.com/p/22917.html

上一篇: OOP vs Functional Programming vs Procedural

下一篇: Better way to check if a Path is a File or a Directory?