JAVA初學:關於“面對物件”的一些理解與感悟
從C語言開始接觸程式設計,“面向過程”的程式設計思想已經深深地刻在了腦海中。凡著手一個問題,必會不由自主地把它給分成幾步,考慮到每一個數據、每一步要得到的結果,剖析其中的邏輯結構。至此應該也算是入了門,但是未曾做過一些比較大的程式,對C/C++的理解還停留在比較淺薄的層次。
剛開始接觸JAVA時也總是寫得一團糟。因為沒有“面對物件”的思想,總是把JAVA當作C語言來寫,而且也理解不透物件的“例項化”以及眾多實用物件(如檔案流、監聽器等)的使用方法。直到自己獨立做了一箇中小型的程式,其中涉及了多個類、視窗還有多執行緒等東西,漸漸地對“面對物件”的思想有了些瞭解。
當我們打開了編譯器,就像是打開了一個新世界的大門,這裡各種各樣的東西我們都稱之為”物件“。而我們要做的就是:
1、就是先給這個世界”下定義“——什麼是貓,什麼是狗?貓會幹什麼?狗呢?它們的共同點是什麼?也就是寫好每一個類的類體,包括資料(屬性)、建構函式(基因)和方 法(行為)等。
2、把他們”例項化“——”定義“僅僅是一個概念而已,並不是實際存在的。正如你說這個世界裡有貓這種動物,它有毛髮會跑會叫,但是在你把它“例項化”之前,它只是存在於你腦海中的一個概念,一個畫稿上的設計圖。 這一步要做的就是把他們創造出來,這隻貓叫小黑,皮毛是黃色的,跑的速度是3米每秒,會“喵喵喵”地叫;那隻貓叫呆瓜,皮毛是灰色的,跑的速度是1米每秒,也會“喵喵”地叫……這樣他們才活蹦亂跳地“誕生了”。
3、在函式中指示他們做一些事情——比如我讓小黑和呆瓜都叫兩聲聽聽,就可以通過他們的名字加方法名讓他們去完成這個任務而完全不用管他們到底是怎麼叫出聲音來的,是先讓聲帶震動發出聲音,然後張大嘴巴讓聲音跑出來還是先張大嘴巴再讓聲帶振動發聲?我不用操這心,它們自己知道怎麼叫。正如馬士兵老師所說“面向過程和麵向物件,就好比開車,面對過程開車時你要做的是想好先點火再打轉向、然後踩下剎車放下手剎什麼的一步一步該怎麼辦,而面對物件就是我只要對車說我要開車,它自己就會替你完成這一系列動作”。(馬士兵老師的坦克大戰相關視訊讓我收益匪淺)
其實這中間都離不開邏輯設計,有時候類與類之間需要相互呼叫,方法會有一些交叉,個人感覺這是最困難的部分,目前還沒有較為深刻的體會。此外,JAVA本身也提供了非常多的類定義,需要用的時候只要把他們“例項化”就可以使用了,特別方便。多讀多寫。