《學不會的Java,消不了的憂愁》之四——獻給那些酷愛計算機編程的人們
發言者:jigenghua
時 間:2001/03/12 23:01:47 來 自:www.Javaunion.org
--------------------------------------------------------------------------------
這一回,我不想談那麼多的感概了,我用自己的話來說說Java,請大家來做幾道判斷題,認為對的,你可以不開聲,認為錯的,可不要忘了指出來。所有這樣問題,面向像我一樣的菜鳥,大蝦也可以看看。
學習一和編程語言,不外乎兩種背景:其一,興趣愛好;其二,工作需要。在學校裡,可能還有第三種背景——那就是必修課程。
在我看來,憑興趣愛好學的東西學得很快,印象也很深,但沒有很好地結合實踐應用,自己也想不出什麼真正有價值的課題去實現它,所以這種知識水平並不是很高。我見過很多這樣的朋友,他們對VFP、VC的道理懂得真不少,可一問到一些真正有用的東西,他們回答得總是那麼不盡人意。我曾經深愛著C,也會用它編一些簡單的小程序,不過,從來就沒有用它做過什麼工程,所以,在外面應聘的時候,我不敢說我精通C,雖然知道自己的C水平很不錯了。不過呢,話又說回來,一旦有了理論水平和基本功,真正遇到難題的時候,往往都能很快解決,所以憑興趣愛好掌握的東西用途也是挺大的。
相反,因為工作的需要,自己不得不去掌握的東西一旦自己搞懂了,印象會更深刻。由於所有的“知識”都是建立在以“用”的基礎上,掌握到了的東西就是活生生用得到的、看得到的東西,所以談不上什麼學不致用的問題。這種知識處處以實踐為基礎,一分錢一分貨,最能解決實際問題,這也就是用工單位為什麼那麼注重實際工作經驗的真正原因:招到有經驗的老手,新工作上手很快,工作質量也很高!(我沒有什麼學歷,中專生一個,但我早在95年的時候就開始用Fox真槍實刀地干,半工半讀,為工商所、商場、酒店、制造廠、甚至我的校圖書館免費開發了一個又一個的數據庫應用軟件,這些軟件,在我們江西內地,大多數至今還活得挺好的。這麼多的軟件,為我98年四月份在深圳能找到一份別人看來復雜、而我看來一般般的數據庫網絡編程工作打下了了不起的基礎。來到這裡不到半年,一家很大的電子廠,不知是通過什麼渠道,連打三次電話給我,叫我過去幫他們搞編程,我想學Java,不想再搞VFP了,所以沒有答應,雖然對方開的報酬比我現在要高一個檔次。)我的經歷告訴我,學歷並不是很重要的,關鍵是真正的水平,你能帶著你親手制作出來的CPU芯片到聯想去應聘,哪怕你從來沒有進過校門,柳傳志也會叫你一聲干爹。明白了能力的“妹”力以後,我不再刻意追求什麼本科學歷、研究生學歷,我只想好好學點有用的東西,用能力向別人展現自己的風采!(有點吃不到葡萄就不吃葡萄的心態)
至於第三種學習知識的方法——為了修完課程而學,通過這種方式來掌握知識,基本上沒有什麼好談的了,一句話,沒有什麼用啦!或許我講的太武斷太偏激。
我學JAVA,既不完全是憑興趣愛好,也不是因為工作壓得非學不可,只是基於學JAVA的一種潮流,和不久的將來的工作需要,錯過了學VC、VB的瘋狂時代,也錯過了學CGI、ASP的關鍵歲月,我不能再錯過Java,我輸不起!
正是因為以上的原因,我把Java建立在將來的應用上,所以學得不是那麼的累,人沒有壓力學東西往往很慢。一個面向對象的概念,看了一遍又一遍,不但弄不明“面向對象”是何物,連對象是什麼東東,都似懂非懂,還以為面向對象是把臉面向著對象(Face to object),就算這樣理解,面向著對象干什麼?發神經啊?很多很多的書,標題寫得不錯——“什麼叫面向對象”,抑或“面向對象的概念”,可看完之後,還是一頭霧水。
最令人惱火的是很多書對類(Class)的定義:具有相同特性的多個對象的一個實體。去他奶奶的,老子連對象還不太懂,就用對象來說明類的定義,還加上一個怪異的詞語——實體。這樣的定義能說明什麼問題?也許是寫書的人太聰明了,以為大家的頭腦都是抽象的,不會想木頭、石頭、狼和兔子之類的具體東西。
他完全可以想到這個詞:模板,用模板代替實體,就成了類是具有相同特性的多個對象的一個模板,這樣呆板的解釋,當然不能讓初學者對類這個重中之重的概念留下難於忘懷的印象。假如他能像我這樣解釋,請看下文:
傳說中上帝造人是用模子來造的,上帝造人用的模子就是類(Class),當然模子也不是天生的,由上帝根據自己的想象制作,作好了模子以後,造人可就方便啦,幾乎不用動腦筋,泥巴往模子裡一丟,一個人就出來了,出來了的這個人就有了眼情啦、鼻子啦、耳朵啦,等等,最重要的是,這個人會說話,會唱歌、跳舞......
以上這個例子中,類就是模子,專門用來制作一些有很多共同點的實物,用模子造東西的最大好處就是可以偷懶,一勞永逸,用類來開發軟件的妙處也正在於此。模子造出來(對“造出來”這三個字打上著重號,引起讀者的注意)的東西有一個響亮的名字:對象或實例,因此,在Java裡面,我們講的對象或實例,都是指已經用類制作好了的。用類制作對象這個動作,也有一個各位不太好懂的名字——類的實例化,或叫類的一個實現,好聽嗎?你們可要記在心裡。
不知大家是否注意到,我上面說過,上帝用類造出人這種對象具有很多很多的特性,像眼情有大、眉毛有多長、牙齒有幾顆、人長得是否靓仔等等叫做對象的屬性(Attribute),一個對象視它簡單與復雜,屬性可以沒有一個,也可以有多個。而人會說話、會打架、會談戀愛……這些涉及到動作的行為叫做對象的能力(Ability),但在Java裡面叫做對象的方法(Method),假如你的思想被VC化,你把它暫時理解為函數也不是不可以的。
通常我們講的“面向對象編程”這種方法,或說這種思想,就是要求大家學習上帝造人這種方式、這種思想,把所有程序分成一個一個的功能塊,有些功能塊不僅你正在編寫的這個程序用得到,將來編寫的其它程序也可能用得到,正是你會這麼想,把一些通用的功能塊抽出來、概括出來,用一個獨立的、能被其它類制造時調用的名字命名它。用這種思想去設計程序,叫什麼面向對象編程(OOP)。
這一貼,我講了學知識的三種背景,不同的背景學知識會有不同的方法,從面產生不同的效果。
我也介紹了類、對象、面向對象編程、對象的屬性、對象的方法這些基本的概念,大家懂了嗎?
下一貼,我將接著介紹類庫的概念,還有父類、子類、類與類之間的遺傳(繼承),並教大家怎樣快速用JDK這個工具
開發小程序。雖然有很多的可視化開發工具可以用來開發JAVA軟件,但不懂使用JDK工具的Java開發人員,跟只懂Linux的X Windows不懂它的shell操作一樣,屬於低能的操作員。
所有這些貼子,都是出自於個人愛好,連載出來,目的只有一個:為了別人,也為了自己把Java學好!
請看下貼《學不會的Java,消不了的憂愁》之五——獻給那些酷愛計算機編程的人們。