这些编程范例之间有什么区别,它们是否更适合于特定问题,或者任何用例都优先于其他问题?
建筑实例赞赏!
他们所有人都以自己的方式表现出色 - 他们只是解决同样问题的不同方法.
在纯粹的程序风格中,数据往往与操作它的函数高度分离.
在面向对象的风格中,数据往往带有一系列功能.
在功能风格中,数据和函数倾向于彼此具有更多共同点(如在Lisp和Scheme中),同时在实际使用函数方面提供更多灵活性.算法也倾向于根据递归和组合而不是循环和迭代来定义.
当然,语言本身只会影响哪种风格.即使在像Haskell这样的纯函数式语言中,你也可以用程序风格编写(虽然这是非常气馁的),甚至在像C这样的过程语言中,你也可以用面向对象的方式编程(比如在GTK +和EFL API).
需要明确的是,每种范例的"优势"仅仅在于算法和数据结构的建模.例如,如果您的算法涉及列表和树,则功能算法可能是最明智的.或者,例如,如果您的数据是高度结构化的,那么将它作为对象组合可能更有意义,如果这是您的语言的本机范例 - 或者,它可以很容易地被编写为monad的功能抽象,是Haskell或ML等语言的原生范例.
您选择使用的只是对您的项目更有意义的内容以及您的语言支持的抽象.
我认为现有的图书馆,工具,示例和社区完全胜过范例.例如,ML(或其他)可能是最终的通用编程语言,但如果你无法获得任何好的库,那么你就会被搞砸.
例如,如果您正在制作视频游戏,那么C++中有更多优秀的代码示例和SDK,因此您可能会更好.对于小型Web应用程序,有一些很棒的Python,PHP和Ruby框架可以让您快速启动并运行.由于编译时检查以及企业库和平台,Java是大型项目的绝佳选择.
以前的情况是,不同语言的标准库非常小并且很容易复制 - C,C++,汇编程序,ML,LISP等.随附基础知识,但在标准化事物时往往会大吃一惊像网络通信,加密,图形,数据文件格式(包括XML),甚至基本的数据结构,如平衡树和哈希表被排除在外!
像Python,PHP,Ruby和Java这样的现代语言现在带来了更加体面的标准库,并且拥有许多可以轻松使用的好的第三方库,这在很大程度上要归功于它们采用命名空间来防止库彼此冲突,和垃圾收集,以标准化库的内存管理方案.
这些范例不必相互排斥.如果你看一下python,它支持函数和类,但同时,一切都是一个对象,包括函数.您可以在一段代码中混合和匹配功能/ oop /程序样式.
我的意思是,在函数式语言中(至少在Haskell中,我学过的唯一一个)没有语句!函数只允许在其中有一个表达式!! 但是,功能是一等公民,你可以传递它们作为参数,以及一堆其他的能力.他们可以通过几行代码完成强大的功能.
在像C这样的过程语言中,你可以传递函数的唯一方法是使用函数指针,而单凭这一点并不能启用许多强大的任务.
在python中,函数是一等公民,但它可以包含任意数量的语句.因此,您可以拥有一个包含过程代码的函数,但您可以像函数式语言一样传递它.
OOP也是如此.像Java这样的语言不允许您在类之外编写过程/函数.传递函数的唯一方法是将它包装在实现该函数的对象中,然后传递该对象.
在Python中,您没有此限制.
对于GUI,我会说面向对象的范例非常适合.Window是一个Object,Textboxes是Objects,而Okay-Button也是一个.另一方面,字符串处理之类的东西可以用更少的开销完成,因此使用简单的程序范例更简单.
我认为这也不是语言问题.你可以用几乎任何流行语言编写功能,程序或面向对象,尽管在某些语言中可能会有一些额外的努力.
为了回答你的问题,我们需要两个要素:
了解不同架构风格/模式的特征.
理解不同编程范式的特征.
软件架构样式/模式列表显示在Wikipeida 上的软件架构文章中.您可以在网上轻松研究它们.
简而言之,Procedural适用于遵循程序的模型,OOP适用于设计,而Functional适用于高级编程.
我认为你应该尝试阅读每个范例的历史,看看为什么人们创造它并且你可以轻松地理解它们.
在理解了它们之后,您可以将架构样式/模式的项目链接到编程范例.