喬布斯 :我比在座的各位更懂面向對象!
?1985年,喬布斯被自己親手創建的蘋果公司掃地出門。
不甘心的他成立了一家新的計算機公司NeXT,制造下一代個人電腦,一臺漂亮、強大、出色的機器,讓蘋果感到后悔和羞恥。
可惜,NeXT并沒有取得想象中的成功,6500美元的高昂價格只讓它賣出了5萬臺。
1993年,NeXT被迫退出了硬件行業。
失之東隅,收之桑榆,雖然NeXT機器不行,它的操作系統NeXTSTEP卻因為優秀的GUI和面向對象的編程環境,極大地影響了業界。
Tim Berners-Lee用它開發了世界上第一個WWW服務器,編程語言是Objective-C。
id software 在上面開發了開創性的 PC 游戲Doom、Doom II和Quake。
NeXTSTEP后來成為Mac OS X的基礎,為蘋果所有的平臺提供了強大動力,包括iOS 、iPadOS、watchOS和tvOS。
簡單來說,NeXTSTEP提供了三項非常出色的功能:
1. Objective-C這個面向對象的語言和運行時
2. 面向對象的應用層
3. 面向對象層的開發工具。
請大家注意,這三項功能都和面向對象有關。
1994年,39歲的喬布斯在接受了一次《滾石》雜志的采訪。
他先是抨擊了蘋果的Mac電腦,說Mac不思進取,10年間改變了不到10%,就像一只坐著的鴨子。而微軟,居然花了10年才復制了一些“坐鴨式”的東西!
隨后他便開始為自家NeXTSTEP的面向對象打起廣告來:
“我認為未來會有一天,所有的軟件都將使用面向對象這種技術來編寫..... ”
面向對象?
這樣的技術術語如果從現在公司的CEO嘴里說出來,大家肯定覺得有些古怪,因為面向對象如今是沉淀到底層的技術了,CEO絕對不會提起它,他們嘴中應該是時髦的微服務、云計算、人工智能.....
但是在80年代末,90年代初,面向對象是個非常時髦的詞語。
記者不懂技術,問道:“你能解釋一下什么是面向對象的軟件嗎?”
喬布斯開始了一段精彩的演說:
Object 就像人,他們是活生生的,呼吸著空氣,在他們內部保存著如何做事情的知識,他們也有記憶記住東西,你在一個很高層次的抽象級別和他們交互,而不使用底層的細節。
舉個例子吧,我是你的負責洗衣的對象,你可以把你的臟衣服給我,然后給我發一條消息,上面寫著:“請幫我洗衣服”, 剩下的事情你就不用管了。
而我知道舊金山最好的洗衣店在哪里,我會說英語,口袋中也有錢,我會叫個出租車去那個洗衣店,洗完衣服后,我回到這里,把干凈的衣服給你,同時告訴你‘這是你的干凈衣服’。
你并不知道我是怎么做到的,你對洗衣房一無所知,你不知道怎么叫出租車,怎么付費。所有的復雜性都隱藏在我的內部。我們倆在一個高層次的級別交流。
這就是Object,它們封裝了復雜性,對外提供了高層的接口。
這是我看到的對面向對象的非常精彩的描述!
喬布斯并不是技術天才,他最厲害的地方在于對用戶體驗和品味的感知,然后“糾集”一批天才把最酷的技術原型轉變成面向消費者的產品。
這段面向對象的講述可能是他自己悟出來的,也可能是從他的天才手下打聽來的。不管如何,他非常形象地展示了Object的兩大特性:
1. 封裝復雜的操作
2. 對外提供高層次的接口,通過消息傳遞交互。
你可能會說,我學習的面向對象是封裝、繼承和多態啊!
沒錯,這是因為面向對象出現過一次重大的分裂。
漫畫中的兩位都是大師,左邊這位是發明面向對象和Smalltalk編程語言的Alan Kay,右邊則是C++之父Bjarne Stroustrup。
在Alan Kay的OO世界中,對象更像一個自治的“進程”,它擁有自己的狀態,并可以和其他對象通過消息進行通信,正如喬布斯說的那樣。
這些對象各司其職,就像一個個細胞,無數的細胞組成一個生物體。無論這個生物體有多大,其基本思想是一致的,換句話說,一個大系統是通過遞歸和組合的方式,由一個個對象建立起來的。
這種想法可能過于超前,它的代表語言Smalltalk火了一陣以后就被Java、C#、Python、C++等取代。
后來只能在Actor模型和Erlang中找到一些痕跡了。
?
Bjarne Stroustrup發明的C++就是“新式面向對象”的代表,這里的對象變成了數據類型(class)的實例,沒有類,對象根本無法存在。程序關注的重點也變成了接口、繼承、多態。
由于其更接近于 程序= 數據結構+算法 ,再加上大公司的推動,占領了更多程序員的心智,成了主流。?