Featured image of post 为什么Arc不是特别面向对象

为什么Arc不是特别面向对象

探讨面向对象编程的优缺点,以及为什么Arc语言选择不特别强调面向对象特性。

📚 返回 Paul Graham 文章目录

为什么Arc不是特别面向对象

目前有一种面向对象编程的狂热,但它似乎在中等水平的程序员中达到顶峰。我认识的一些最聪明的程序员是对它最不感兴趣的人。

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

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

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

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

  3. 面向对象编程会产生很多看起来像工作的东西。回到折叠纸的时代,有一种程序员每页只写五到十行代码,前面还有二十行精心格式化的注释。面向对象编程对这些人来说就像可卡因:它让你可以把所有这些脚手架直接纳入源代码中。Lisp黑客可能通过将符号推入列表来处理的事情,变成了一个充满类和方法的大文件。所以如果你想说服自己或别人你做了很多工作,这是一个好工具。

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

  5. 面向对象的抽象很好地映射到某些特定类型程序的领域,如模拟和CAD系统。

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

也许我只是愚蠢,或者只处理过一些有限的应用子集。基于自己的编程经验来设计语言是危险的。但似乎更危险的是加入你从未需要的东西,因为它被认为是一个好主意。

英文版:paulgraham.com/noop.html|中文版:HiJiangChuan.com/paulgraham/013-why-arc-isnt-especially-object-oriented

📚 返回 Paul Graham 文章目录

更新记录: