2013年7月1日 星期一

Java程式語言入門 - C與JAVA的轉換

Java其實很簡單~又很好用...但許多人不這麼認為,以我過來人的解讀,是物件導向四個字太艱深了,其實一腳踏進去後才知道水並沒有那麼深。本篇我試著用較簡短白話的方式敘述兩者差異與轉換,不過我並不是做學問的人,用字遣辭難免不夠專業,還請包含!



何謂物件導向?

在物件導向的程式語言裡,很常講到類別(class)物件(object)類別像是一個模具的概念,而物件則是用模具生產出的商品或零件,所以說類別只是一個特徵的描述,物件才是真正擁有特徵的實體(instance),這樣的概念放在C語言裡,類別就相當於結構(structure),而物件就像是一塊有被配置記憶體空間的結構,如果你做過這樣的動作,其實你已經在嘗試實現物件導向了,如果你在C語言裡完全沒做過這樣的事,原因可能是你寫的程式太小或偏向流程控制。

不過在C語言裡實現物件導向是一件頗為辛苦的工作,通常會看到一堆的"點"跟"箭頭"還有"型別轉換"與"記憶體配置"的程式碼,原因是每塊物件的記憶體必須完全由程式設計師操控,如果操控不好輕則效能不彰重則當機異常,也因為上述種種繁雜的動作導致程式碼不易解讀與維護。

那Java又怎麼克服這麼多繁雜的問題呢?先講最簡單的,Java有自己的記憶體回收機制,我們可以簡單方便的建立與拋棄一個物件,幾乎可以不用擔心記憶體洩漏(memory leak)的問題。 物件裡可以有自己的成員(member)變數(variable)與函數(method),在成員函數裡可以直接操作所屬的物件,不需要像C語言必須把物件的位置丟到函數裡。 物件導向還有所謂的抽象(abstract)類別,可以用一個函數處理多種不同類別卻有相同特徵的物件。



繼承

另一個物件導向最大的經隨還沒提到,就是繼承(inherit,extend)。 繼承就像生物的演化一樣厲害,舉個例子,我們要做兩個類別描述男生跟女生,以下有兩種寫法,左邊不用繼承,右邊使用繼承,男生女生都有共同的特徵(age、height、weight)與各自的特徵(tie_color、skirt_color), 右邊明顯有比較強的結構,無論男生女生都共同繼承了人類的特徵,假設要新增一個"老先生"的類別肯定也是右邊的容易。 繼承很大的用處就是在他的延展性,我自己寫的類別只要繼承了一個龐大的類別,就能同時擁有跟父類別同樣的特性,進一步就能改寫成更適合自己的模組。





差異

以下針對程式碼的編寫做一些簡單的敘述,左邊是C,右邊是Java。



Java有封裝(package)的概念,有點類似將類別做"分類"或namespace的概念,寫程式時可以自定將類別封裝在哪個package名稱下,或匯入(import)其他的package,就像C語言裡的include一樣的作用,但結構性更強。

也因為結構較強,Java允許在不同的類別下宣告同樣名稱的成員,允許在不同package下宣告同樣名稱的類別,總之階層分明該有的特性都因此展現出來了。

Java裡的物件變數相當於一個指標,而物件要透過實體化(new)才會配置記憶體產生實體(instance),物件所有成員的存取都是用"點",所以不需要在指標上著墨太多,就直接稱呼它是物件!

static成員屬於(belongs)類別,不屬於物件,也就是說不管實體化了多少個物件,static的成員都不會因此增加,重點在於"static成員不屬於物件"。

---

本篇就到這裡了,寫的都是觀念,更詳盡的基礎只要到書局翻翻書,再寫(看)幾個範例程式就可以掌握了,感謝各位收看。

沒有留言:

張貼留言

本人僅以個人知識經驗分享,多所無知,難免有錯,還請見諒。