代码之家  ›  专栏  ›  技术社区  ›  B.Gen.Jack.O.Neill

初学者OOP问题

  •  16
  • B.Gen.Jack.O.Neill  · 技术社区  · 14 年前

    我只想问两个关于OOP的问题。

    第二,如果OOP代码在其机器代码形式中使用不同的方法,那么它是比过程性代码慢还是快?谢谢。

    8 回复  |  直到 14 年前
        1
  •  7
  •   Sjoerd    14 年前

    首先,不是的。对于编译成本地机器代码的语言,这当然是正确的。毕竟,程序集和机器代码没有对象的概念。

    对于在虚拟机(如Java或C)中运行的语言,这是部分正确的。在这里,VM可能支持一些特定于对象的特性。

    可以用非面向对象语言编写OOP,反之亦然。OOP主要对程序员有用,它施加的限制(例如,不能从另一个类访问私有方法)由编译器检查,但不会在输出中传递。

    第二,OOP和procedural没有性能差异。只是代码和数据位于代码中的不同位置。

        2
  •  3
  •   Piskvor left the building Rohit Kumar    14 年前

    这在很大程度上取决于您试图实现的实际算法,以及编译器(在过去的几年中,编译器已经变得非常聪明)。编译后的代码肯定不会完全相同,甚至可能完全不同(同样,这取决于您实现的算法)。实际上, 没关系 .

    另一个常常被忽视但至关重要的速度差异在于可维护性:在大多数情况下,计算机时间是廉价的;程序员时间是昂贵的。(这并不是说“编写臃肿软件”,而是说“三年后,当别人需要更新逻辑时,不要浪费一周的时间去弄清楚它是如何工作的”)

        3
  •  2
  •   Topera    14 年前

        4
  •  2
  •   Matthew Perron    14 年前

    然而,任何理解不同OO原则的程序员都可以更轻松地阅读和理解OO代码,因为这样做很容易 不同复杂性的抽象 .

    读取、重用和维护 大多数时候 .

        5
  •  2
  •   hb2pencil    14 年前

    OOP通常并不比过程性的快/慢。考虑到最大的速度增益是通过选择有效的算法而不是优化单个指令来实现的,这其实并不重要。而基准往往太有争议,没有价值。

        6
  •  2
  •   Vivin Paliath    14 年前

    你必须认识到OOP是一种抽象或范例,它使程序员很容易解决问题。因此,这与效率没有任何实际关系。汇编代码通常有一部分用来描述或分配数据,另一部分用来编写程序代码。所以所有编译过的代码都以这种状态结束。

    这种范式基本上与效率没有关系,但当然,有些语言在某些环境中效率更高。C、 例如,在嵌入式环境中执行得非常好。最终目的是为工作选择合适的工具。例如,我相信你可以用脑筋 ck写嵌入式代码,但脑筋

        7
  •  0
  •   Yanick Rochon    14 年前

    在效率和可维护性之间总是有一些折衷。

    虽然过程可能执行得更快(虽然不一定很明显,而且这都是相对的……),但您不能真正用过程代码来创建可伸缩的项目。OOP的目的不是优化应用程序的性能,而是帮助开发人员用编程语言解决实际问题。由于应用程序需要越来越复杂的用户界面、业务模型,并且往往具有更长的生命周期,OOP是一种非常适合当今每个项目的解决方案。

        8
  •  0
  •   jelford    14 年前

    实际上,通常面向对象的代码会导致(非常)慢一些。原因是对象和类有开销——即使实际的代码变成了过程性的,仍然有“东西”在后台进行。C和C++的比较可以在这里找到:

    http://unthought.net/c++/c_vs_c++.html

    虽然有点旧,但仍然很有效。然而,在大多数情况下,速度提升不值得编写代码所需的额外时间——这是一个非常极端的例子,记住C是一种非常低级的语言;实际上,我不知道在任何其他语言中,在直接速度测试中都会如此全面地击败C++。

    还要注意的是,写得不好的过程代码几乎总是比写得好的OO代码慢(我想有人已经提到过这一点)。