直播中
軟件開發(fā)的過程就是人們使用各種計(jì)算機(jī)語言將人們關(guān)心的現(xiàn)實(shí)世界映射到計(jì)算機(jī)世界的過程;
現(xiàn)在的計(jì)算機(jī)的數(shù)學(xué)理論基礎(chǔ)是由計(jì)算機(jī)的開山鼻祖,大名鼎鼎的圖靈于1937年提出的圖靈機(jī)模型。 隨后不到十年,電子計(jì)算機(jī)就誕生了(1945)。(埃尼亞克)
我們都知道,它當(dāng)時(shí)的主要任務(wù)之一就是用于導(dǎo)彈彈道軌跡的計(jì)算。當(dāng)時(shí)的軟件開發(fā)(如果可以稱之為軟件開發(fā)的話)與現(xiàn)在的大不相同。為了算一道題,要有人事先把完成加減乘除等各類運(yùn)算的部件像搭積木那樣搭起來,如果換一道題,則要把這些部件分解開來,根據(jù)新的要求重新搭建,效率極低(與現(xiàn)在比)。
現(xiàn)代電子計(jì)算機(jī)的體系結(jié)構(gòu)及實(shí)際計(jì)算模型來自馮.諾依曼的思想。 1946年他和他的同事們發(fā)現(xiàn)了埃尼亞克的缺陷,發(fā)表了一份報(bào)告,提出了程序放入內(nèi)存,順序執(zhí)行的思想,這樣,當(dāng)算一道新題時(shí)就只需采取改變計(jì)算機(jī)中的程序的“軟”的方法。
英國的科學(xué)家維爾克斯實(shí)現(xiàn)了馮.諾依曼的思想,領(lǐng)導(dǎo)研制了“艾克薩克”,在技術(shù)上比埃尼亞克來了個(gè)大的飛躍。
因此,現(xiàn)在的計(jì)算機(jī)通常被稱為馮.諾依曼計(jì)算機(jī)。
軟件開發(fā)的歷史也從此正式開始。
早期程序員們使用機(jī)器語言來進(jìn)行編程運(yùn)算;隨著編譯技術(shù)的出現(xiàn),人們設(shè)計(jì)了許多更高級別的語言;這些語言擺脫了機(jī)器語言繁瑣的細(xì)節(jié),更接近于人的自然語言,迅速流行開來。
據(jù)統(tǒng)計(jì),全世界的高級語言起碼有幾千種,但從可計(jì)算性的角度看,它們的計(jì)算能力都等價(jià)于圖靈機(jī)。 已經(jīng)證明,一個(gè)計(jì)算機(jī)語言,只要除了賦值語句之外,還包括順序語句,條件語句和循環(huán)語句,它的計(jì)算能力即相當(dāng)于圖靈機(jī)。 這里當(dāng)然要排除其他技術(shù)因素的影響,如程序長度,變量個(gè)數(shù),數(shù)據(jù)精度等。
由于圖靈機(jī)的想法是把問題轉(zhuǎn)化為一步一步按規(guī)則執(zhí)行的機(jī)械求解過程,各種計(jì)算機(jī)語言也不過都是某種形式語言,因此軟件開發(fā)的過程實(shí)質(zhì)上就是程序員們對客觀世界問題域的形式化的過程。
程序員們先建立問題的模型(形式化),再用計(jì)算機(jī)語言加以合適的表達(dá),最后再輸入計(jì)算機(jī)里進(jìn)行計(jì)算。
2 從 PO(面向過程)到OO(面向?qū)ο?
從上一節(jié)的論述我們知道:
軟件開發(fā)的過程就是人們使用各種計(jì)算機(jī)語言將人們關(guān)心的現(xiàn)實(shí)世界(問題域)映射到計(jì)算機(jī)世界的過程;如下圖:
現(xiàn)實(shí)世界問題域 → 建立模型(借助某種建模思想) → 編程實(shí)現(xiàn)(借助某種編程語言) → 計(jì)算機(jī)世界執(zhí)行求解
在談?wù)揙O之前,先讓我們回顧一下高級語言的歷史。
最早的高級語言大約誕生于1945年,是德國人楚譯為他的Z-4計(jì)算機(jī)設(shè)計(jì)的Plan Calcul,比第一臺(tái)電子計(jì)算機(jī)還早幾個(gè)月;在電子計(jì)算機(jī)上實(shí)現(xiàn)的第一個(gè)高級語言是美國尤尼法克公司于1952年研制成功的Short Code;而真正得到推廣使用,至今仍在流行的第一個(gè)高級語言是美國的計(jì)算機(jī)科學(xué)家巴科斯設(shè)計(jì),并于1956年首先在IBM公司的計(jì)算機(jī)上實(shí)現(xiàn)的FORTRAN語言。
早期的高級語言主要是應(yīng)用于科學(xué)和工程計(jì)算,其代表作有FORTRAN和ALGOL60。計(jì)算機(jī)進(jìn)入商業(yè)和行政管理領(lǐng)域以后,出現(xiàn)了COBOL和 RPG等便于商界使用的語言。近年來,這類語言和數(shù)據(jù)庫技術(shù),圖形界面技術(shù)(可視化編程),面向?qū)ο蟮乃枷爰癛AD(Rapid Application Devolopment)的概念相結(jié)合,形成了一批更方便使用的所謂第四代語言(4GL),如Powerbuilder,Delphi,VB等。
前一類應(yīng)用于科學(xué)和工程計(jì)算的大型語言相對來說更為基礎(chǔ),因而也更為靈活,應(yīng)用范圍更為廣泛。 在FORTRAN,BASIC(學(xué)習(xí)型)之后,自70年代以來,模塊特征更明顯,簡單易用,可靠性強(qiáng)的PASCAL異軍突起,在世界范圍內(nèi)廣泛流行。 但進(jìn)入80年代以后,它的地位又逐漸為更實(shí)用的C語言替代。 到現(xiàn)在,C語言的地位已相當(dāng)于一種“高級匯編語言”了。
80年代后期,面向?qū)ο蟮恼Z言開始浮出水面,C++借助使用C語言的龐大程序員隊(duì)伍,一舉建立了面向?qū)ο笳Z言的老大地位。從而OO的思想正式統(tǒng)治了整個(gè)軟件開發(fā)界。C++的流行甚至使得美國軍方從80年開始大力扶植的Ada語言還未及推廣便胎死腹中了。
90年代以后,計(jì)算機(jī)世界更是發(fā)生了天翻地覆的變化,原先的單機(jī)平臺(tái)讓位于WEB,“網(wǎng)絡(luò)就是計(jì)算機(jī)”,新的語言不僅要是OO的,Visual的,更要是基于WEB的。 Java語言借INTERNET的東風(fēng),橫空出世,一夜紅遍天下,變化之快令人瞠目結(jié)舌。
上述這些變化,表面是不同的編程工具在城頭變幻大王旗,但其背后反映的卻是一種更為深刻的認(rèn)識(shí)論的改變,即你是用何種觀點(diǎn)來認(rèn)識(shí)這個(gè)世界的?
在PO中,程序員們分析了問題域之后,得到一個(gè)PO的模型,其中常見的詞語是變量,函數(shù),過程等;
PO: 現(xiàn)實(shí)世界 → 流程圖(變量,函數(shù)) → PO語言 → 執(zhí)行求解
在OO中,程序員們先得到一個(gè)OO的模型,其中常見的詞語是類,對象,方法,消息等;
OO: 現(xiàn)實(shí)世界 → 類圖(對象,方法) → OO語言 → 執(zhí)行求解
我們可以看到:
PO更接近于計(jì)算機(jī)世界的物理實(shí)現(xiàn);OO則更符合于人們的認(rèn)識(shí)習(xí)慣;
如果說,軟件危機(jī)的根源在于人們認(rèn)識(shí)表達(dá)的過程(不斷反復(fù),逐步深化)和馮.諾依曼計(jì)算機(jī)的實(shí)現(xiàn)過程(順序執(zhí)行)之間存在巨大鴻溝的話,那么從PO到OO意味這這鴻溝在逐漸縮??;
OO作為一種思想及編程語言,為軟件開發(fā)的整個(gè)過程——從分析設(shè)計(jì)到coding——提供了一個(gè)完整解決方案。 OO堪稱是軟件發(fā)展取得的里程碑式的偉大成就,人們無不為之喝彩!
一提到OO,我們將會(huì)聯(lián)想到C++,smalltalk,simula,聯(lián)想到Use Case,ROSE,Mr Jacboson 以及Rational公司,但卻很少有人會(huì)提及維特跟斯坦(Wittgenstein)。 然而,正是這位充滿傳奇色彩的哲學(xué)家,不僅第一次清楚地表達(dá)了OO的思想,更進(jìn)一步提及了OO以后的事情,及其最后的極限所在。
在目前這個(gè)變幻莫測的時(shí)代重溫并認(rèn)真思考一下這位先哲的思想,或許能使我們更加清醒,更明確前方道路的漫長。