雖說寫程式就像寫文章樣,各式各樣的風格都可以達到我們所想要的功能。不過,寫程式又像作工程一樣,必須要有層層的架構和規劃。如此一來才會比較容易維護,對於後來接手的人也能夠更容易了解我們的程式碼主要的目的。
對於寫程式這檔事,前面提到就如寫文章一樣,你可以寫得行雲流水,也可以寫的規規矩矩;你可以向下命令一樣一句一句寫,也可以有起承轉合。我今天想要向大家介紹的就是撰寫程式語言的一種方式 - 物件導向(OO, Object Oriented)。
物件導向是最貼近我們真實世界的一種撰寫方式之一,他寫起來雖然並不會比一般程序導向來的方便,但是卻會更容易被我們所了解。物件導向語言有封裝、多型、繼承等特色。舉例來說:我們在開車子的時候只需要知道怎麼使用方向盤,踩油門以及排檔等動作。當我們踩油門的時候並不需要知道當腳踩下油門時油門的噴嘴會將汽油噴出、點火、爆炸…..等等機械原理。也就是說汽車的油門將”加速”這件事情完完全全的封裝起來,使用者只需要知道”介面”,也就是油門的踏板。踩下去加油,放掉就就部會加油這件事情。
換個角度來說,今天不管是材油車、汽油車甚至是以後的加水車,我們都只需要知道”踩油門”這件事情可以加速,其他要怎麼做到加速我們就不必管了。
再來是轉型,轉型這件事情可以用上面說的汽油車、柴油車或是外來的加水車來舉例。不管事汽油車、柴油車或是瓦斯車他都是車子,都會有油門。因此,這些都可轉型為車子,都有共同的介面:油門。
那繼承是什麼呢?其實繼承從字面來看就是接收所留下來的東西。其實在程式語言裡,繼承這個字其實有點不是那麼的貼切。舉例來說,我可以說汽油車、柴油車以及瓦斯車都繼承車子。
而車子是怎麼來的呢?其實是由柴油車、汽油車以及瓦斯車歸納出來的。所以不論是柴油車、瓦斯車或者是汽油車都會有車子的資料及特性。剛好這三種車子的加速時作方式都不一樣,所以我們可以用程式來看一下轉型這個範例:
// 加速的 method
Void 幫車子加速(車子 car) {
Car.踩油門;
}
這時候不管是以上的三種車都可以利用這個 method 來執行踩油門這個功能。雖然這三種車子在加速時的原理都不一樣,但是對使用者來說都是一樣的。只需要把油門踩下去就可以前進了。
車子 myCar1 = new 汽油車();
車子 myCar2 = new 柴油車();
車子 myCar3 = new 瓦斯車();
幫車子加速(myCar1);
幫車子加速(myCar2);
幫車子加速(myCar3);
所以,如果是以物件導向來撰寫程式就可能會多出很多很多的類別,對沒寫過的人來說或許會覺得很麻煩,但是,仔細想想真實的世界上很多產品也是由一群人所完成的,以飛機來說它有幾千幾萬個零件,如果沒有將各個部位分類好,一旦飛機出了問題起不是就廢了呢?