在我读过的唯一一篇开发博客中,那个 Joel-On-Software-Founder-of-SO 的人很久以前就读到过,OO 不会导致生产力提高。自动内存管理可以。凉爽的。谁能否认数据?
我仍然相信 OO 之于非 OO 就像函数编程之于内联编程一样。
(我应该知道,因为我从 GWBasic 开始。)当您重构代码以使用函数时,
variable2654
就变成
variable3
了您所处的方法。或者,更好的是,它有一个您可以理解的名称,
如果函数很短,它被称为
value
并且足以完全理解。
当没有函数的代码变成有方法的代码时,你可以删除数英里的代码。
当您将代码重构为真正的 OO 时,b
, c
, q
, 并Z
成为this
, this
,this
和this
. 而且由于我不相信使用this
关键字,因此您可以删除数英里的代码。实际上,即使您使用this
.
我不认为OO是自然的比喻。
我也不认为语言是一种自然的隐喻,我也不认为 Fowler 的“气味”比说“这段代码味道不好”更好。也就是说,我认为 OO 不是关于自然隐喻的,那些认为
对象只是突然出现在你身上的人基本上没有抓住重点。
您定义了对象宇宙,更好的对象宇宙导致代码更短、更容易理解、工作得更好,或者所有这些(以及我忘记的一些标准)。我认为使用客户/域的自然对象作为编程对象的人正在失去重新定义宇宙的能力。
例如,当您使用航空公司预订系统时,您所说的预订可能根本不符合法律/商业预订。
一些基本概念是非常酷的工具
我认为大多数人都夸大了“当你有一把锤子时,它们都是钉子”。我认为硬币/镜子的另一面也是如此:当您拥有像多态性/继承这样的小工具时,您就会开始找到它适合的用途,例如手套/袜子/隐形眼镜。OO的工具非常强大。我认为,单继承绝对有必要让人们不要得意忘形,我自己的
多继承软件无法承受。
OOP 的意义何在?
我认为这是处理绝对庞大的代码库的好方法。我认为它可以让你组织和重新组织你的代码,并为你提供一种语言来做到这一点(超越你正在使用的编程语言),并以一种非常自然且易于理解的方式模块化代码。
OOP注定会被广大开发者误解
这是因为它是一个像生活一样令人大开眼界的过程:随着经验的积累,您越来越了解 OO,并开始避免某些模式并随着您变得更聪明而采用其他模式。最好的例子之一是您停止对您无法控制的类使用继承,而是更喜欢
Facade模式。
关于你的小论文/问题
我确实想说你是对的。在大多数情况下,可重用性是一个白日梦。这是 Anders Hejilsberg 关于该主题(精彩)的引述:
如果你让初级程序员写一个日历控件,他们通常会想,“哦,我要写世界上最好的日历控件!它的日历类型将是多态的。它会有显示器,还有芒格,还有这个,那个,还有那个。” 他们需要在两个月内交付日历应用程序。他们把所有这些基础设施都放在了控件中,然后花了两天时间在上面写了一个糟糕的日历应用程序。他们会想,“在应用程序的下一个版本中,我会做更多的事情。”
然而,一旦他们开始考虑他们将如何实际实现他们抽象设计的所有其他具体化,结果证明他们的设计是完全错误的。而现在他们已经把自己画到了一个角落里,他们不得不把整个事情都扔掉。我一遍又一遍地看到这一点。我坚信极简主义。除非您真的要解决一般问题,否则不要尝试建立一个框架来解决特定问题,因为您不知道该框架应该是什么样子。