10 月 23 - 25 日,QCon 上海站即将召开,现在大会已开始正式报名,可以享受 8 折优惠 了解详情
写点什么

面向对象编程──走错了路?

  • 2010-07-15
  • 本文字数:2725 字

    阅读完需:约 9 分钟

“如果我们现在回头看一下面向对象这个思想是从哪来的,如果以基于消息传递机制的 Smalltalk-80 的特性来衡量现在的状态继承和面向对象的使用方式,我们不禁要问,我们是不是已经走错路了?”这是在 2010 伦敦 QCon 大会采访中提给 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 的论点并不孤立。

Dave Thomas 是另一个对面向对象和 Smalltalk 有相近观点的人。他的团队为 Digitalk’s Method(第一个 PC 上的 Smalltalk 应用)创建了第一个“Goodies Packs”,他是该公司的创始人和 CEO,他们的成果最终成为了 IBM 的 VisualAge 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 博士指出:

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

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

查看英文原文: Object Oriented Programming: The Wrong Path?

2010-07-15 18:4210908

评论

发布
暂无评论
发现更多内容

照片经典胶片效果和风格DxO FilmPack 7-mac/win

Rose

数据智能化管理技术创新|PingCAP 合作论文入选 SIGMOD 2025,引领下一代数据基础设施发展方向

TiDB 社区干货传送门

BandiZip (解压缩软件),适用于多核心压缩、快速拖放、高速压缩等

Rose

信创适配、迁移、改造|中烟创新怀信创初心,赴数字之约

中烟创新

AI 背单词 App 的核心功能

北京木奇移动技术有限公司

软件外包公司 AI英语学习 APP开发公司

Maxon Cinema 4D S24中文激活版_c4d详细安装教程

Rose

官宣|矩阵起源官网「体验中心」正式上线,文档解析能力开放试用!

MatrixOrigin

ICML 2025 高分论文!快手&南开提出:模块化双工注意力机制,显著提升多模态大模型情感理解能力!

快手技术

多模态 快手 情感理解

CommunityOverCode Asia 2025 Messaging 专题预告,RocketMQ 邀您共探相关议题

Apache RocketMQ

开源 云原生 消息队列 Asia

留个VKProxy性能测试记录

八苦-瞿昙

Proxy

聚焦采购痛点:中烟创新采购文件编制与审核系统如何精准破局

中烟创新

Topaz Video AI Pro(去隔行,放大和运动插值) v7.0.1汉化特别版

Rose

Autodesk Maya 2025(玛雅2025)中文激活详细图文安装教程

Rose

TiDB 社区第四届专栏征文大赛联合墨天轮火热开启,TiDB 业务场景实战、运维开发攻略两大赛道,BOSE 降噪耳机、大疆手持云台、投影仪、运动手环、礼品卡等重磅礼品等你来拿!

TiDB 社区干货传送门

社区活动

等保测评常见的安全产品

等保测评

京东携手HarmonyOS SDK首发家电AR高精摆放功能

京东零售技术

TablePlus(数据库管理工具) v6.6.1 破解版

Rose

数字资产支付 App 的技术框架

北京木奇移动技术有限公司

数字资产 区块链技术 软件外包公司

强大CAD绘图软件 Bricsys BricsCAD 25浮动许可证-mac/win

Rose

sublime text 中文设置教程 及sublime text 激活码分享

Rose

Solana 的代币化股票市场两周内增长超三倍达到 4800 万美元

PowerVerse

大数据-37 HBase Java API POM 增删改查 详细代码

武子康

Java 大数据 hadoop 分布式 HBase

折叠屏进入智能体时代:解构三星Galaxy AI的多模态进化

Alter

自6月首次公开募股(IPO)以来,Circle股价涨幅达472%,超越比特币表现

PowerVerse

面试完第一反应是想笑

王中阳Go

Go 面试 后端 大厂

Try Hack Me SOAR 实战演练:安全编排、自动化与响应技术解析

qife122

安全运维 蓝队

让大模型更懂你,京东零售的算法工程师做了这些事

京东零售技术

从 Python 演进探寻 AI 与云对编程语言的推动

阿里巴巴云原生

Python 阿里云 云原生

智慧菜场系统(源码+文档+讲解+演示)

深圳亥时科技

Dimension 2023中文直装版+安装教程(3D设计工具)

Rose

三维模型展UV工具 RizomUV 2023破解版资源-mac/win

Rose

面向对象编程──走错了路?_后端_Dave West_InfoQ精选文章