Language agnostic OOP在大学里被滥用了吗?

Language agnostic OOP在大学里被滥用了吗?,language-agnostic,oop,Language Agnostic,Oop,我两年前开始上大学,从那以后我一直听到“先设计你的课程”。有时我真的会问自己,我的解决方案应该首先是一堆对象吗!有人说你看不到它的好处,因为你的代码库非常小——大学项目。这个项目规模的借口实在让我难以接受。如果该解决方案与该项目配合得很好,我相信它也应该与该项目的宏版本配合得很好 我并不是说OOP不好,我只是觉得它在教室里被滥用,像我这样的学生日夜被告知OOP是正确的方式 我知道,正确的答案不应该来自教授,我更喜欢从这个领域的真正工程师那里听到 OOP始终是正确的方法吗? 什么时候OOP是最好的

我两年前开始上大学,从那以后我一直听到“先设计你的课程”。有时我真的会问自己,我的解决方案应该首先是一堆对象吗!有人说你看不到它的好处,因为你的代码库非常小——大学项目。这个项目规模的借口实在让我难以接受。如果该解决方案与该项目配合得很好,我相信它也应该与该项目的宏版本配合得很好

我并不是说OOP不好,我只是觉得它在教室里被滥用,像我这样的学生日夜被告知OOP是正确的方式

我知道,正确的答案不应该来自教授,我更喜欢从这个领域的真正工程师那里听到

OOP始终是正确的方法吗?

什么时候OOP是最好的方法?

什么时候OOP是一种糟糕的方法?

这是一个非常普遍的问题。我不是在要求明确的答案,只是一些来自该领域的真实设计经验

我不在乎表现。我在问有关设计的问题。我知道这是现实生活中的工程

==================================================================================

感谢所有的贡献。我选择了Nosredna回答,因为她回答了我的问题,让我相信我在以下方面是错的:
如果该解决方案适合该项目,我相信它也应该适合该项目的宏版本。

当您的数据可以很好地结构化为对象时,OOP是正确的方法

例如,对于正在处理来自传感器的传入字节流的嵌入式设备,可能没有太多可以明确对象化的内容

此外,在对性能的绝对控制非常关键的情况下(当每个周期都计数时),OOP方法可能会引入一些成本,这些成本对于计算来说可能并不重要

在现实世界中,大多数情况下,你的问题可以很好地用对象来描述,但千万不要忘记

工业界通常最终决定,在大多数情况下,使用正确的工具来完成这项工作,并且您可以在许多地方看到OOP。对于高性能和低级别的应用程序,通常会有例外。当然,没有硬性规定

如果你坚持足够长的时间,你可以把螺丝钉钉进去

  • 不……OOP并不总是最好的方法

  • (一个真实的)OOP设计是最好的方法,当您的问题可以最好地建模为一组对象时,这些对象可以通过相互通信/使用来实现您的目标

  • 好问题…但我猜科学/分析应用程序可能是最好的例子。它们的大多数问题最好通过函数式编程而不是面向对象编程来解决


  • …话虽如此,让火焰开始吧。我确信存在漏洞,我很想了解原因。

    面向对象编程通常是一种很好的方法,但它确实会带来一定的开销,至少在概念上是这样。例如,我不为小程序做OO。然而,这确实是你需要学习的东西,所以我可以看到在大学里的小项目需要它

    如果我必须做认真的计划,我会使用OOP。如果没有,我不会


    这是针对我一直在做的问题类(包括建模、一些游戏和一些随机的事情)。其他领域可能会有所不同,但我没有相关经验。

    我看到了在向系统添加新功能或维护/改进系统时使用OOP的一些最佳效果。不幸的是,在上大学的时候获得这样的经历并不容易

    OOP总是正确的方法吗

    没有

    什么时候OOP是最好的方法

    当它帮助你的时候

    当OOP是一种糟糕的方法时

    当它阻碍你的时候

    这是非常具体的。有时候你不需要OOP,有时候它在你使用的语言中不可用,有时候它真的没有什么区别


    不过,我要说的是,当涉及到技术和最佳实践时,我们会继续仔细检查你们的教授告诉你们的内容。仅仅因为他们是老师并不意味着他们是专家。

    我还没有在这个行业从事一个项目,它不是功能性和面向对象的结合。这实际上取决于你的需求以及对他们来说什么是最好的(也许是最便宜的?)解决方案。

    教授们的缺点是,他们不能让你参与由许多不同的程序员编写的、持续数年的大型、讨厌的程序。他们不得不用一些不太令人信服的玩具例子,试图欺骗你,让你看到更大的图景

    从本质上说,他们必须吓唬你,让你相信当一辆高轨模型火车撞到你时,它会把你的腿撕得干干净净。只有最有说服力的教授才能做到这一点


    “如果该解决方案与该项目相匹配,我相信它也应该与该项目的宏版本相匹配。”

    这就是我不同意的地方。一个小项目适合你的大脑。它的大版本可能不会。对我来说,OO的好处是隐藏了足够多的细节,这样大局图仍然可以塞进我的脑海。如果缺少OO,您仍然可以管理,但这意味着找到其他方法来隐藏复杂性

    关注真正的目标——生成可靠的代码。OO在大型程序中运行良好,因为它可以帮助您管理复杂性。它还可以帮助实现可重用性


    但OO不是目标。好的代码是目标。如果一个程序化的方法有效并且从不变得复杂,那么你就赢了

    我的经验是,OOP在小规模上最有用——定义具有特定行为的类,并维护许多不变量。然后我基本上只是将其作为另一种数据类型用于泛型或函数