狹長的房間面積甚是寬廣,房間中杵著兩排大大小小的立柱,將空間簡單的分割開來。透過屋頂?shù)臍獯埃﹃枌⒐獍咄渡湓诹⒅?,泛著令人著迷的金紅色光暈。屋內(nèi)人氣鼎沸,亂糟糟的擠成數(shù)堆,來者多是自帶板凳兒,關(guān)系相近的聚坐在一起,亂哄哄的討論著。屋子的一端放置著一個半米的高臺,高臺上一面木質(zhì)的三角架支撐的黑板。高臺上一位看著年歲不大的少年,背著身子,拿著粉筆在黑板上寫著什么。
而現(xiàn)在就是每天放學(xué)后的興趣社團(tuán)的計算機(jī)理論課程時間。眾人濟(jì)濟(jì)一堂,多是學(xué)生年紀(jì)的聽課者,也有少數(shù)幾個年紀(jì)較大者在內(nèi),像是學(xué)校老師。聽課的人也不分年齡職位,只算先來后到,就這樣一幫大人孩子坐著小板凳,基本呈一個半圓圍坐在黑版前,仰著頭聽著韓庶講課??催@架勢倒不像是來學(xué)習(xí)計算機(jī)的,倒像是解放前解放軍部隊內(nèi)搞得識字文化補(bǔ)習(xí)班。
這個大房間,原本是團(tuán)部放置兵團(tuán)農(nóng)用機(jī)械的倉庫,緊挨著學(xué)校。由于年初韓庶的改造團(tuán)部中學(xué)的提案,在風(fēng)力發(fā)電機(jī)廠通過。有了出錢的部門,團(tuán)部也樂意改造學(xué)校,根據(jù)韓庶當(dāng)初定下的學(xué)校改造沙盤,包括兩個校區(qū)公園,一個全功能開放式的體育場,學(xué)校的面積至少也要擴(kuò)大現(xiàn)在的5倍。在一番討價還價之后,團(tuán)部終于將學(xué)校附近的地盤全部劃歸學(xué)校,學(xué)校附近的公用建筑全部搬遷。于是這個大房間現(xiàn)在就成為了學(xué)校的產(chǎn)業(yè)。
至于現(xiàn)在的這個學(xué)習(xí)班也已經(jīng)有些個歷史了,去年韓庶父子組裝了3臺自己開發(fā)的8086微機(jī)后,韓庶為了培養(yǎng)自己的人才儲備,將原來參與漢字拆分的小團(tuán)體擴(kuò)大,搞了一個校內(nèi)計算機(jī)興趣社團(tuán)。隨著韓庶的名望日漸高漲,這個小社團(tuán)也日益興旺,由開始的幾臺微機(jī),十來個孩子,在韓庶家書房上機(jī)實習(xí)開始,日漸擴(kuò)大。到了后來加入的學(xué)生越來越多,實習(xí)地點(diǎn)也由韓庶家的書房,轉(zhuǎn)移到了學(xué)校的一間空教室。而微機(jī)的數(shù)量,再次委托林家大伯從香港采購了原料,韓庶發(fā)動同學(xué)們自己動手制版焊接,現(xiàn)在已經(jīng)擴(kuò)展到了26臺。
學(xué)校改造工程開始后,由于原來的校區(qū)正在新建新的教學(xué)大樓,空余的教室不足,再加上社團(tuán)的人員持續(xù)增加。于是,這間數(shù)十米長的倉庫,被一分為二,后面半間,成了計算機(jī)房。前面半間,簡單的立了一塊黑板,算是理論課的教室。
韓庶以前剛開始講課的時侯可沒這么好的條件,就是在中午或課間在聚合著一起開發(fā)字庫的孩子們組成的團(tuán)隊自己的教室中隨便的講,學(xué)生們也就是隨便的聽,也沒有什么規(guī)矩,大家環(huán)坐在韓庶的周圍,講課的時候也不禁止他人打斷自己的講解,大家可以隨時提問,每次有人提問韓庶就會對問題進(jìn)行詳細(xì)的講解,正因為這樣韓庶的課程非常的散亂,經(jīng)常是講的題目海闊天空,有時還會偏離計算機(jī)方面的內(nèi)容,根本就沒有一個正規(guī)的安排好的課程順序。
在黑板上畫了一個簡單的示意圖,韓庶轉(zhuǎn)過身子,清了清嗓子,拔高了聲調(diào)道:“所謂的程序的最基礎(chǔ),并不是像有些專家說的那樣,‘是數(shù)據(jù)結(jié)構(gòu)加上算法’。所謂程序其實從更核心的意義上說,是一種描述方法。用一種特殊的表述方式,來描述一種既定的規(guī)則或事物。這個規(guī)則既可以是真是存在的,也可以是人類隨意定義的,這個事物既可以是真實存在的,也可以是想象虛擬的……”
“老師,啥叫虛擬事物和人類定義的規(guī)則?沒聽懂,能不能舉個例子?!焙鋈?,底下有個人打斷了韓庶的話語。
韓庶也并不嫌被人打斷了課程,耐心的解釋道:“嗯……比如,我們可以用程序來定義或描述一個物體的運(yùn)動規(guī)則,比如一個輪子,一般就只能前后滾動。而一個象棋的棋子‘馬’,就只能在棋盤上跳‘日’字格,像輪子的運(yùn)動規(guī)則就是現(xiàn)實中本身存在的,象棋‘馬’的運(yùn)動規(guī)則,卻是人類定義的規(guī)則。再比如,程序可以描述某個現(xiàn)實中存在的蘋果,也可以描述幻想中才有的仙桃。那個蘋果是現(xiàn)實中存在的物體,而仙桃卻只是想象虛擬的存在?,F(xiàn)在都明白了么?”
在韓庶看來,任何的紀(jì)律和規(guī)則,無非是為更好的獲取結(jié)果服務(wù)的,一旦脫離了這個前提,任何的規(guī)則都是毫無用處的教條。而課堂紀(jì)律和禮貌,也無非是為了學(xué)生更好的學(xué)習(xí)和掌握知識所存在的,如果能有利于學(xué)生更好的掌握知識,所謂的課堂紀(jì)律,甚至是所謂的‘師道尊嚴(yán)’都可以完全無視。而韓庶本人也更欣賞這種自由平等的對話討論式的教學(xué)氛圍。
韓庶微微一頓,等待回答。下面卻一片沉默,證明了這個問題已經(jīng)被所有的學(xué)員接受。
韓庶這才又繼續(xù)道:“其實這種描述從本質(zhì)上說就和我們小學(xué)生寫得作文和造句沒有多大的區(qū)別,你只要將這個規(guī)則或物體將他拆分開來,那么用什么方法來看待或拆解這個問題呢?……”接著上一個話題,韓庶繼續(xù)講解著計算機(jī)的程序的概念,和一系列的編程思想以及現(xiàn)有的實際編程方法。闡述著自己對編程的理解,對軟件分析和編程思想的比較。
穿著一身改小的舊軍裝,少年站在三腳架前簡單的黑板前,面龐透著演講時興奮的紅暈,一雙黝黑澄清的眼睛炯炯的閃著自信的光芒,雖然是隨意的站著但也透出了那么一股令人信服的力量。
穿著帶補(bǔ)丁的舊軍裝的少年,和郁沉的黑板形成了一個鮮明的對比。講臺上一個半大的孩子在老氣橫秋的講著課,講臺下一群大人孩子仰著頭,乖乖的坐在小板凳上,除去眼光中閃動著渴望求知的光芒,情形看上去多少有些可笑。
“噗嗤”不知誰忍不住笑出聲來。
忽然間,教室中雜燥的聲音消失無蹤,安靜的有些詭異。所有的目光,遁尋著笑聲,集中在正笑得暢快的年輕人身上。好像忽然感覺到了氣氛的怪異,看看前后左右鄙視的目光,小伙的笑聲噶然而止,本來黝黑的面孔一時倒也看不出什么,但那怪異的表情顯出主人的尷尬。一道道飽含著鄙夷的目光,讓年輕人一時間兩頰火燙,甚至無地自容。
講臺上,絲毫沒有被小插曲影響到思路的韓庶,依然不慌不忙的在黑板上畫著圖形,歪歪斜斜的線條,不甚均勻的分叉,構(gòu)成了一棵倒著生長的樹。有一個樹根,然后由樹根伸出若干個樹枝狀分叉。一些分叉上,又再次分別伸出若干個分叉,如此往復(fù)的形成了4個層次,每個線條枝杈的上面寫著一些個名詞。
畫完圖形,韓庶拍了拍手上的粉筆灰,激起一小股煙塵,這才好整以暇的接著道:“我們之所以需要計算機(jī),就是需要計算機(jī)為我們?nèi)祟惤鉀Q一些問題,可是怎么解決人類發(fā)現(xiàn)類發(fā)現(xiàn)的各種問題呢?
早期,人們?yōu)榱私鉀Q問題,總是將問題進(jìn)行抽象。將這個問題分成數(shù)據(jù),數(shù)據(jù)之間的靜態(tài)關(guān)系,還有數(shù)據(jù)之間動態(tài)關(guān)系,以及描述這種關(guān)系的計算方法。于是就產(chǎn)生了數(shù)據(jù)加算法的模塊化程序構(gòu)造方式,關(guān)于模塊化程序構(gòu)造已經(jīng)在早先的課程中講過,我就不再重復(fù)了。
可是有些問題非常的復(fù)雜,牽扯到的因素也非常的多時,這種的數(shù)學(xué)的抽象方式將變得非常的復(fù)雜。有時候甚至就會變成一種幾乎不可能完成的任務(wù)。
那么有沒有一種更好的解決問題的方法呢?
答案是,有。
這種方法就是:我們可以用某種方式,將問題中的各種因素,完全的獨(dú)立出來。在將獨(dú)立的因素描述完成后,我們只需描述每個因素之間的相互關(guān)系,不用在關(guān)心這些關(guān)系所產(chǎn)生的實際效果,那是有獨(dú)立的因素本身決定的。
這就像是為了管理很大的國家,而分封的諸侯國,每個諸侯國都是獨(dú)立的,諸侯過與外界發(fā)生了關(guān)系,那么對這種關(guān)系的實際反應(yīng)是有諸侯國本身來決定的。這樣我們就極大的降低了復(fù)雜問題的難度,將復(fù)雜的情況分成了兩個獨(dú)立的系統(tǒng)。
1:每個諸侯國內(nèi)部的結(jié)構(gòu)。2:諸侯國之間發(fā)生了一些什么樣的相互影響。
這樣,復(fù)雜的問題的邏輯關(guān)系,不再是亂糟糟的一片,關(guān)系相互牽涉。問題變得更有條理,也更簡單了。我們將這些獨(dú)立的因素,這些獨(dú)立的諸侯國稱之為對象,解決問題時,就像面對著一個個個實際的單獨(dú)物體一般,所以這種解決問題的思考方式就有了一個非常形象的名字。
面對對象方法。
”
韓庶盡量的用淺顯易懂的話語,來講著這些枯燥的東西。
“老師,沒有搞明白對象,和模塊的區(qū)別,不是都是將問題拆分么?”一個學(xué)生有些莫名其妙,這樣復(fù)雜的而又抽象的概念相當(dāng)?shù)娜菀谆煜?br/>
“面對對象并不是一種簡單的拆分問題,而是從根本上,將問題中的各個部分看做獨(dú)立的事物,將每個事物都當(dāng)作一個單獨(dú)的個體,而不去考慮物體內(nèi)部的詳細(xì)情況。而模塊只是簡單的將問題的邏輯關(guān)系,劃分成不同的獨(dú)立的部分。而邏輯關(guān)系本身之間會有相互的牽扯。這就像是,……”看著底下的學(xué)生,無論是成人還是少年學(xué)生,依舊茫然一片,韓庶微微的沉吟著,在心里尋找著恰當(dāng)?shù)谋扔鳌?br/>
片刻韓庶抬起頭,接著道:“對象就像是國家中的一個個諸侯國,諸侯國本身是獨(dú)立的個體,所有的反應(yīng)和變化都是在諸侯國的內(nèi)部完成,不為外界所干涉。而模塊,更像是一個是國家政府中的各個部門,部門之間的關(guān)系是相當(dāng)復(fù)雜的,部門之間也不是完全獨(dú)立的個體,而是會相互影響的。”費(fèi)了好大的勁兒,韓庶總算是找到了一個比較貼切的實際比喻。
“那豈不是面對對象要比模塊化還要低級很多,大伙兒都知道一個統(tǒng)一的政府,效率要遠(yuǎn)遠(yuǎn)高于諸侯分治,用了這種方法不是反倒是一種倒退?用這種低效率的方法,簡直就是浪費(fèi)資源,應(yīng)該是沒有用途和前途的吧?!比巳旱淖詈螅粋€略顯瘦弱的年輕男子,站的如松筆直,高傲抬起的下巴微微的上揚(yáng)著,鼻梁上厚厚的鏡片反射著不屑的目光。
李力勤有些后悔來這個鳥不拉屎的地方,本來還以為這個路修遠(yuǎn)是那個了不起的隱士高人呢,沒想到一來看到的卻是一個什么都不是的小屁孩兒。聽了一會兒這個小孩兒的講課。雖然課是講的不錯,也有些新的東西。
李力勤知道這個面對對象方法,這是在國外剛剛興起的一種問題解決方法,首先被應(yīng)用在了程序編制領(lǐng)域。這種面對對象方法不只是一種編程方法,嚴(yán)格的來說,這種方法,其實是一種人類思考、解決問題的方法。這種方法雖然從某些角度上來說是非常完美的,但是用在計算機(jī)程序編制的實現(xiàn)上,卻有著幾乎是致命的缺陷,那就是效率低下。
李力勤就是那個被同事們稱作白眼狼的家伙,在研究所內(nèi)也是一個頂針的主兒。雖然李力勤本身是搞硬件的,是自從對路修遠(yuǎn)的那篇《面對對象硬件設(shè)計方法》感興趣之后,對這種主要被應(yīng)用在軟件中的方法,進(jìn)行了仔細(xì)的研究。所以在李力勤看來,韓庶這種只說好處,卻極大的忽略了缺點(diǎn)的作法是極不負(fù)責(zé)的。
要知道在哪個時代計算機(jī)資源是非常珍貴的,計算機(jī)的每個內(nèi)存字節(jié)都要被充分的利用,每個指令時間都是寶貴的,如何能為了一點(diǎn)點(diǎn)的使用的方便就作這樣無謂的浪費(fèi)?所以在李力勤看來,韓庶的這個課程也就變成了,糊弄糊弄外行夸夸其談的騙子講座,本身興致高昂的李力勤,不禁大失所望??粗∑ê⑦€在這里鼓吹著所謂的面對對象方法,而且在言辭中也沒有一點(diǎn)點(diǎn)新意,再也忍不住的李力勤勃然而起。
×××××××××××××××××××××××××××××××××××××××
【下面黑括號中的是計算機(jī)知識,不喜者可以略過,不影響劇情】
【如果要想在編程中用面對對象的方法,就面臨著在執(zhí)行效率上的損失。因為在面對對象的概念里,可以讓兩個不同性狀的對象,做同一種名稱的操作。種名字相同的操作,在面臨不同的操作對象時,表現(xiàn)出不同的性狀和結(jié)果。
比如:加法這種操作,在普通的編程方法中,一般的文字串是不可以做加法操作的,可是在面對對象的方法中,完全可用加號來連接兩個文字串,將兩個文字串合并成一個文字串??赏瑯拥募犹?,對普通的數(shù)字來說只是普通的加法。
還可以將這個概念引申開去,假設(shè)有一個游戲程序,其中有兩個機(jī)器人,將這兩個機(jī)器人相加完全可以得到一個組合機(jī)器人。
這是一種重大的突破。這在面對對象的方法中叫多態(tài)性。就是一種描述,表現(xiàn)出多種狀態(tài)。這對大的軟件工程是非常有用的,使用對象的一方,完全可以不必關(guān)心對象的真實特性和內(nèi)部細(xì)節(jié)??梢杂靡环N普通的操作來進(jìn)行操作,完全不必?fù)?dān)心操作的結(jié)果會有意外。這樣即使在缺少資料,或甚至于沒有資料的情況下,一方可以非常容易的,非常自然的使用另一方提供的軟件部件。
但是這種方法不是沒有代價的。這種方法實現(xiàn)的時候:每個對象加載時,要在計算機(jī)內(nèi)安裝一個本對象的詳細(xì)功能說明表格。這個說明表,將對象的性質(zhì)說明、對象可進(jìn)行的操作、這個操作的細(xì)節(jié)指向,等等,都要一一登記在對象說明表格中。在使用對象的時候,編譯系統(tǒng)會產(chǎn)生一段額外的代碼,這段代碼會自動的查閱這個張表,并且分析后根據(jù)表內(nèi)關(guān)于這個對象的信息作出正確的判斷,使用正確的操作。
于是,對象的這個說明表,和編譯器產(chǎn)生的額外的查詢分析代碼,都要占用大量的內(nèi)存空間。在查用表和分析表中的數(shù)據(jù)時,都要花費(fèi)更多的時間。而用面對對象語言編制的程序中,對象無處不在。在有些面向?qū)ο笳Z言中,甚至是簡單的整數(shù),都被嚴(yán)格的作為對象處理。這樣,每次的操作對象時,都要這樣去查表、分析表。
由此,程序的執(zhí)行效率將有極大的損失,在一些面向?qū)ο笳Z言中,這種的效率損失甚至是連大型機(jī)都不可忍受的。而這是面對對象方法的無法克服的障礙?!?