面向对象不是计算机编程的基本原子

在过去的25年里,编程世界发生了巨大的变化,如今,我们有大量的有用的、灵活的数据类型可以使用,但在25年前,你需要花大量的额外时间自己去构造这些类型。

C和Pascal语言——当时的标准语言——提供了少量的面向机器的数据类型:数字,指针,数组,形式上的字符串,以及把多种数据组合到一起的结构体或record。重要的是,以这些基本的类型为基石,我们可以构造出更多有趣的类型,例如栈,树,链接表,哈希表,可变数组等。

在Perl或Python,或Erlang语言里,我不需要考虑这些东西。我在使用list、string或array时,根本不关心它们能容纳多少元素,或放在内存的什么地方。最常使用的还有字典,同样,根本不担心它的容量或哈希冲突是如何避免的细节内容。

除此外,我仍然需要一些新的数据类型,但它们更多的是现有类型的一种变换,而不是重新构造。任意维度的vector实际就是array。一个RGB颜色值实际上一个3元tuple。一个多项式既可以是一个tuple,也可以说list。我惊奇于这些array,tuple,list,dictionary等数据类型大大的消除了我在大学课程里学到的那些基本数据类型上的不便。在实现一个平衡二叉树时,你的注意力放在如何让二叉树平衡,而不是痛苦的纠结于乱如麻的指针操作。

将已有的小方块搭建成一个新的建筑,这将会引起比小方块出现带来的更大的变化。这些小方块是如何出现的已经不是人们关心的重点。在很多的编程课程和教材中,本来很好的教学中突然出现了一批新词汇:对象,构造器,抽象基础类,以及私有方法。于是,下一次作业中,用简单的三元tuple来表达的RGB颜色值变成了由一个具有get、set方法,多高构造器的类来代替,更要命的,出现了大量的代码。

这就是为什么有人会不停的呼吁、解释为什么面向对象不是个好东西、会使编程失去乐趣的原因。但很少奏效。

并不是面向对象不好,或含有什么缺陷。而是面向对象不是计算机编程的基本原子,它们不是人们想象的天生就存在的。不设门槛的任意使用面向对象来解决问题会让代码变得臃肿和过度技术化,然而,很多人还是坚持锲而不舍的用对象来解决所有问题。这非常糟糕,因为这样做让人们辨不清面向对象风格的做法是否真的产生了使问题简化并易于理解的效果。

(请参考《不要用面向对象来迷惑程序员新手》)

[英文原文:OOP Isn't a Fundamental Particle of Computing ]
分享这篇文章:

9 Responses to 面向对象不是计算机编程的基本原子

  1. 不用面向对象已经不会编程了。

  2. 依云 says:

    我还没有对象呢……

  3. 刷屏小王子 says:

    具体问题具体分析,什么都用面向对象套明显就是错误的思维。
    但不得不承认面向对象编程更加符合人类的思维方式。

  4. 罗半仙 says:

    要看用什么计算机语言,不敢赞同作者的看法。

    好多面向对象的语言,如果不按OOA,OOP来做,最终就是无法维护和升级。甚至在开发的过程中就可以让人崩溃。

  5. MagicalMoon says:

    作者只有论点没有论证,毫无说服力。

  6. gourdboy says:

    如果明知道它不好,却还在用它,是不是意味着我们还没找到比它更优的方案。如果最后的结论是提出新的编程思维方式来解决了这些问题,就更有说服力了。

发表评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据