喬布斯 :我比在座的各位更懂面向?qū)ο螅?/h1>
?1985年,喬布斯被自己親手創(chuàng)建的蘋(píng)果公司掃地出門(mén)。
不甘心的他成立了一家新的計(jì)算機(jī)公司NeXT,制造下一代個(gè)人電腦,一臺(tái)漂亮、強(qiáng)大、出色的機(jī)器,讓蘋(píng)果感到后悔和羞恥。
可惜,NeXT并沒(méi)有取得想象中的成功,6500美元的高昂價(jià)格只讓它賣(mài)出了5萬(wàn)臺(tái)。
1993年,NeXT被迫退出了硬件行業(yè)。
失之東隅,收之桑榆,雖然NeXT機(jī)器不行,它的操作系統(tǒng)NeXTSTEP卻因?yàn)閮?yōu)秀的GUI和面向?qū)ο蟮木幊汰h(huán)境,極大地影響了業(yè)界。
Tim Berners-Lee用它開(kāi)發(fā)了世界上第一個(gè)WWW服務(wù)器,編程語(yǔ)言是Objective-C。
id software 在上面開(kāi)發(fā)了開(kāi)創(chuàng)性的 PC 游戲Doom、Doom II和Quake。
NeXTSTEP后來(lái)成為Mac OS X的基礎(chǔ),為蘋(píng)果所有的平臺(tái)提供了強(qiáng)大動(dòng)力,包括iOS 、iPadOS、watchOS和tvOS。
簡(jiǎn)單來(lái)說(shuō),NeXTSTEP提供了三項(xiàng)非常出色的功能:
1. Objective-C這個(gè)面向?qū)ο蟮恼Z(yǔ)言和運(yùn)行時(shí)
2. 面向?qū)ο蟮膽?yīng)用層
3. 面向?qū)ο髮拥拈_(kāi)發(fā)工具。
請(qǐng)大家注意,這三項(xiàng)功能都和面向?qū)ο笥嘘P(guān)。
1994年,39歲的喬布斯在接受了一次《滾石》雜志的采訪。
他先是抨擊了蘋(píng)果的Mac電腦,說(shuō)Mac不思進(jìn)取,10年間改變了不到10%,就像一只坐著的鴨子。而微軟,居然花了10年才復(fù)制了一些“坐鴨式”的東西!
隨后他便開(kāi)始為自家NeXTSTEP的面向?qū)ο蟠蚱饛V告來(lái):
“我認(rèn)為未來(lái)會(huì)有一天,所有的軟件都將使用面向?qū)ο筮@種技術(shù)來(lái)編寫(xiě)..... ”
面向?qū)ο螅?/p>
這樣的技術(shù)術(shù)語(yǔ)如果從現(xiàn)在公司的CEO嘴里說(shuō)出來(lái),大家肯定覺(jué)得有些古怪,因?yàn)槊嫦驅(qū)ο笕缃袷浅恋淼降讓拥募夹g(shù)了,CEO絕對(duì)不會(huì)提起它,他們嘴中應(yīng)該是時(shí)髦的微服務(wù)、云計(jì)算、人工智能.....
但是在80年代末,90年代初,面向?qū)ο笫莻€(gè)非常時(shí)髦的詞語(yǔ)。
記者不懂技術(shù),問(wèn)道:“你能解釋一下什么是面向?qū)ο蟮能浖???/p>
喬布斯開(kāi)始了一段精彩的演說(shuō):
Object 就像人,他們是活生生的,呼吸著空氣,在他們內(nèi)部保存著如何做事情的知識(shí),他們也有記憶記住東西,你在一個(gè)很高層次的抽象級(jí)別和他們交互,而不使用底層的細(xì)節(jié)。
舉個(gè)例子吧,我是你的負(fù)責(zé)洗衣的對(duì)象,你可以把你的臟衣服給我,然后給我發(fā)一條消息,上面寫(xiě)著:“請(qǐng)幫我洗衣服”, 剩下的事情你就不用管了。
而我知道舊金山最好的洗衣店在哪里,我會(huì)說(shuō)英語(yǔ),口袋中也有錢(qián),我會(huì)叫個(gè)出租車(chē)去那個(gè)洗衣店,洗完衣服后,我回到這里,把干凈的衣服給你,同時(shí)告訴你‘這是你的干凈衣服’。
你并不知道我是怎么做到的,你對(duì)洗衣房一無(wú)所知,你不知道怎么叫出租車(chē),怎么付費(fèi)。所有的復(fù)雜性都隱藏在我的內(nèi)部。我們倆在一個(gè)高層次的級(jí)別交流。
這就是Object,它們封裝了復(fù)雜性,對(duì)外提供了高層的接口。
這是我看到的對(duì)面向?qū)ο蟮姆浅>实拿枋觯?/p>
喬布斯并不是技術(shù)天才,他最厲害的地方在于對(duì)用戶體驗(yàn)和品味的感知,然后“糾集”一批天才把最酷的技術(shù)原型轉(zhuǎn)變成面向消費(fèi)者的產(chǎn)品。
這段面向?qū)ο蟮闹v述可能是他自己悟出來(lái)的,也可能是從他的天才手下打聽(tīng)來(lái)的。不管如何,他非常形象地展示了Object的兩大特性:
1. 封裝復(fù)雜的操作
2. 對(duì)外提供高層次的接口,通過(guò)消息傳遞交互。
你可能會(huì)說(shuō),我學(xué)習(xí)的面向?qū)ο笫欠庋b、繼承和多態(tài)??!
沒(méi)錯(cuò),這是因?yàn)槊嫦驅(qū)ο蟪霈F(xiàn)過(guò)一次重大的分裂。
漫畫(huà)中的兩位都是大師,左邊這位是發(fā)明面向?qū)ο蠛蚐malltalk編程語(yǔ)言的Alan Kay,右邊則是C++之父Bjarne Stroustrup。
在Alan Kay的OO世界中,對(duì)象更像一個(gè)自治的“進(jìn)程”,它擁有自己的狀態(tài),并可以和其他對(duì)象通過(guò)消息進(jìn)行通信,正如喬布斯說(shuō)的那樣。
這些對(duì)象各司其職,就像一個(gè)個(gè)細(xì)胞,無(wú)數(shù)的細(xì)胞組成一個(gè)生物體。無(wú)論這個(gè)生物體有多大,其基本思想是一致的,換句話說(shuō),一個(gè)大系統(tǒng)是通過(guò)遞歸和組合的方式,由一個(gè)個(gè)對(duì)象建立起來(lái)的。
這種想法可能過(guò)于超前,它的代表語(yǔ)言Smalltalk火了一陣以后就被Java、C#、Python、C++等取代。
后來(lái)只能在Actor模型和Erlang中找到一些痕跡了。
?
Bjarne Stroustrup發(fā)明的C++就是“新式面向?qū)ο蟆钡拇恚@里的對(duì)象變成了數(shù)據(jù)類型(class)的實(shí)例,沒(méi)有類,對(duì)象根本無(wú)法存在。程序關(guān)注的重點(diǎn)也變成了接口、繼承、多態(tài)。
由于其更接近于 程序= 數(shù)據(jù)結(jié)構(gòu)+算法 ,再加上大公司的推動(dòng),占領(lǐng)了更多程序員的心智,成了主流。?