Loading...

为什么 ARC 并不是特别面向对象

Original

2001年1月

目前对面向对象编程有一种狂热,但我认识的一些最聪明的程序员对它并不特别兴奋。

我个人的感觉是,面向对象编程在某些情况下是一种有用的技术,但它并不是每个程序都必须渗透的东西。你应该能够定义新类型,但你不应该必须将每个程序都表达为新类型的定义。

我认为人们喜欢面向对象编程有五个原因,其中三个半是坏的:

如果你有一种没有词法闭包或宏的静态类型语言,面向对象编程是令人兴奋的。在某种程度上,它提供了一种绕过这些限制的方法。(参见Greenspun的第十条规则。)

面向对象编程在大公司中很受欢迎,因为它适合他们编写软件的方式。在大公司中,软件往往是由大型(且经常变化的)平庸程序员团队编写的。面向对象编程对这些程序员施加了一种纪律,防止他们中的任何一个造成过多的损害。代价是,结果代码充斥着协议和重复。这对大公司来说代价并不算高,因为他们的软件可能本来就会臃肿且充满重复。

面向对象编程产生了很多看起来像工作的东西。在风琴纸的时代,有一种程序员只会在一页上放五到十行代码,前面加上二十行精心格式化的注释。面向对象编程对这些人来说就像是毒品:它让你将所有这些支架直接融入你的源代码中。一个 Lisp 黑客可能通过将一个符号推入一个列表来处理的事情,变成了一整文件的类和方法。因此,如果你想说服自己或其他人你正在做很多工作,它是一个好工具。

如果一种语言本身就是一个面向对象的程序,它可以被用户扩展。好吧,也许。或者你可以通过提供面向对象编程的子概念来做得更好。例如,重载并不与类本质上相关。我们拭目以待。

面向对象的抽象与某些特定类型程序的领域(如仿真和 CAD 系统)完美映射。

我个人从未需要过面向对象的抽象。Common Lisp 有一个功能强大的对象系统,但我从未使用过一次。我做了很多事情(例如,制作充满闭包的哈希表),在更弱的语言中需要使用面向对象的技术,但我从未需要使用 CLOS。

也许我只是愚蠢,或者只在某些有限的应用子集上工作。基于个人编程经验设计语言是有危险的。但似乎更危险的是加入你从未需要过的东西,因为人们认为这是个好主意。