写点什么

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

  • 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:4211100

评论

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

AIGC立法和相关版权案例分享-“心寄源”法律沙龙(2023第五期 | 总第十期)成功召开

开放原子开源基金会

全面解析内存泄漏检测与修复技术

华为云开发者联盟

程序员 开发 内存 华为云 华为云开发者联盟

黄金眼PAAS化数据服务DIFF测试工具的建设实践 | 京东云技术团队

京东科技开发者

测试 PaaS 回归测试 企业号10月PK榜

PaddleX解决分类、检测两大场景问题?实战精讲教程来了!

飞桨PaddlePaddle

AI 飞桨 套件

代码的艺术 - Writing Code Like a Pianist | 京东云技术团队

京东科技开发者

代码质量 整洁代码 企业号10月PK榜 系统质量

最全数据安全评估标准汇编,你应该需要!(附下载)

极盾科技

数据安全

以烟草行业为例,聊聊如何基于 PLC + OPC + TDengine,快速搭建工业生产监测系统

TDengine

tdengine 时序数据库

图文结合丨Prometheus+Grafana+GreatSQL性能监控系统搭建指南(下)

GreatSQL

greatsql

面试多起来了

王磊

Java

低代码平台探讨-MetaStore元数据缓存 | 京东云技术团队

京东科技开发者

缓存 低代码 元数据 企业号10月PK榜

从理论到实践,实时湖仓功能架构设计与落地实战

袋鼠云数栈

数据中台 数据仓库 数据湖 湖仓一体 实时湖仓

欢迎来到 GPTSecurity!共建知识库

云起无垠

GPTSecurity

使用 ChaosBlade 验证 DLRover 的弹性和容错的稳定性

AI Infra

人工智能 开源 开发者 云原生 大模型

李彦宏:我们即将进入一个AI原生的时代|百度世界2023

飞桨PaddlePaddle

百度 大模型 文心一言

用友 Fast by BIP引领专业技术服务企业快速迈向数智化创新

用友BIP

Fast by BIP

九章云极DataCanvas多模态大模型平台实践与思考

九章云极DataCanvas

商用显示设备包括哪些?

Dylan

企业 设备 显示器 LED显示屏

使用流量管理工具保护 Kubernetes 的六种方法

NGINX开源社区

Kubernetes DOS攻击 Web应用防火墙 原生云

LAS Spark+云原生:数据分析全新解决方案

字节跳动数据平台

数据库 大数据 数据中台 数据研发 企业号10月PK榜

List.of() Vs Arrays.asList()

越长大越悲伤

Java

玩转MaxCompute SQL训练营! 数据分析挖掘迅速出师

阿里云大数据AI技术

大数据 数据分析

校源行 | 开放原子开源社团(西北工业大学)授牌仪式成功举行

开放原子开源基金会

百度世界大会2023重磅发布进行时,小度全新智能音箱重构家居美学新乐章

新消费日报

推动产业升级及创新,Doris Summit Asia 2023 先进智造与电信论坛提前揭秘

SelectDB

数据库 大数据 数据仓库 实时数仓 apache doris

新晋技术管理者如何推动组织变革?

LigaAI

团队管理 研发管理 进阶 技术管理 企业号10月PK榜

SOA认知和方法论 | 京东物流技术团队

京东科技开发者

架构 软件架构 SOA 企业号10月PK榜

如何从构建到运营?数科公司数智创新研讨会成功举办

用友BIP

数科公司

原料所属权管理领先实践,助力造币厂来料加工原料管理降本增效

用友BIP

领先实践 原料所属权管理

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