当前位置:  开发笔记 > 编程语言 > 正文

OOP与功能编程与程序

如何解决《OOP与功能编程与程序》经验,为你挑选了5个好方法。

这些编程范例之间有什么区别,它们是否更适合于特定问题,或者任何用例都优先于其他问题?

建筑实例赞赏!



1> greyfade..:

他们所有人都以自己的方式表现出色 - 他们只是解决同样问题的不同方法.

在纯粹的程序风格中,数据往往与操作它的函数高度分离.

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

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

当然,语言本身只会影响哪种风格.即使在像Haskell这样的纯函数式语言中,你也可以用程序风格编写(虽然这是非常气馁的),甚至在像C这样的过程语言中,你也可以用面向对象的方式编程(比如在GTK +和EFL API).

需要明确的是,每种范例的"优势"仅仅在于算法和数据结构的建模.例如,如果您的算法涉及列表和树,则功能算法可能是最明智的.或者,例如,如果您的数据是高度结构化的,那么将它作为对象组合可能更有意义,如果这是您的语言的本机范例 - 或者,它可以很容易地被编写为monad的功能抽象,是Haskell或ML等语言的原生范例.

您选择使用的只是对您的项目更有意义的内容以及您的语言支持的抽象.


@Leonel:大多数人引用的最大区别是,在过程语言中,你可能使用for循环,但是函数式语言,没有这样的东西 - 相反,你使用函数的递归调用来执行相同的任务.函数式语言也使函数成为一流的对象 - 你可以像传递一样来传递它们 - 但是你不能在C中做到这一点(并且PHP对它的支持被破坏了).
你说的,似乎并没有反映你所写的内容.你说他们没有"利弊",然后说出他们是不同的方法.为什么有人会根据任何特定情况选择一种方法而不是另一种方法?优点和缺点,利弊,无论你怎么称呼它们,它们确实存在!我并不是说一个本来就更好,你也不是.我相信这就是你真正想说的.除非你真的相信任何选择的方法没有积极和消极,相对于另一个approch.
程序和功能之间的区别对我来说并不清楚.我正在大学学习Scheme/Rackett,但是我真的看不出它和程序C或PHP之间的巨大差异,你能给出一些例子吗?
@tastro:当一个范式比另一个更有意义时.这就是全部.有时将代码建模为函数组合更有意义,有时将数据建模为对象更有意义.表达算法和数据结构的方法有很多种.OOP和功能恰好是其中的两个.

2> 小智..:

我认为现有的图书馆,工具,示例和社区完全胜过范例.例如,ML(或其他)可能是最终的通用编程语言,但如果你无法获得任何好的库,那么你就会被搞砸.

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

以前的情况是,不同语言的标准库非常小并且很容易复制 - C,C++,汇编程序,ML,LISP等.随附基础知识,但在标准化事物时往往会大吃一惊像网络通信,加密,图形,数据文件格式(包括XML),甚至基本的数据结构,如平衡树和哈希表被排除在外!

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


问题是关于面向对象,功能和过程编程之间的差异.虽然这些答案中提到的语言肯定适用于这些方法之一,但答案并未提及任何这些概念......无论"可用库[...] [特朗普]范式是否",这不能回答手头的问题,从而撇开什么是完全有效的问题.
Python,ruby,...没有像C或LISP这样的"标准"库,因为它们是单一实现语言.Python是Guido所说的,没有标准.现在任何特定的C或LISP(或其他)实现都带有超出标准库的大量库.

3> hasen..:

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

我的意思是,在函数式语言中(至少在Haskell中,我学过的唯一一个)没有语句!函数只允许在其中有一个表达式!! 但是,功能是一等公民,你可以传递它们作为参数,以及一堆其他的能力.他们可以通过几行代码完成强大的功能.

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

在python中,函数是一等公民,但它可以包含任意数量的语句.因此,您可以拥有一个包含过程代码的函数,但您可以像函数式语言一样传递它.

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

在Python中,您没有此限制.



4> panschk..:

对于GUI,我会说面向对象的范例非常适合.Window是一个Object,Textboxes是Objects,而Okay-Button也是一个.另一方面,字符串处理之类的东西可以用更少的开销完成,因此使用简单的程序范例更简单.

我认为这也不是语言问题.你可以用几乎任何流行语言编写功能,程序或面向对象,尽管在某些语言中可能会有一些额外的努力.


试图将"Object = GUI widget"的错误观念永久化,但我会克制.OOP也可用于表示抽象概念,例如"UserAccount"或"PendingSale",以及"Window"和"Button"等可见界面元素.
-1.OOP与GUI没有任何关系.理想情况下,设计guis的最佳方法是使用外部文本文件(例如HTML).虽然像字符串处理这样的东西实际上更好地完成了对象.(想想C中的字符串)!!
我写道,窗口可以是一个对象.你如何得出每个物体都是那里的窗户的结论?这只是一个例子.当然,OOP也可以用来模拟抽象实体及其关系.无论如何,谢谢你没有贬低.反正我也没有多少分:D

5> GabrielC..:

为了回答你的问题,我们需要两个要素:

    了解不同架构风格/模式的特征.

    理解不同编程范式的特征.

软件架构样式/模式列表显示在Wikipeida 上的软件架构文章中.您可以在网上轻松研究它们.

简而言之,Procedural适用于遵循程序的模型,OOP适用于设计,而Functional适用于高级编程.

我认为你应该尝试阅读每个范例的历史,看看为什么人们创造它并且你可以轻松地理解它们.

在理解了它们之后,您可以将架构样式/模式的项目链接到编程范例.

推荐阅读
yzh148448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有