什么时候应该而且不应该为了速度/性能而脱离OOP?

Tom*_*m R 3 java oop performance android

在他们的Android开发者文章中,Google声明你应该通常使用getter和setter来声明公共变量而不是私有变量来增强嵌入式设备的性能(我认为函数调用比写入地址更昂贵).

我想知道 - 在多大程度上应该牺牲性能来坚持OOP范式?在其他情况下,优化是否意味着脱离"良好"的编码实践?

Dea*_*n J 15

将其构建为可维护的,然后将其破解为更快.

如果你从hack开始 - 你可能不需要 - 维护通常是一场噩梦.


Ben*_*n S 7

只要性能没有受到明显影响,就应该使用适当的抽象.

过早优化令人尴尬.

  • -1,这与感知表现无关.一次,这个规则不适用:我们在嵌入式设备上,每个功能调用都会吸收电池寿命.Google团队本身建议大力关注此问题. (3认同)

Joe*_*bel 6

当公司发表类似的陈述时,我讨厌它,但不提供统计数据来量化问题.

这就是说:权衡并不是OO范式.如果你同时拥有get和set,并且这是类设计的固有部分,那么从OO的角度来看,将变量设置为public是完全有效的.如果性能提升足够重要,我会在这些情况下公开变量,但不会.

  • 要求量化其断言的+1.在性能方面,经验法则是移动目标.我想知道,如果方法是最终的,那么编译器是否会内联调用? (2认同)

Bry*_*anD 6

从某种意义上说,我认为这取决于性能对您的应用程序的重要程度,以及您通过使用您可能不会认为"好"的编码实践看到的性能提升程度.但话虽如此,我总是鼓励开发人员不要坚持教条并继续以同样的方式编写代码,因为这是你教授的方式是"正确的".如果你很好地记录代码并使用一致且可解释的编码实践,那么我认为做一些可能不适合"OOP范例"的事情是完全正确的.最后,它是关于可维护的工作代码.


Lau*_*ves 5

一般而言,所有形式的工程都是处理权衡的问题.您需要将一种方法的成本与另一种方法的成本进行比较.

以牺牲其他任何东西为代价来牺牲可维护性总是很棘手,因为很容易低估不可维护代码的未来成本.

"程序优化的第一条规则:不要这样做.程序优化的第二条规则(仅限专家!):不要这样做." - Michael A. Jackson

也就是说,有一些论点认为拥有访问器的好处实际上非常小.有多少次你曾经用一种实际做某事的方法替换一个只读/写一个字段的getter或setter?鉴于这在实践中似乎有多么罕见,人们可能会争辩说,使用访问器是"过早的悲观化".