什么之间的差异,这些程范例,以及它们更适合于特定问题或做任何使用情况,赞成一个超过其他人吗?

建筑实例表示赞赏!

有帮助吗?

解决方案

所有这些都是在他们自己的方式好 - 它们只是不同的方法同样的问题。

在一个纯粹的程序的风格,数据倾向于从其上运行的功能来高度解耦。

在一个面向对象的风格,数据往往用它来进行的功能的集合。

在一个功能的风格,数据和功能朝向具有更多的共同点彼此(如在Lisp和Scheme)往往同时在功能是如何实际使用的术语,提供了更大的灵活性。算法还倾向于在递归和组合物,而不是循环和迭代方面进行定义。

当然,语言本身哪种风格优选仅影响。即使在象Haskell纯官能语言中,可以在过程风格写(尽管这是高度泄气),甚至在像C程序语言中,可以在一个面向对象的样式的程序(例如在GTK +和EFL的API)。

要明确的是,每个范例的“优势”仅仅是在你的算法和数据结构的建模。如果,例如,你的算法涉及列表和树木,功能算法可能是最明智的。或者,如果,例如,你的数据是高度结构化的,它可能更有意义,它组成的对象,如果这是你的语言的本地模式 - 或者,它可以很容易地被写成单子的功能抽象,它是象Haskell或ML语言天然范例

其中您使用的选择是简单的东西更有意义为您的项目和语言支持的抽象。

其他提示

我觉得可用库,工具,示例和社区完全胜过了范例,这些天。例如,ML(或其他)可能是最终的通用编程的语言的,但如果你不能得到任何好的库你在做什么,你就完蛋了。

例如,如果你正在做一个视频游戏,还有更多的好代码示例和SDK在C ++中,因此你可能与更好。对于小型Web应用程序,也有给你拿休息,也没有快速运行一些伟大的Python,PHP和Ruby框架。 Java是因为较大的编译时检查的项目和企业库和平台的绝佳选择。

这曾经是,不同语言的标准库是相当小的,容易复制的情况下 - C,C ++,汇编,ML,LISP等。从最基本的来了,但往往鸡了,当它来到标准化的东西,如网络通信,加密,图形,数据文件格式(包括XML),像平衡树和哈希表,甚至基本的数据结构的留在外面!

像Python,PHP,Ruby和Java的现代的语言现在都配备了一个更体面的标准库,并有许多很好的第三方库,你可以很容易地使用,由于在很大程度上得到采纳的命名空间,以保持库从碰撞彼此,和垃圾收集标准化库的存储器管理方案。

这些范例不必是相互排斥的。如果你看一下蟒蛇,它支持函数和类,但在同一时间,一切都是对象,包括函数。可以在一条代码混搭功能/ OOP /程序样式的所有

我的意思是,在函数式语言(至少在Haskell中,唯一一个我研究)没有报表!功能只允许在其内部一个表达!!但功能是一等公民,你可以通过他们周围作为参数,带着一帮其他的能力一起。他们可以做强大的东西用几行代码。

而在像C程序语言,你可以通过周围的功能的唯一方法是通过使用函数指针,这本身并不能使许多功能强大的任务。

在Python中,函数是一等公民,但它可以包含语句的任意数量。所以,你可以有一个包含程序代码的函数,但是你可以通过它周围就像函数式语言。

也是一样的OOP。像Java语言不允许你写一个类以外的过程/函数。围绕传递一个函数的唯一方法是把它包在实现该功能的对象,然后绕过该对象。

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

有关GUI我说的是,面向对象的帕拉迪格玛是非常适合的。该窗口是一个对象,文本框是对象,而奥凯按钮被一个太。在另一方面的东西像字符串处理可以用少得多的开销来完成,因此更直接用简单的程序PARADIGMA。

我不认为这是语言既不是一个问题。您可以编写功能,程序或面向对象的几乎所有流行的语言,但它可能会在一些一些额外的工作。

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

  1. 理解的特点不同的建筑样式/模式。
  2. 了解特性的不同程序的范例。

一个名单的软件建筑样式/模式显示在 软件架构的文章 在Wikipeida.你可以研究他们很容易在网络上。

在短期和一般的程序是很好的模型下的一个程序,面向对象是良好的设计,以及功能良好的高级别方案编制。

我认为你应该试试阅读历史上的每一个范例,看看为什么人们创建它,你可以理解他们容易。

理解之后他们两个,你可以链接的项目的建筑样式/模式编制方案的范例。

我觉得他们往往不是“对”,但你可以将它们结合起来。我还认为,通常情况下,你提到的话只是流行语。也有少数人究竟是谁知道什么是“面向对象”是指,即使是它最厉害的传道者。

我的一个朋友正在写使用 NVIDIA CUDA 的图形应用程序。适合应用在非常精美,OOP范式和问题就可以整齐地分解成模块。但是,要使用CUDA,您需要使用C,它不支持继承 。因此,你需要巧妙。

a)您设计一个聪明的系统,该系统将模拟继承到一定程度。这是可以做到!

ⅰ)可以使用钩系统,该期望的父的每个儿童中c p要有一定的覆盖了函数F可以让孩子注册他们的覆盖,这将被保存并在需要时调用。

ⅱ)可以使用结构存储器对准功能儿童浇铸成的父母。

这可能是整洁,但它并不容易拿出面向未来的,可靠的解决方案。你会花很多时间来设计系统并不能保证你不会遇到问题,通过该项目中途。实施多重继承是就更难了,如果不是几乎不可能。

b)你可以使用一致的命名策略和分而治之的办法创建程序。它不会有任何的继承,而是因为你的职责是小,易于理解和一致的格式,你不需要它。的代码,你需要编写量上升,这是很难保持专注,而不是屈从于简单的解决办法(黑客)。然而,编码的这个忍者的办法就是编码的C-方式。停留在低层次的自由和编写好的代码之间的平衡。实现这一目标的好方法是编写使用功能性语言的原型。例如, Haskell的是用于原型的算法非常好。

我趋向B方法。我的方法使用一个写了一个可能的解决方案,我将诚实,它使用该代码感到非常不自然。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top