OOP有什么意义?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (32)

据我所知,尽管在OOP教育,语言和工具方面花费了数百万甚至数十亿,但OOP并没有提高开发人员的生产力或软件可靠性,也没有降低开发成本。很少有人使用面向对象的严格意义(很少有人坚持或理解LSP等原理); 人们似乎几乎没有一致或一致的方法来模拟问题领域。通常情况下,这个类只是用于它的语法糖; 它将记录类型的函数放入它们自己的小名字空间中。

我为各种应用程序编写了大量的代码。虽然有一些地方真正可替代的子类型在应用程序中扮演了重要角色,但这些都是非常特殊的。总的来说,尽管对“重用”的讨论给予了许多口头上的服务,但现实是,除非一段代码完全按照您希望的方式执行,否则几乎没有成本效益的“重用”。设计类是以正确的方式扩展是非常困难的,因此扩展的成本通常非常高,以至于“重用”根本不值得。

在很多方面,这并不令我感到意外。现实世界不是“OO”,OO中隐含的想法 - 我们可以用某些分类标准对事物进行建模 - 在我看来,它在根本上有缺陷(我可以坐在桌子,树桩,汽车发动机罩上,某人的膝盖 - 但不是其中之一 - 椅子)。即使我们转向更抽象的领域,面向对象建模往往很困难,违反直觉,并最终无益(考虑圆/椭圆或正方形/矩形的典型示例)。

那么我在这里错过了什么?OOP的价值在哪里,为什么所有的时间和金钱都无法让软件更好?

提问于
用户回答回答于

没有经验证据表明面向对象是人们思考世界的更自然的方式。在编程心理学领域有一些工作可以证明面向对象并不比其他方法更适合。

面向对象的表示看起来并不普遍更有用或更少用。 简单地采用面向对象方法并要求开发人员使用这些方法是不够的,因为这可能会对开发人员的生产力以及开发系统的质量产生负面影响。

这来自ACM Communications 2000年10月的“关于面向对象代表的可用性”。这些文章主要将面向对象与面向过程的方法进行比较。有很多关于如何使用面向对象方法的人“思考”的研究(Int。J. of Human-Computer Studies 2001,issue 54,或Human-Computer Interaction 1995,第10卷,OO研究的整个主题),从我所读到的内容来看,没有任何迹象表明面向对象方法具有某种自然性,这使得它比传统的程序方法更适合。

用户回答回答于

现实世界不是“OO”,OO中暗含的观点 - 我们可以用一些类分类法对事物建模 - 在我看来,这在根本上有缺陷

虽然这是事实,并且已被其他人观察到(采取STL的发明人斯捷潘诺夫),其余的都是无稽之谈。OOP可能存在缺陷,它当然不是银弹,但它使大规模应用程序变得更简单,因为它是减少依赖关系的好方法。当然,这只适用于“良好”的OOP设计。马虎设计不会带来任何好处。但是,使用面向对象的良好的解耦设计可以非常好地模拟,并且不能很好地使用其他技术。

有更好,更通用的模型,但这些模型往往更加复杂和/或难以有效实现。面向对象在极端情况下是一个很好的折衷。

扫码关注云+社区