面向对象并不是目的

我经常会读到或听到有人说一些“这个和那个不是正确的面向对象”,或“… 面向函数”,或诸如此类的言论。我以前也会发表这样的言论——当我刚从大学出来的时候。这种的观点在昨天这里发表的一篇名为”what we don’t need in object oriented programming“里也体现了出来。

后来,在现实世界中,我知道了这真正的事实:

我们开发软件并不是为了让它面向对象化,或遵循其它的模式。

我们开发软件是为了解决问题。

每一种编程模式(OO, FOP, AOP 等)都擅长于解决某一特定类型的问题,但没有一个——我个人认为——是全能的。所以,我觉得很幸运能有那么多的工具和语言概念来供我们选择,而不是限定于一种。用什么样的工具和什么样的思想,这依赖于我们要解决的问题的类型。

例如,现在已经是2010年了,为什么Java里仍然没有无符号基本数据类型?如果我必须对字节进行操作,那就麻烦了。为什么我们对使用什么样的基本类型的没有选择余地呢?

相同的思路,为什么Scala里只有对象类型?如果我要开发的某种软件是用来操作二进制数据的,我可不希望Scala在屏幕后面为我做什么优化。我希望自己能掌控它。如果我需要在大量的二进制数据上进行字节操作,这就有问题了,Scala的基本类型是常量化的吗?于是,每一次操作我都要创建一个类型实例?汗颜。

通常,当有些很精明的程序员对我的做法说三道四,却又根本不知道我是在解决什么问题时,我很苦恼。这就像是在说“我比你更知道你需要什么,所以我们不能用这个、那个工具/风格/架构”。但事实却是,这些精明的思想家并不是更知道对于每个开发人员,什么样的工具或思路才是他们解决相应的问题所需要的。做个类比,这个极其类似那些精明的政治家宣传自己最知道人们究竟应该怎么活着…

总结一下:我们开发软件是来解决问题的,只要能把问题正确的解决,它就是“正确”的方式。目前,看起来真正能够做到这一点的编程语言阵营只有C#团队。我是个有11年Java编程史的Java迷,这样说我也很受伤。但他们对于我来说就是这样,这些C#的语言设计者真正的懂得这样的事实:我们没必要一定强迫自己使用某种模式,我们要自己给出选择。

[英文原文:Object Orientation is not a Goal ]
分享这篇文章:

6 Responses to 面向对象并不是目的

  1. 十分 says:

    什么才是解决问题呢。
    编程本身就是为了解决问题。
    从面向过程到面向对象,
    这些都是为了解决问题,
    只不过要看“解决问题”
    这个词的宽度和广度而已。

  2. J says:

    LS 又是一个“明白人”

  3. S says:

    现在的软件开发,似乎要求不光是解决特定问题(某个问题),还要有灵活的方式面对问题的变化和问题的延伸(某类问题)。所以OO跳出来说:“我能”。结果他真的能,有木有?

  4. 忧郁 says:

    不能为了解决问题而解决问题,关键是要找出问题的根本原因

  5. johnphan  这篇文章

发表评论

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

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