【AICon】探索八个行业创新案例,教你在教育、金融、医疗、法律等领域实践大模型技术! >>> 了解详情
写点什么

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

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

评论

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

同时踩下刹车和油门:英特尔的“精神内耗”

脑极体

芯片 英特尔

活动预告 | 2023 QCon 全球软件开发大会 - AI 基础架构论坛

第四范式开发者社区

人工智能 机器学习 数据库 开源 特征

写给go开发者的gRPC教程-protobuf基础

凉凉的知识库

golang 微服务 gRPC protobuf 微服务框架

Zebec 上线投票治理机制,全新流支付生态正在起航

股市老人

有了HotSpot JVM为什么还需要OpenJ9?

骑牛上青山

Java jdk JVM 虚拟机

CTO:假如Java微服务随机掉线,你会怎么排查?

Java永远的神

Java 程序员 面试 微服务 架构师

湖仓一体电商项目(十八):业务实现之编写写入DWD层业务代码

Lansonli

数据湖 湖仓一体电商项目

深度剖析 Linux 伙伴系统的设计与实现

bin的技术小屋

Linux 内存管理 Linux内核 内存分配 Linux内核源码

Zebec 上线投票治理机制,全新流支付生态正在起航

鳄鱼视界

FLStudio2023水果中文版软件如何下载?

茶色酒

flstudio FLStudio21

Portraiture4.0版本最新永久免费版下载

茶色酒

Portraiture2023 Portraiture

硬核!互联网资深大佬手码2023版高并发编程速成笔记涵盖了并发编程的所有骚操作

Java永远的神

程序员 面试 后端 高并发 架构师

下一代Jupyter Notebook?也太好用了吧!

Jackpop

gcc属性__attribute__((naked))使用场景

SkyFire

GCC 内嵌汇编

2023JAVA面试题全集(超全面!超系统!超实用!)早做准备,早上岸!

架构师之道

Java 编程 程序员 计算机 java面试

什么是可演进架构

agnostic

Java高手速成 | EL表达式语言

TiAmo

Java EL

「AVL平衡树专项」带你领略常用的AVL树与红黑树的奥秘(规则篇)

C++后台开发

数据结构 后端开发 红黑树 linux开发 C++开发

ABBYY FineReader16最新版本更新下载

茶色酒

ABBYY FineReader16 ABBYY16

Zebec 上线投票治理机制,全新流支付生态正在起航

EOSdreamer111

模块五作业

程序员小张

「架构实战营」

人工智能可能是创业最后的末班车

felix

人工智能 创业 互联网 中小企业

大型软件开发集成类项目管理思路

大黄蜂

项目管理 大型软件开发 管理思路

CleanMyMac2023知名MAC电脑清理软件

茶色酒

CleanMyMac X

Python新手太需要了,这5个做题练习网站爱了!

Jackpop

这才是机器学习正确高效的学习路线!

Jackpop

案例研究:让线上故障沉淀为团队的经验

石云升

极客时间 2月月更 技术领导力实战笔记

Jackson 的 DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES

HoneyMoose

Zebec 投票治理机制上线,全新流支付生态正在起航

西柚子

D触发器 (D-FF)详解

timerring

FPGA

从原理源码到企业级实战,腾讯大佬纯手打的Spring Boot笔记(2023版)真香

程序员小毕

spring 后端 springboot java程序员 java面试

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