为什么 ARC 不是特别面向对象的
Original2001 年 1 月
目前,人们对面向对象编程有一种狂热,但是我认识的一些最聪明的程序员却对此最不感兴趣。
我个人认为,面向对象编程在某些情况下是一种有用的技术,但它并不是你编写的每个程序都必须具备的技术。你应该能够定义新类型,但你不应该将每个程序都表达为新类型的定义。
我认为人们喜欢面向对象编程有五个原因,其中有三个半是坏的:
如果您拥有一种没有词法闭包或宏的静态类型语言,那么面向对象编程将令人兴奋不已。在某种程度上,它提供了一种绕过这些限制的方法。(请参阅Greenspun 的第十条规则。)
面向对象编程在大公司中很流行,因为它适合他们编写软件的方式。在大公司中,软件往往由庞大(且经常更换)的平庸程序员团队编写。面向对象编程对这些程序员施加了纪律,以防止他们中的任何一个人造成太大的破坏。代价是生成的代码充斥着协议并且充满重复。对于大公司来说,这不是太高的代价,因为他们的软件无论如何都可能变得臃肿和充满重复。
面向对象编程会产生很多看似工作的东西。在 fanfold 时代,有一类程序员只会在一页纸上写五到十行代码,前面是二十行精心格式化的注释。面向对象编程对这些人来说就像破解一样:它让你可以将所有这些脚手架直接合并到源代码中。Lisp 黑客可以通过将符号推送到列表中来处理的东西变成了整个类和方法文件。因此,如果你想说服自己或其他人你正在做很多工作,它是一个很好的工具。
如果一种语言本身就是面向对象程序,那么用户可以对其进行扩展。也许吧。或者,也许您可以做得更好,只需提供面向对象编程的子概念即可。例如,重载本质上与类没有关系。我们拭目以待。
面向对象的抽象巧妙地映射到某些特定类型的程序的领域,例如模拟和 CAD 系统。
我个人从来不需要面向对象的抽象。Common Lisp 有一个非常强大的对象系统,但我从来没有用过它。我做过很多事情(例如,制作充满闭包的哈希表),这些事情在较弱的语言中需要面向对象的技术才能完成,但我从来没有使用过 CLOS。
也许我只是太笨了,或者只开发过一些有限的应用程序子集。根据自己的编程经验设计语言是有危险的。但似乎更危险的是,因为人们认为这是一个好主意而把根本不需要的东西放进去。