我想请你向我提供一些文章(也许是书籍),你可能会发现这些文章非常有说服力地批评OOP方法。
我已经在WWW上读过一些关于这个话题的内容,但我并没有真正找到“明确的消极因素”。
我个人对OOP的态度并不多,但我真的希望为任何讨论和抽象思维提供建设性,严谨的基础。
您也可以发布一些原创性研究,但请非常有建设性(根据我的个人要求)。
答案 0 :(得分:20)
哪个版本的OOP? Alan Kay最初的愿景?它的混淆现代形式完全忽略了这一点,从而使我们陷入奇怪的访问控制,成员变量等等?传承为中心?基于原型?成分OOP?
每种形式的OOP都有其优点和缺点;它的拥护者和批评者;它的实用领域和无用领域。 OOP并没有什么神奇之处使它成为杀手范式,并且没有什么可以让它成为杀手(程序员)范式。
我无法真正指出任何使我对OOP感兴趣的书籍或文章作为Silver Bullet(而不是我可以用来保持我的项目可生存的众多技术之一)。我可以指出对特定品牌OOP的最有趣的批评:Steve Yegge's classic "Execution in the Kingdom of Nouns"。
答案 1 :(得分:12)
Rick Hickey的Are We There Yet ? - A Deconstruction of Object Oriented Time让我大开眼界。这是我遇到的最合乎逻辑的OO批评。
答案 2 :(得分:9)
如果你想批评OO编程,这就是我的建议:
一旦你完成了这一点,你就会对OO编程的共同解释有很多批评。
(提示:OO在许多方面旨在更接近于Actor计算模型,但对它的通用解释实际上是对程序/结构化模型的修改)
答案 3 :(得分:4)
问题是 - 大多数人并不真正了解面向对象编程,所以很多设计都是SUCK。
阅读Scott Ambler的作品,包括他的(现在很老) Building Object Applications That Work 。这让很多人大开眼界。
答案 4 :(得分:3)
也许不是你想要的,但看看IEEE软件杂志的1月/ 2月刊:Object-Oriented Analysis: Is It Just Theory?。基本结论是OOA没有提供良好的成本/效益比,因此利用率很低。
鉴于OOA未在“现实世界”中得到有效利用或支持,我怀疑对于较大的开发项目,整个系统架构,部署的对象模型和类层次结构最终都是次优的,并且很难理解(实现)开发团队的各个部分。同一期刊中的第二篇文章:Four Trends Leading to Java Runtime Bloat指出了一些常见的OOP问题,这些问题有损于部署高容量Java(OOP)系统。本文中的观察结果可能适用于大多数高度架构的OOP应用程序。
不要把它当作OO抨击,它只是反映出作为软件实践者,我们在开发更好的人对人沟通机制以传达高度复杂和抽象的流程模型方面还有很多工作要做。
答案 5 :(得分:2)
答案 6 :(得分:2)
使用自然语言定义流程时。您可以使用句子来定义主题,他们将在一个或多个对象上执行操作 。
唯一的修复点是动作,即句子的谓词。
我不认为为对象分配动作是个好主意。 只有一个动词,但可以是多个名词。
在OOP中,您可以至少以3种方式编写文件:
file.write(data);
或
data.writeToFile(file);
或
OperatingSystem.write(file, data);
哪个对象应该实现该方法?你也需要考虑这个问题。 虽然在程序上,你可能会写
write(file, data);
你唯一需要考虑的是操作数的顺序,这通常无关紧要。
(好的文件和数据可能不是最好的例子,但你可能会看到这一点)
答案 7 :(得分:2)
http://cat-v.org在Object Oriented Programming上有一个很棒的页面。
该页面的大部分内容都是幽默但不太引人注目的引用。但是,在页面底部有许多链接到挑战OOP的文章。他们是:
如果您对面向对象编程的替代方案感兴趣:
cat-v.org。来自他们的“关于”页面: Cat-v.org拥有一系列致力于不同主题的网站,这些网站具有独特的知识观,质疑正统和煽动精英主义以及从软件设计到政治,通过艺术的主题的高标准和新闻以及其他任何有趣的事情。
计算机程序的结构和解释。具体教授函数式编程。可在线免费here,待售here。我不能高度推荐这个。这绝对是革命性的。它会改变你的想法。
Rob Pike 和 Steve Yegge 的所有文章/视频/讲座。特别感兴趣的是Yegge的Whirlwind Languages Tour。
答案 8 :(得分:1)
我建议学习不同的编程范例或阅读特定范例的专业论证(http://www.info.ucl.ac.be/~pvr/VanRoyChapter.pdf)。除了OOP之外,我认为最广泛使用的是功能范例(搜索f.e.“为什么函数式编程很重要”),还要看看其他的。当您从不同的角度开始研究编程时,OOP的缺陷开始自动出现。
简单练习:定义对象IPerson,CMale和CFemale,并实现“性”和“复制”方法。
答案 9 :(得分:0)
答案 10 :(得分:-1)
基于面向对象设计模式的基甸圣经,恰当地命名为Design Patterns。我读过的最好的软件设计书籍之一。