我們專注于高端品牌網(wǎng)站創(chuàng)意設(shè)計與開發(fā)
從過去編程語言的歷史中,我們可以看出編程語言是在不斷試錯的過程中發(fā)展起來的。有很多編程語言已經(jīng)消亡,僅僅在歷史中留下了它們的名字,但其中所包含的思想,卻被后來的語言以不同的形式吸取和借鑒。
例如,SNOBOL 的字符串處理功能,可以說是現(xiàn)代腳本語言基本功能的祖先。此外,20 世紀 70 年代由美國麻省理工學(xué)院(MIT)開發(fā)的一種名為 CLU 的語言中迭代器(Iterator)的概念,也被 Ruby 以代碼塊(Block)的形式繼承了下來。
從編程語言的進化過程來看,一個顯著的關(guān)鍵詞就是“抽象化”。抽象化就是提供一個抽象的概念,使用者即便不具備關(guān)于其內(nèi)部詳細情況的知識,也能夠?qū)ζ溥M行運用。由于不必了解其內(nèi)部的情況,因此也被稱為“黑箱化”。
一些古老的編程語言,例如 BASIC 就沒有實現(xiàn)充分的抽象化。雖然它提供了用于過程共享的子程序這個概念,但是子程序只能通過編號來調(diào)用,而且不能傳遞參數(shù)。由于“賦予名稱”是抽象化的重要部分,所以說它的抽象化是不充分的。近代的編程語言中,都可以為一系列過程(程序)賦予相應(yīng)的名稱。
然而,僅僅將過程進行抽象化還遠遠不夠。幾乎所有的過程都需要進行一定的輸入輸出操作,而并不是與數(shù)據(jù)無關(guān)的。因此,在下一個階段中,對數(shù)據(jù)進行黑箱化就顯得非常重要。剛才我們提到的 CLU,就是數(shù)據(jù)抽象化出現(xiàn)早期的一種語言。
在數(shù)據(jù)抽象化的延長線上,就自然而然產(chǎn)生了面向?qū)ο缶幊痰母拍?。所謂對象,就是抽象化的數(shù)據(jù)本身,因此面向?qū)ο蠛蛿?shù)據(jù)抽象化之間僅僅隔了薄薄的一張紙。在現(xiàn)在的 21 世紀編程語言中,面向?qū)ο笠呀?jīng)是常識了,最近幾乎所有的語言都或多或少地提供了面向?qū)ο蟮哪芰?。?dāng)然,其中也有一些語言故意不提供對面向?qū)ο蟮闹С帧?/p>
隨著抽象化的不斷深入,程序員即便不去關(guān)心內(nèi)部的詳細情況,也可以編寫出程序。人類一次所能掌握的概念數(shù)量是有限的,有說法稱,大部分人一次只能駕馭 7±2 個左右的概念。這樣一來,如果能夠讓問題的處理方式更加抽象,也就可以解決更復(fù)雜的問題。
受摩爾定律的影響,社會對于軟件也提出了越來越高的要求。人類社會越來越依賴計算機,因此就需要開發(fā)出更多更可靠、更便宜的軟件。
在講述軟件開發(fā)的一本名著《人月神話》中,作者弗雷德里克·布魯克斯寫道:
無論使用什么編程語言,生產(chǎn)一條基本語句所需要的工數(shù)幾乎是一定的。
也就是說,如果要描述同樣的算法,A 語言需要 1000 行,B 語言只需要 10 行的話,只要采用 B 語言生產(chǎn)效率就可以提高 100 倍。
可能有人會覺得“這太扯了吧”。打個比方,用 Java 和 Ruby 描述同樣的算法,語句行數(shù)相差 2 倍多也不稀奇,如果是匯編語言和 Ruby 相比的話,也許能產(chǎn)生 100 倍甚至 1000 倍的差距。
能產(chǎn)生這樣的生產(chǎn)效率差異,正是抽象化的力量。抽象度高的編程語言不必描述詳細過程,從而可以用簡短的代碼達到目的。和抽象化程度的差異相比,變量名稱、有沒有指定數(shù)據(jù)類型之類的都只能算是誤差級別的差異而已。
文章引用:http://www.lt-ad.com/new/172.html
本站文章為深圳網(wǎng)站建設(shè)·源美網(wǎng)絡(luò)原創(chuàng)策劃,如有版權(quán)糾紛或者違規(guī)問題,請聯(lián)系我們刪除,謝謝!
售后保障
承諾任何問題1小時內(nèi)解決數(shù)據(jù)備份
更安全、更高效、更穩(wěn)定價格公道精準
項目經(jīng)理精準報價不弄虛作假合作無風(fēng)險
重合同講信譽,無效全額退款