23

我想请您向我提供一些文章(可能是书籍),您可能会发现这些文章非常有说服力地批评 OOP 方法。

我已经在 WWW 上阅读了一些关于这个主题的内容,但我并没有真正找到“明确的消极因素”。

这与我对 OOP 的个人态度无关,但我真的很想为任何类型的讨论和抽象思维提供一些建设性的、严谨的基础。


您也可以发布一些原创研究,但请非常有建设性(作为我的个人要求)。

4

11 回答 11

20

哪个版本的 OOP?艾伦凯的最初设想?它的混蛋现代形式完全没有抓住重点,因此用奇怪的访问控制、成员变量等阻碍了我们?以继承为中心?基于原型?组合 OOP?

每种形式的 OOP 都有其优点和缺点;它的拥护者和反对者;它的实用领域和无用领域。OOP 没有什么神奇之处可以使它成为杀手范式,也没有什么魔力可以使它成为(程序员的)杀手范式。

我真的不能指出任何书籍或文章会扼杀我对作为银弹的 OOP 的兴趣(而不是我可以用来保持我的项目生存的许多技术之一)。但是,我可以指出对特定 OOP 品牌最有趣的批评: 史蒂夫·耶格 (Steve Yegge) 的经典作品“名词王国中的执行”

于 2010-03-09T14:10:56.900 回答
12

Rick Hickey 的《我们还在吗?》- 面向对象时间的解构让我大开眼界。这是我遇到的最合乎逻辑的 OO 批评。

于 2010-03-09T14:43:26.153 回答
9

如果您想批评 OO 编程,我建议您这样做:

  1. 学习 Smalltalk
  2. 学习二郎
  3. 学习计划

一旦你这样做了,你就会对 OO 编程的常见解释有很多批评。

(提示:OO 在许多方面旨在更接近于计算的 Actor 模型,但对它的常见解释实际上是对过程/结构化模型的修改)

于 2010-03-14T08:56:01.967 回答
4

问题是 - 大多数人并不真正了解面向对象编程,所以很多设计都很糟糕。

阅读 Scott Ambler 的作品,包括他的(现在已经很老了)Building Object Applications That Work。这让不少人大开眼界。

于 2010-03-09T14:01:32.260 回答
3

也许不是您想要的,但请查看 IEEE 软件杂志的 1 月/2 月刊:面向对象的分析:它只是理论吗?. 基本结论是,OOA 没有提供良好的成本/收益比,因此利用率很低。

鉴于 OOA 在“现实世界”中没有得到有效利用或支持,我怀疑对于较大的开发项目,整个系统架构、部署的对象模型和类层次结构最终都不是最理想的,并且被各个部分理解(实现)知之甚少。开发团队。同一期刊中的第二篇文章:导致 Java 运行时膨胀的四大趋势指出了一些常见的 OOP 问题,这些问题有损于部署大容量 Java (OOP) 系统。本文中的观察可能适用于大多数高度架构的 OOP 应用程序。

不要把这看作是对 OO 的抨击,它只是反映了作为软件从业者,我们在开发更好的人与人之间的沟通机制以传达高度复杂和抽象的过程模型方面还有很多工作要做。

于 2010-03-09T14:41:51.600 回答
2

http://cat-v.org has a great page on Object Oriented Programming.

Most of the page consists of humorous but not terribly informative quotes. However, at the bottom of the page are a number of links to articles challenging OOP. They are:

If you are interested in alternatives to Object-Oriented Programming:

  • cat-v.org. From their 'about' page: Cat-v.org hosts a series of sites dedicated to diverse subjects that share an idiosyncratic intellectual perspective, questioning orthodoxy and fomenting elitism and high standards in topics from software design to politics, passing by art and journalism and anything else interesting.

  • Structure and Interpretation of Computer Programs. Specifically teaches functional programming. Available free online here, for sale here. I cannot recommend this highly enough. It is absolutely revolutionary. It will change the way you think.

  • Any and all writings/videos/lectures by Rob Pike and Steve Yegge. Of particular interest is Yegge's Whirlwind Languages Tour.

于 2013-06-09T04:48:50.557 回答
2

当您用自然语言定义流程时。您使用句子来定义将对一个或多个对象执行操作的主体

唯一的固定点是动作,即句子的谓词。

我不认为将动作分配给对象是一个好主意。动词只有一个,但可以是多个名词。

在 OOP 中,您至少可以通过 3 种方式编写文件:

file.write(data);

或者

data.writeToFile(file);

或者

OperatingSystem.write(file, data);

哪个对象应该实现该方法?你也需要考虑这一点。在程序上,你可能会写

write(file, data);

您唯一需要考虑的是操作数的顺序,这通常无关紧要。

(好吧,文件和数据可能不是最好的例子,但你可能明白了这一点)

于 2012-07-26T16:13:50.327 回答
2

你真的应该看看B. Jacobs 先生的:

OOP 神话被揭穿

(也称为 OOP 超卖。)

于 2010-03-09T14:02:50.293 回答
1

我建议学习不同的编程范式或阅读特定范式的专业参数(http://www.info.ucl.ac.be/~pvr/VanRoyChapter.pdf)。除了 OOP,我认为使用最广泛的是函数式范式(搜索“为什么函数式编程很重要”),但也可以看看其他的。当您开始从不同的角度看待编程时,OOP 的缺陷开始自动出现。

简单练习:定义对象 IPerson、CMale 和 CFemale 并实现方法“sex”和“reproduce”。

于 2011-11-21T17:17:27.713 回答
0

steve yegge在 java 风格 OO的名词王国里的处决怎么样

于 2010-03-09T14:29:19.567 回答
-1

面向对象设计模式的 Gideon 圣经,恰当地命名为Design Patterns。我读过的最好的软件设计书籍之一。

于 2010-03-09T14:25:12.547 回答