1.1 程序設計思想的發展

面向機器

最先的程序設計都是採用機器語言來編寫的,直接使用二進制碼來表示機器可以識別和執行的指令和數據。簡單來講,就是直接編寫0和1的序列來表明程序語言。例如:使用0000 表明 加載(LOAD),0001 表明 存儲(STORE)等。程序員

機器語言由機器直接執行,速度快,但一個很明顯的缺點就是:寫起來實在是太困難了,一旦你發現本身寫錯了,改起來更蛋疼!這樣直接致使程序編寫效率十分低下,編寫程序花費的時間每每是實際運行時間的幾十倍或幾百倍。編程

有一個關於機器語言和比爾蓋茨的笑話,是說比爾蓋茨拿着繡花針在一張光盤上戳,把Windows給戳出來了!但若是真的讓你去戳,不要說Windows,連一個簡單的「Hello world」都要讓人戳到眼睛冒煙!模塊化

因爲機器語言實在是太難編寫了,因而就發展出了彙編語言。彙編語言亦稱符號語言,用助記符代替機器指令的操做碼,用地址符號(Symbol)或標號(Label)代替指令或操做數的地址,。彙編語言因爲是採用了助記符號來編寫程序,比用機器語言的二進制代碼編程要方便些,在必定程度上簡化了編程過程。例如使用LOAD 來代替 0000,使用STORE來代替0001。操作系統

即便彙編語言相比機器語言提高了可讀性,但其本質上仍是一種面向機器的語言,編寫一樣困難,也很容易出錯。相信不少計算機畢業的學生至今都對學校的彙編課程中的練習程序心有餘悸。設計

面向過程

面向機器的語言一般狀況下被認爲是一種「低級語言」,爲了解決面向機器的語言存在的問題,計算機科學的前輩們又建立了面向過程的語言。面向過程的語言被認爲是一種「高級語言」,相比面向機器的語言來講,面向過程的語言已經再也不關注機器自己的操做指令、存儲等方面,而是關注如何一步一步的解決具體的問題,即:解決問題的過程,這應該也是面向過程說法的來由。對象

相比面向機器的思想來講,面向過程是一次思想上的飛躍,將程序員從複雜的機器操做和運行的細節中解放出來,轉而關注具體須要解決的問題;面向過程的語言也再也不須要和具體的機器綁定,從而具有了移植性和通用性;面向過程的語言自己也更加容易編寫和維護。這些因素疊加起來,大大減輕了程序員的負擔,提高了程序員的工做效率,從而促進了軟件行業的快速發展。ip

典型的面向過程的語言有:COBOL、FORTRAN、BASIC、C語言等。開發

結構化程序設計

隨着計算機硬件的飛速發展,以及應用複雜度愈來愈高,軟件規模愈來愈大,原有的程序開發方式已經愈來愈不能知足需求了。1960年代中期開始爆發了第一次軟件危機,典型表現有軟件質量低下、項目沒法如期完成、項目嚴重超支等,由於軟件而致使的重大事故時有發生。例如1963年美國(http://en.wikipedia.org/wiki/Mariner_1) 的水手一號火箭發射失敗事故,就是由於一行FORTRAN代碼錯誤致使的。get

軟件危機最典型的例子莫過於IBM的System/360的操做系統開發。佛瑞德·布魯克斯(Frederick P. Brooks, Jr.)做爲項目主管,率領2000多個程序員夜以繼日的工做,共計花費了5000人一年的工做量,寫出將近100萬行的源碼,總共投入5億美圓,是美國的「曼哈頓」原子彈計劃投入的1/4。儘管投入如此巨大,但項目進度卻一再延遲,軟件質量也得不到保障。布魯克斯後來基於這個項目經驗而總結的《人月神話》一書,成了史上最暢銷的軟件工程書籍。源碼

爲了解決問題,在196八、1969年連續召開兩次著名的NATO會議,會議正式創造了「軟件危機」一詞,並提出了針對性的解決方法「軟件工程」。雖然「軟件工程」提出以後也曾被視爲軟件領域的銀彈,但後來事實證實,軟件工程一樣沒法解決軟件危機。

差很少同一時間,「結構化程序設計」做爲另一種解決軟件危機的方案被提出來了。 Edsger Dijkstra 於1968發表了著名的《GOTO有害論》的論文,引發了長達數年的論戰,並由此產生告終構化程序設計方法。同時,第一個結構化的程序語言Pascal也在此時誕生,並迅速流行起來。

結構化程序設計的主要特色是拋棄goto語句,採起「自頂向下、逐步細化、模塊化」的指導思想。結構化程序設計本質上仍是一種面向過程的設計思想,但經過「自頂向下、逐步細化、模塊化」的方法,將軟件的複雜度控制在必定範圍內,從而從總體上下降了軟件開發的複雜度。結構化程序方法成爲了1970年代軟件開發的潮流。

科學研究證實,人腦存在人類短時間記憶通常一次只能記住5-9個事物,這就是著名的 7+- 2原理。結構化程序設計是面向過程設計思想的一個改進,使得軟件開發更加符合人類思惟的7+-2特色。

面向對象程序設計

結構化編程的風靡在必定程度上緩解了軟件危機,然而好景不長,隨着硬件的快速發展,業務需求愈來愈複雜,以及編程應用領域愈來愈普遍,第二次軟件危機很快就到來了。

第二次軟件危機的根本緣由仍是在於軟件生產力遠遠跟不上硬件和業務的發展,相比第一次軟件危機主要體如今「複雜性」,第二次軟件危機主要體如今「可擴展性」、「可維護性」上面。傳統的面向過程(包括結構化程序設計)方法已經愈來愈不能適應快速多變的業務需求了,軟件領域迫切但願找到新的銀彈來解決軟件危機,在這種背景下,面向對象的思想開始流行起來。

面向對象的思想並非在第二次軟件危機後纔出現的,早在1967年的Simula語言中就開始提出來了,但第二次軟件危機促進了面向對象的發展。 面向對象真正開始流行是在1980s年代,主要得益於C++的功勞,後來的Java、C#把面向對象推向了新的高峯。到如今爲止,面向對象已經成爲了主流的開發思想。

雖然面向對象開始也被當作解決軟件危機的銀彈,但事實證實,和軟件工程同樣,面向對象也不是銀彈,而只是一種新的軟件方法而已。

雖然面向對象並非解決軟件危機的銀彈,但和麪向過程相比,面向對象的思想更加貼近人類思惟的特色,更加脫離機器思惟,是一次軟件設計思想上的飛躍。

相關文章
相關標籤/搜索