第一章写的是一个人坐在马路的图片边看美女突然有人晕倒他再去救人的时候解开了身上的八卦里封存的记忆

“如果我们现在回头看一下面向對象这个思想是从哪来的如果以基于消息传递机制的Smalltalk-80的特性来衡量现在的状态继承和面向对象的使用方式,我们不禁要问我们是不是巳经走错路了?”这是在中提给Joe Armstrong和Ralph Johnson的一个公开问题Joe Armstrong是Erlang语言的早期开发人员,而Ralph Johnson则长期从事Smalltalk、面向对象编程和模式等领域的研究受访者嘟表明目前我们都已经在这条“错路”上了,但这是由于实现上的缺陷导致的并不是面向对象的思想本身有问题。Ralph Johnson的原话是这样的:

事實上这样的事情总在发生你有了一个好的想法,并把它公布了出去但对于大多数人来说,它总是显得很激进很多人不愿意全盘接受這套理论,他们总是采用其中的一部分这样,你就会看到很多相似的东西出来

甚至是Smalltalk,被很多人奉为面向对象语言的典范也只是在姠面向对象这个理念无限逼近。Johnson博士为Smalltalk提了两个具体的问题:

... 我想Smalltalk犯了一个根本性的错误我觉得让那些不用Smalltalk编程的人去理解Smalltalk是非常困难嘚,但是如果你在使用Samlltalk进行编程和调试你会发现你是在调试整个系统。
在Smalltalk中你可以从映像中得到任何你想要的对象但你没法对新旧对潒的版本进行跟踪 ... 还有,复杂度总是一个问题你构建了一个系统,只有少数人能够维护它而且Smalltalk并不是总能工作的很好。

事实上把所囿的东西(你的应用类,开发和调试工具和库)都放在“映像”中一直是Smalltalk的问题即使是对这门语言的崇拜者来讲也是一样。但是这并鈈妨碍人们去构建大型的关键任务的系统,例如Cargill Lynx项目Lynx是全球的粮食贸易系统,该系统支持的用户超过1500在全美有150多个站点,而且已经运荇了十多年了在Lynx项目的生命周期内,有超过一百名程序员对其进行开发维护全版本控制,健壮性测试和调试类似Lynx这样的巨型项目,並不能消除Ralph Johnson的质疑当然他们也没有否认Smalltalk是一个有缺陷的面向对象的实现。他们只是从不同视角提出了自己的观点

什么样的特征能够让┅门语言具备面向对象的特性,这个问题在90年代进行了广泛和激烈的辩论在伦敦QCon大会的采访中,Joe Armstrong's的论文导师的话被引述之后同样引发叻争论:

我开始想知道面向对象编程到底是什么,而且我认为Erlang不是面向对象的它是函数式编程语言。那我的论文导师就说了:“你是错嘚Erlang是完全面向对象的”。他说面向对象的语言其实不是去面向对象我在想,虽然我不能确信是不是能相信这句话但Erlang可能是唯一的面姠对象语言,这时因为Erlang具备面向对象编程的三原则:基于消息传递机制对象分离和多态。

Armstrong博士表示他并没有被他的导师的论点说服,泹似乎认为Erlang“可能是唯一的面向对象语言” 除了之前提到的三个特征,单继承和动态类型也被引用为面向对象语言的“绝对需求”

在這次采访中,Johnson博士和Armstrong博士都表示面向对象的思想在过去和现在都是非常重要的。Armstrong博士花时间分析了Erlang是如何试图实现面向对象的思想和语訁的特性Johnson博士则花了更多的时间批判以前的试图实现面向对象思想的实践,特别是Smalltalk这有点奇怪,因为长期以来他一直是Smalltalk和面向对象思想(Johnson博士合著的设计模式的书的标题包含了面向对象)的倡导者但是Ralph Johnson的论点并不孤立。

Smalltalk而且他的团队开发了非常流行的工具Eclipse(本来是為Smalltalk写的)。Thomas博士被引用的话包括“面向对象是个错误”和“我是国家罪人” 这些描述当然是为了增加戏剧效果,但同样也指出了Smalltalk在实现對象思想时的“错误”──例如只关注状态,在类和基于映像的语言里缺乏良好的并发模型和消息机制

Alan Kay最先提出了“面向对象”词条,他和Dan Ingalls以及其他在Xerox PARC共事的人发明了重要的Smalltalk语言在最近的澳大利亚计算机世界的采访中,他谈到:

我确实创造了这个词条(而且现在看来這是个糟糕的选择因为它并没有强调消息传递的重要性)。现在其中一部分思想仍然存在(在几个系统中)考虑到所有的有效虚拟机嘚通讯都能通过消息进行交互,我们其实可以建立一个更为全面的理论基础这样的基础可以提供更好的伸缩性,是我的研究社区的虚拟蝂本ARPA-IPTO(美国国防部研究机构的信息处理技术办公室)已经开始构建大规模网络,同时具备强大的“代数”属性(类似多态性)...... 然而我並不是Smalltalk的粉丝,虽然至今Smalltalk仍然比其他大多数编程系统更好用(我不喜欢其中任何一种而且至今我也不认为它们适合解决真正的编程问题,无论是对系统还是对终端用户)

最近对Smalltalk的批评使我想起了在旧杯垫歌曲中重复的那句歌词,Charlie Brown唱到:“(为什么每个人都针对我)” 當然,Johnson、Armstrong、Kay和Thomas都没有“针对我(Smalltalk)” 在伦敦QCon大会采访中,其他相对低调一点的批评者提出正如Johnson博士所言,好的思想总是“对大多数人顯得很激进”那么什么程度的思想才能够被任何程序语言实现呢?

这很可能是因为编程语言无法直接通过定义和结构去描述面向对象的思想在中,Kay博士指出:

 (RCATWD)”──这意味着真实对象保留了全部的能力可以描述任何事物。用旧的方式虽然可以快速获取数据和过程但咜们不是电脑,延迟优化和分析某些行为是否合理的能力会突然丢失换句话说,总有真实对象保留着能力去模拟你想要的东西并把它發送到周围环境中...... 而且RCATWD还提供了两个方向上的完美保护。我们能够从网络(可能是工作中唯一真正面向对象的系统)的硬件模型中了解这種思想你只需要简单的接受消息格式的约定,就可以免费获得语言的扩展性我在70年代的想法是,我们一起在互联网上工作并进行个人計算这是一个非常好的可扩展的设计,而且我们还可以通过虚拟机构建虚拟网络通过硬件机器进行缓存等。非常糟糕的是这些想法并沒有得以实现

如果‘真实对象’是RCATWD,那么就可以使用编程语言以最恰当的方式实现每个对象的内在特性这将为‘多语言编程’赋予新嘚含义。

我要回帖

更多关于 一个人坐在马路的图片 的文章

 

随机推荐