Ara*_*raK 34 language-agnostic oop
两年前我开始上大学,从那时起我一直听到"先设计你的课程".我有时会问自己,如果我的解决方案首先应该是一堆对象!有人说你没有看到它的好处,因为你的代码库非常小 - 大学项目.项目规模的借口只是不要沮丧.如果解决方案适合项目,我相信它也应该是正确的项目的宏版本.
我并不是说OOP是坏的,我只是觉得它在课堂上被滥用,像我这样的学生日夜被告知OOP是正确的方式.
恕我直言,正确的答案不应该来自教授,我更愿意从现场的真正工程师那里听到.
OOP总是正确的方法吗?
OOP何时是最好的方法?
OOP什么时候不好?
这是一个非常普遍的问题.我不是要求明确的答案,只是来自该领域的一些真实的设计经验.
我不关心表现.我在问设计.我知道这是现实生活中的工程.
================================================== ================================
感谢所有的贡献.我选择了Nosredna的答案,因为她总体上解决了我的问题,并且说服了我对以下内容的错误: 如果解决方案适合项目,我相信它应该是正确的项目的宏版本.
Nos*_*dna 81
这些教授的缺点在于,他们无法让你接受多年来一直在进行的大型,令人厌恶的课程,这些课程由许多不同的程序员进行.他们必须使用相当难以令人信服的玩具示例,并试图诱骗你看到更大的画面.
从本质上讲,他们不得不吓唬你相信当一个HO规模型火车撞到你时,它会撕裂你的腿.只有最有说服力的教授才能做到.
"如果解决方案适合项目,我相信它也应该是正确的项目的宏观版本."
那是我不同意的地方.一个小项目适合你的大脑.它的大版本可能不会.对我来说,OO的好处是隐藏了足够多的细节,以便大局仍然可以塞进我的脑海.如果您缺少OO,您仍然可以管理,但这意味着找到隐藏复杂性的其他方法.
密切关注真正的目标 - 生成可靠的代码.OO在大型程序中运行良好,因为它可以帮助您管理复杂性.它还可以帮助重用.
但OO不是目标.好的代码是目标.如果程序方法有效并且永远不复杂,那么你就赢了!
Yis*_*hai 17
OOP是一个真实世界的计算机概念,大学将被遗弃在课程之外.申请工作时,您应该熟悉工作.
话虽如此,速度jalf,OOP主要是作为管理复杂性的一种方式.由一两个学生写的关于家庭作业时间的大学项目对于像这样的大型项目来说不是一个现实的设置,所以这些例子感觉(并且是)玩具的例子.
此外,重要的是要意识到并非每个人都以同样的方式看待OOP.有些人看到它关于封装,并创建非常复杂的巨大类,但隐藏他们的状态与任何外部调用者.其他人希望确保给定的对象只负责做一件事并制作很多小班.一些人寻求密切反映现实世界中的对象模型抽象,该计划试图涉及到,别人看到的对象模型如何组织的问题的技术架构,而不是现实世界的商业模式.OOP 没有一种真正的方式,但它的核心是作为一种管理复杂性和保持较大程序随时间更易维护的方式而引入的.
Dav*_*ble 13
当您的数据可以很好地构建到对象中时,OOP是正确的方法.
例如,对于处理来自传感器的输入字节流的嵌入式设备,可能没有太多可以清楚地客观化的内容.
此外,在ABSOLUTE对性能的控制至关重要(每个周期都很重要)的情况下,OOP方法可能会带来可能对计算不重要的成本.
在现实世界中,大多数情况下,您的问题可以用对象非常好地描述,尽管泄漏抽象法则不应该被遗忘!
在大多数情况下,行业通常会解决使用正确工具的问题,您可以在很多地方看到OOP.通常会针对高性能和低级别进行例外处理.当然,没有严格的规则.
如果你坚持足够长的时间,你可以用螺丝锤击......
Ore*_*ner 11
我的5美分:
OOP只是更大模式的一个例子:通过将大问题分解为较小的问题来处理复杂性.我们虚弱的思想仅限于他们在任何特定时间都可以处理的少量想法.即使是中等规模的商业应用程序也有比大多数人可以完全保持一个完整的心理图像更多的移动部件.软件工程中一些比较成功的设计范例充分利用了处理复杂性的概念.无论是最新的建筑成层,你的程序成模块,这样做的动作功能细分,采用预制组件,利用独立的网络服务,或者您的问题和解决方案的空间识别对象和类.这些都是驯服复杂的野兽的工具.
OOP在几类问题上特别成功.当你可以从"事物"和它们之间的相互作用来思考问题时,它运作良好.当您处理数据,用户界面或构建通用库时,它可以很好地工作.这些类别的应用程序的普及有助于使OOP无处不在.其他类别的问题需要其他或其他工具.操作系统区分内核和用户空间,并部分隔离进程以避免复杂性蠕变.函数式编程使数据不可变,以避免多线程发生的依赖关系网格.既不是经典的OOP设计,但它们在自己的领域中至关重要且成功.
在您的职业生涯中,您可能会面临比您自己完全解决的问题和系统更大的问题.您的老师不仅试图为您提供目前的交易工具.他们试图表达,当您尝试模拟现实世界的问题时,可以使用模式和工具.为您的工具箱积累一系列工具并为工作选择合适的工具符合您的最佳利益.OOP是一个强大的工具,但到目前为止还不是唯一的工具.
不...... OOP并不总是最好的方法.
(确实)当您的问题最好被建模为一组可以通过相互通信/使用来实现目标的对象时,OOP设计是最好的方法.
好问题......但我猜测科学/分析应用可能是最好的例子.他们的大多数问题最好通过函数式编程而不是面向对象编程来实现.
......话虽如此,让火焰开始吧.我确信有漏洞,我很想知道为什么.
OOP总是正确的方法吗?
不.
当OOP是最好的方法?
当它帮助你.
当OOP是一个糟糕的方法?
当它阻碍你.
这真的是特定的.有时你不需要OOP,有时它不能用你正在使用的语言,有时候它确实没有区别.
我会说这个,但是当谈到技术和最佳实践时,继续仔细检查你的教授告诉你什么.仅仅因为他们是老师并不意味着他们是专家.
将OOP的P视为原则而不是编程可能会有所帮助.无论您是否将每个域概念都表示为对象,主要的OO原则(封装,抽象,多态)在解决特定问题方面都非常有用,尤其是在软件变得更复杂时.拥有可维护代码比在"纯"对象层次结构中表示所有内容更重要.