1985年,乔布斯被他亲手创立的苹果公司扫地出门了。
不甘心的他随即创立了NeXT公司,目标很直接:造出一台漂亮、强大到让苹果后悔的下一代个人电脑。

可惜,NeXT电脑高达6500美元的售价让它只卖出了大约5万台,市场表现远不及预期。1993年,NeXT被迫退出了硬件制造领域。
然而,失之东隅,收之桑榆。NeXT的硬件虽然失败了,但其操作系统NeXTSTEP却凭借卓越的图形界面和革命性的面向对象编程环境,深远地影响了整个软件行业。

万维网之父蒂姆·伯纳斯-李正是在NeXTSTEP系统上,使用Objective-C语言开发了世界上第一个Web服务器。

大名鼎鼎的id Software公司也在该平台上开发了《毁灭战士》、《雷神之锤》等划时代的PC游戏。更重要的是,NeXTSTEP后来演变为Mac OS X的核心,成为苹果旗下所有操作系统(iOS、iPadOS等)的强大基石。
简单来说,NeXTSTEP的成功主要源于三项与面向对象紧密相关的特性:
- 基于面向对象的Objective-C语言及其运行时。
- 完全面向对象的应用层框架。
- 高效的面向对象开发工具。
1994年,39岁的乔布斯在接受《滚石》杂志采访时,一边批评苹果的Mac电脑十年间改进甚微,一边为NeXTSTEP的面向对象特性打起了广告。他预言:“我认为未来会有一天,所有的软件都将使用面向对象这种技术来编写……”
当记者请他解释什么是“面向对象的软件”时,乔布斯给出了一段极其生动的描述:
Objects(对象)就像人,他们是活生生的,有记忆,知道如何做事。你在一个很高的抽象层次上与他们互动。比如说,我是你的“洗衣对象”,你把脏衣服给我,然后对我说:“请洗衣服”。我知道旧金山最好的洗衣店在哪,我口袋里有钱,我会叫出租车去把衣服洗好,再带回给你。你完全不用知道我是怎么做到的,所有的复杂性都被封装在我内部。我们之间通过高层次的消息进行交流。
乔布斯并非技术天才,但他对用户体验有着超凡的洞察力。这段关于面向对象的阐述,可能是他自己的理解,也可能是从身边的天才工程师那里“偷师”来的。无论如何,他精准地描绘了其心中的Object应有的两大特质:
- 封装复杂操作:将繁琐的实现细节隐藏起来。
- 通过消息交互:对外提供高层次的接口,对象之间通过发送和接收消息进行协作。
看到这里,你可能会感到困惑:我们课本上学到的面向对象三大特征不是封装、继承、多态吗?乔布斯怎么只提封装和消息?
这是因为面向对象编程在发展历程中,出现过一次根本性的理念分裂。

漫画中的两位都是大师。左边是面向对象编程的奠基人之一、Smalltalk语言之父艾伦·凯(Alan Kay)。右边则是C++之父本贾尼·斯特劳斯特卢普(Bjarne Stroustrup)。
在艾伦·凯的原始构想中,对象更像一个独立的、自治的“进程”或“生物细胞”。它拥有自己的私有状态,并通过消息传递与其他对象进行通信,正如乔布斯所描述的“洗衣工”。这种思想强调组合优于继承,认为庞大的系统应该通过无数小对象的递归组合来构建,就像一个生命体由无数细胞组成一样。
这种理念可能过于超前。其代表语言Smalltalk虽然一度引领风潮,但最终被Java、C#、Python等语言所取代。其核心思想后来在专注于高并发的Actor模型(如Erlang语言)中得到了延续和体现。

而斯特劳斯特卢普所代表的“新式面向对象”,则以C++为典型。在这种范式下,对象更像是某个类(Class)的实例,类的概念成为了核心。程序设计的焦点转移到了类之间的继承关系、接口抽象和运行时多态上。由于这种范式更贴近传统的“程序=数据结构+算法”的思维模式,加上大公司和教育体系的推动,它最终成为了主流,塑造了如今大多数程序员对面向对象的认知。
所以,我们并没有“学错”,而是学习了面向对象编程这条大河的一条主要支流。了解另一条源自艾伦·凯和Smalltalk的支流,能让我们更深刻地理解封装与消息传递的本质,并在设计分布式、高并发系统时获得不同的灵感。这种思想层面的追根溯源,对于提升编程素养大有裨益。想了解更多经典的编程思想与设计哲学,欢迎来云栈社区交流探讨。