为什么要发明面向对象编程?

2020 年 6 月 4 日 CSDN

怎样的思维过程导致人们发明了面向对象编程?

作者 | Alan Kay
译者 | 弯月,责编 | 郭芮
头图 | CSDN 下载自视觉中国
出品 | CSDN(ID:CSDNnews)

以下为译文:

1992年,ACM邀请我为他们举办的第二届“编程语言历史”大会撰写一篇有关我的工作经历的文章。如今,这段历史有多个版本,其中Bret Victor网站上的“Smalltalk的早期历史”(地址:http://worrydream.com/EarlyHistoryOfSmalltalk/)记载了很多细节,有兴趣的人可以去看看。
我需要申明两点:(a)在1966年的工作中,我确实用到了“面向对象的程序设计”这个词;但是,(b)我当时使用这个词的本意是,对我在多个工作经历中的想法的“轮换”和概括,这些工作经历包括:
  • 一开始我是一名生物学家

  • 从1961年开始担任美国空军程序员,当时的工作是编写“语义文件系统”

  • 后来投身B5000计算机的硬件

  • 很长一段时间都在从事“多程序”和“分时”操作系统的工作

  • 最令人惊讶的是从事过Ivan Sutherland的Sketchpad程序

  • 在Simula中度过了一段平淡无奇的时光

  • 最终从事网络计算机(投身研究社区的ARPAnet)

1966年11月某人的一句极其简单的话深深地触动了我:“只要有足够多可以相互通信的计算机,那么就是说任何工作都可以在一台计算机上完成。”这是因为每台计算机都代表了整个网络。

抛开实际的困难不谈(实际上我是一个非常懒惰的数学家,所以我与务实勤奋的程序员八杆子打不着),这个想法非常诱人,因为与传统的过程式和以数据结构为组件的思想相比,面向对象编程的扩展性更好。
而且更干净,更适合整个系统设计。
而且,这个想法甚至可以从“设计和编程模拟”的角度来思考。有一次在一周内我看到了两个系统:Sketchpad和第一版Simula,这两个系统的目的都是模拟包含许多相互关联的进程的复杂实体,因而产生了这个想法。
认为一切都由“经由消息互相通信的语义软件计算机”构成,这种思想的另一项非常诱人的特性是,“数据”的某些丑陋的属性不仅可以修正,甚至可以完全消除。例如,标准的硬件和紧密映射到硬件上的编程语言可以引出简单数组的概念,但无法产生“数据结构”的概念,因为数据结构更为复杂,如系数矩阵、堆栈、队列等。如果将其视为“进程”,然后内部决定“赋值箭头”的含义,就会更容易一些。
这样就可以引出比“数据”更漂亮的概念,这些概念依然有状态,但没有竞争条件。例如,在对象内部,对象可以在需要时确定历史的版本,可以做“原子事务”,可以在所有关系都是一致的情况下仅允许查看。还有更多特性。这种新的概念远胜于“数据”的概念,它可以让对象随着时间流逝而发展,并“学习”新的东西,但会更安全。
然后还有模拟想法本身,这里“数据”和“状态”的概念开始让位于“有能力的对象”,这些对象可以互相操作,就像生物的细胞或者人类社会那样。
所以,引出这个想法的思维过程基本上就是“系统思维过程”,可以很容易地将定义进程组成的系统,即任何进程构成的任何系统。
这个概念与绝大多数读者熟知的OOP(如C++、Java等语言中的OOP)并不一样。
主要的区别在于视角上。C++和Java语言主要利用对象来定义类似于数据结构的新物体,编程语言本身也是基于数据结构的(如“setter”将任何实体变回一个任何人都可以操作的数据结构)。理论上,这实际上就是“抽象数据结构”,尽管对象的概念也能实现这一点,但这并不是对象的原本目的。
通过我上面的描述,一个优秀的系统设计师就能够设计并实现出优秀的系统,甚至是非常大型的系统也没问题。显然,如果不是经验丰富的设计师,就无法体现出其中的许多好处。
还有一点很重要,这个范式定义的强大和通用性,是与编程风格无关的(这正是“系统的模拟”含义的核心)。
一个对象可以完美地模拟一个函数、过程、数据结构等,所以一切已有的东西都可以完美支持,但对象还可以模拟非常智能的物体,来提供更强大的功能。
然而,问题在于,计算领域内很少有人下功夫理解“进程的广泛使用、可扩展的系统”的含义,大多数人在扩展程序规模时,依然无法摆脱陈旧、腐朽的方式。
在Parc项目中,我们构思了大量的概念,而编写的代码行数非常少,因为我们尽可能使用这种新的方式来组织并实现复杂的系统。(如今,这一思想已有了更深入的理解,但即使是在当年,我们也常常被其强大之处所折服)。
原文:https://www.quora.com/What-thought-process-would-lead-one-to-invent-object-oriented-programming/answer/Alan-Kay-11

更多精彩推荐

☞AI 终极问题:我们的大脑是一台超级计算机吗?

屏保壁纸引发血案,三星手机瞬间变砖

可怕!CPU 竟成了黑客的帮凶!

如何用NLP辅助投资分析?三大海外机构落地案例详解

这 10 个云计算错误,会让你的业务一蹶不振!

好扑科技结合区块链行业发展趋势,重磅推出“好扑区块链合伙人”计划

你点的每个“在看”,我都认真当成了喜欢
登录查看更多
0

相关内容

人们为了让计算机解决各种棘手的问题,使用编程语言 编写程序代码并通过计算机运算得到最终结果的过程。
【2020新书】实战R语言4,323页pdf
专知会员服务
100+阅读 · 2020年7月1日
【实用书】Python技术手册,第三版767页pdf
专知会员服务
234+阅读 · 2020年5月21日
【干货书】流畅Python,766页pdf,中英文版
专知会员服务
224+阅读 · 2020年3月22日
机器学习速查手册,135页pdf
专知会员服务
338+阅读 · 2020年3月15日
麻省理工学院MIT-ICLR2020《神经网络能推断出什么?》
专知会员服务
50+阅读 · 2020年2月19日
【电子书】C++ Primer Plus 第6版,附PDF
专知会员服务
87+阅读 · 2019年11月25日
【书籍】深度学习框架:PyTorch入门与实践(附代码)
专知会员服务
163+阅读 · 2019年10月28日
深度学习这些“坑”你们有没有踩过(入门误区)
计算机视觉战队
5+阅读 · 2019年4月27日
你真的会正确地调试 TensorFlow 代码吗?
数据库开发
7+阅读 · 2019年3月18日
教程 | PyTorch经验指南:技巧与陷阱
机器之心
15+阅读 · 2018年7月30日
各编程领域最好的入门书籍
程序猿
27+阅读 · 2018年7月29日
深度学习入门必须理解这25个概念
AI100
7+阅读 · 2018年6月6日
从基础概念到实现,小白如何快速入门PyTorch
机器之心
13+阅读 · 2018年2月26日
用于数学的 10 个优秀编程语言
算法与数据结构
13+阅读 · 2018年1月5日
【深度学习】给初学者的深度学习简介
产业智能官
8+阅读 · 2017年10月17日
一张通往计算机世界的地图
中科院物理所
8+阅读 · 2017年10月12日
iOS高级调试&逆向技术
CocoaChina
3+阅读 · 2017年7月30日
Learning to See Through Obstructions
Arxiv
7+阅读 · 2020年4月2日
Seeing What a GAN Cannot Generate
Arxiv
8+阅读 · 2019年10月24日
Arxiv
8+阅读 · 2018年4月8日
Arxiv
22+阅读 · 2018年2月14日
VIP会员
相关VIP内容
【2020新书】实战R语言4,323页pdf
专知会员服务
100+阅读 · 2020年7月1日
【实用书】Python技术手册,第三版767页pdf
专知会员服务
234+阅读 · 2020年5月21日
【干货书】流畅Python,766页pdf,中英文版
专知会员服务
224+阅读 · 2020年3月22日
机器学习速查手册,135页pdf
专知会员服务
338+阅读 · 2020年3月15日
麻省理工学院MIT-ICLR2020《神经网络能推断出什么?》
专知会员服务
50+阅读 · 2020年2月19日
【电子书】C++ Primer Plus 第6版,附PDF
专知会员服务
87+阅读 · 2019年11月25日
【书籍】深度学习框架:PyTorch入门与实践(附代码)
专知会员服务
163+阅读 · 2019年10月28日
相关资讯
深度学习这些“坑”你们有没有踩过(入门误区)
计算机视觉战队
5+阅读 · 2019年4月27日
你真的会正确地调试 TensorFlow 代码吗?
数据库开发
7+阅读 · 2019年3月18日
教程 | PyTorch经验指南:技巧与陷阱
机器之心
15+阅读 · 2018年7月30日
各编程领域最好的入门书籍
程序猿
27+阅读 · 2018年7月29日
深度学习入门必须理解这25个概念
AI100
7+阅读 · 2018年6月6日
从基础概念到实现,小白如何快速入门PyTorch
机器之心
13+阅读 · 2018年2月26日
用于数学的 10 个优秀编程语言
算法与数据结构
13+阅读 · 2018年1月5日
【深度学习】给初学者的深度学习简介
产业智能官
8+阅读 · 2017年10月17日
一张通往计算机世界的地图
中科院物理所
8+阅读 · 2017年10月12日
iOS高级调试&逆向技术
CocoaChina
3+阅读 · 2017年7月30日
Top
微信扫码咨询专知VIP会员