爲什麼要發明面向對象編程?

雲棲號資訊:【點擊查看更多行業資訊
在這裏您可以找到不同行業的第一手的上雲資訊,還在等什麼,快來!

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

【雲棲號在線課堂】每天都有產品技術專家分享!
課程地址:https://yqh.aliyun.com/live

立即加入社羣,與專家面對面,及時瞭解課程最新動態!
【雲棲號在線課堂 社羣】https://c.tb.cn/F3.Z8gvnK

原文發佈時間:2020-06-02
本文作者:Alfonso de la Rocha
本文來自:“infoq”,瞭解相關信息可以關注“infoq

【雲棲號在線課堂】每天都有產品技術專家分享!
課程地址:https://yqh.aliyun.com/live

立即加入社羣,與專家面對面,及時瞭解課程最新動態!
【雲棲號在線課堂 社羣】https://c.tb.cn/F3.Z8gvnK

原文發佈時間:2020-06-03
本文作者:Alan Kay
本文來自:“CSDN”,瞭解相關信息可以關注“CSDN

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章