OOP与PP算法

时间:2010-03-18 09:20:45

标签: algorithm oop procedural-programming

哪种范例更适合算法的设计和分析? 哪个更快?因为我在大学里有一个叫做算法设计和分析的科目,并且对程序有一个时间限制。 OOP比程序编程慢吗?或者时差不大?

11 个答案:

答案 0 :(得分:8)

面向对象的编程与算法并不特别相关。您需要的程序编程,但就算法而言,面向对象编程只是编写程序编程的另一种方法。你有方法而不是函数和类而不是记录/结构,但唯一相关的区别是运行时调度,这只是一种处理运行时决策的声明方式,可以通过其他方式处理。

面向对象的编程与更大规模的设计模式等更相关 - 而算法与涉及少量(通常只有一个)过程的较小规模更相关。

答案 1 :(得分:5)

IMO算法与OO或PP问题存在分离。

在设计时或程序性能方面,OO或PP都“慢”,它们是不同的方法。

答案 2 :(得分:4)

我认为Functional Programming会产生更清晰的算法实现。

话虽如此,无论采取什么方法,你都不应该看到太大差异。算法可以用任何语言或开发范例表示。

更新 :(以下评论)

显然,功能编程有助于实现算法以及我认为可能。它还有其他优点,为了完整起见,我大多提到它,因为这个问题只提到了OOP(面向对象编程)和PP(程序编程)。

答案 3 :(得分:1)

薄弱环节可能是你的知识 - 什么语言&范式是你最舒服的。用那个

答案 4 :(得分:0)

用于设计,分析和开发:绝对是OOP。它是为了设计师和开发人员的利益而庄严发明的。 对于程序运行时执行:有时PP更有效,但编译器通常将OOP简化为普通PP,使它们等效。

答案 5 :(得分:0)

差异(执行时间)最多只是边际。

请注意,有一个比纯粹性能更重要的因素:OOP为程序员提供了更好的组织代码的方法,从而使程序结构良好,易于理解,更可靠(更少的错误)。

答案 6 :(得分:0)

我的猜测是差异不足以担心,时间限制应该允许使用较慢的语言,因为使用的算法将是重要的。 当存在O(n log n)

时,I​​MO的目的应该是让你避免使用例如O(n 3 )算法

答案 7 :(得分:0)

面向对象编程从程序员中抽象出许多低级细节。它的设计目标是

  • 使编写和阅读(和理解)程序更容易
  • 使程序看起来更接近现实世界(因此更容易理解)。

程序编程没有很多抽象,如对象,方法,虚函数等。

所以,谈论速度:一位经验丰富的专家,他知道面向对象系统如何工作的内部可以编写一个运行速度相同的程序。

话虽如此,使用PP而不是OOP所获得的速度优势将非常微不足道。它归结为你可以舒适地编写程序的方式。


编辑:

我想到了一个有趣的轶事:在Microsoft基础类中,使用看起来像BEGIN_MESSAGE_MAP()和END_MESSAGE_MAP()的宏来实现从一个对象传递到另一个对象的消息,原因是它比使用它更快虚函数。

这是图书馆开发人员使用OOP的一个案例,但却故意避免了性能瓶颈。

答案 8 :(得分:0)

为了使代码编写简单且不易出错,您需要一种支持泛型的语言 - 例如带有STL的C ++或带有Java Collections Framework的Java。如果你在截止日期前实现一个算法,你可以通过不为你的算法提供一个漂亮的O-O或Generic接口来节省时间,所以让你自己编写的代码完全是程序化的。

对于运行时效率,你可能最好在程序C中编写所有内容 - 参见例如“编程实践”中的例子 - 但写作需要更长的时间,你更容易犯错误。这也假设您需要的所有构建块都是最新的,并且在程序C中也是有效的,这是现在的假设。最有可能使用STL或JFC实际上可以节省你的CPU时间和开发时间。

至于函数式语言,我记得听过函数式编程爱好者指出他们的语言比竞争对手更容易使用,然后观察那些选择函数式语言的那些成员在写作时仍然在苦苦挣扎Fortran 77已经完成并继续绘制他们程序性能的图表。我看到功能编程社区的主张没有改变。我不知道潜在的现实是否已经存在。

答案 9 :(得分:0)

Steve314说得很好。 OOP更多的是关于大型应用程序的设计模式和组织。它还可以让您更好地处理未知数,这对用户应用程序非常有用。但是,为了分析算法,您很可能会在功能上思考您想要做什么。在这种情况下,当你关心算法的时候,我会坚持使用更简单的PP而不是尝试创建一个完全的OO设计。我想使用C或Matlab(取决于算法的数学密集程度)。只是我对它的看法。

答案 10 :(得分:0)

我曾经调整了Knuth-Morris-Pratt字符串搜索算法,这样我就可以拥有一个可以一次获取一个字符并返回匹配/不匹配状态的对象。这不是一个简单的翻译。