Language agnostic OOP在大学里被滥用了吗?
我两年前开始上大学,从那以后我一直听到“先设计你的课程”。有时我真的会问自己,我的解决方案应该首先是一堆对象吗!有人说你看不到它的好处,因为你的代码库非常小——大学项目。这个项目规模的借口实在让我难以接受。如果该解决方案与该项目配合得很好,我相信它也应该与该项目的宏版本配合得很好 我并不是说OOP不好,我只是觉得它在教室里被滥用,像我这样的学生日夜被告知OOP是正确的方式 我知道,正确的答案不应该来自教授,我更喜欢从这个领域的真正工程师那里听到 OOP始终是正确的方法吗? 什么时候OOP是最好的方法? 什么时候OOP是一种糟糕的方法? 这是一个非常普遍的问题。我不是在要求明确的答案,只是一些来自该领域的真实设计经验 我不在乎表现。我在问有关设计的问题。我知道这是现实生活中的工程 ================================================================================== 感谢所有的贡献。我选择了Nosredna回答,因为她回答了我的问题,让我相信我在以下方面是错的:Language agnostic OOP在大学里被滥用了吗?,language-agnostic,oop,Language Agnostic,Oop,我两年前开始上大学,从那以后我一直听到“先设计你的课程”。有时我真的会问自己,我的解决方案应该首先是一堆对象吗!有人说你看不到它的好处,因为你的代码库非常小——大学项目。这个项目规模的借口实在让我难以接受。如果该解决方案与该项目配合得很好,我相信它也应该与该项目的宏版本配合得很好 我并不是说OOP不好,我只是觉得它在教室里被滥用,像我这样的学生日夜被告知OOP是正确的方式 我知道,正确的答案不应该来自教授,我更喜欢从这个领域的真正工程师那里听到 OOP始终是正确的方法吗? 什么时候OOP是最好的
如果该解决方案适合该项目,我相信它也应该适合该项目的宏版本。当您的数据可以很好地结构化为对象时,OOP是正确的方法 例如,对于正在处理来自传感器的传入字节流的嵌入式设备,可能没有太多可以明确对象化的内容 此外,在对性能的绝对控制非常关键的情况下(当每个周期都计数时),OOP方法可能会引入一些成本,这些成本对于计算来说可能并不重要 在现实世界中,大多数情况下,你的问题可以很好地用对象来描述,但千万不要忘记 工业界通常最终决定,在大多数情况下,使用正确的工具来完成这项工作,并且您可以在许多地方看到OOP。对于高性能和低级别的应用程序,通常会有例外。当然,没有硬性规定 如果你坚持足够长的时间,你可以把螺丝钉钉进去
…话虽如此,让火焰开始吧。我确信存在漏洞,我很想了解原因。面向对象编程通常是一种很好的方法,但它确实会带来一定的开销,至少在概念上是这样。例如,我不为小程序做OO。然而,这确实是你需要学习的东西,所以我可以看到在大学里的小项目需要它 如果我必须做认真的计划,我会使用OOP。如果没有,我不会
这是针对我一直在做的问题类(包括建模、一些游戏和一些随机的事情)。其他领域可能会有所不同,但我没有相关经验。我看到了在向系统添加新功能或维护/改进系统时使用OOP的一些最佳效果。不幸的是,在上大学的时候获得这样的经历并不容易 OOP总是正确的方法吗 没有 什么时候OOP是最好的方法 当它帮助你的时候 当OOP是一种糟糕的方法时 当它阻碍你的时候 这是非常具体的。有时候你不需要OOP,有时候它在你使用的语言中不可用,有时候它真的没有什么区别
不过,我要说的是,当涉及到技术和最佳实践时,我们会继续仔细检查你们的教授告诉你们的内容。仅仅因为他们是老师并不意味着他们是专家。我还没有在这个行业从事一个项目,它不是功能性和面向对象的结合。这实际上取决于你的需求以及对他们来说什么是最好的(也许是最便宜的?)解决方案。教授们的缺点是,他们不能让你参与由许多不同的程序员编写的、持续数年的大型、讨厌的程序。他们不得不用一些不太令人信服的玩具例子,试图欺骗你,让你看到更大的图景 从本质上说,他们必须吓唬你,让你相信当一辆高轨模型火车撞到你时,它会把你的腿撕得干干净净。只有最有说服力的教授才能做到这一点
“如果该解决方案与该项目相匹配,我相信它也应该与该项目的宏版本相匹配。” 这就是我不同意的地方。一个小项目适合你的大脑。它的大版本可能不会。对我来说,OO的好处是隐藏了足够多的细节,这样大局图仍然可以塞进我的脑海。如果缺少OO,您仍然可以管理,但这意味着找到其他方法来隐藏复杂性 关注真正的目标——生成可靠的代码。OO在大型程序中运行良好,因为它可以帮助您管理复杂性。它还可以帮助实现可重用性
但OO不是目标。好的代码是目标。如果一个程序化的方法有效并且从不变得复杂,那么你就赢了 我的经验是,OOP在小规模上最有用——定义具有特定行为的类,并维护许多不变量。然后我基本上只是将其作为另一种数据类型用于泛型或函数