- 可維護性
- 擴展性
- 重複使用性
類別 這個概念有點像是要在程式的世界中去敘述在現實生活中、系統中的「某種」人、事、物的模板。為了敘述出這樣的角色,在物件導向的作法上我們會找出與這個角色相關的特徵以及動作。而在類別中我們有專門的術語來形容特徵,也就是「屬性」;形容動作,也就是「方法」。在圖一中,我們以圖示的方式來看employee的這個例子。
在公司裡,我們可以發現每個員工都會有一些屬於自己的基本資料跟各自負責的工作。我們把每一個員工都會有的基本資料跟員工都會進行的工作抽象出來就會變成類別中的屬性成員跟方法成員。在圖一中第二格中紀錄的就是我們對employee這種類別的屬性成員,第三格裡記錄的是方法成員。這邊特別要注意,在方法成員中一定得有建構子這個特別的函數存在。因為有這樣的方法我們才可以透過類別的來產生實例。那至於建構子要怎麼寫,這個就得視你使用的語言來做調整。有些語言是有預設的建構子,只要你宣告類別就算不特別寫,也可以呼叫這個函數。但有一些語言或特別的函數庫在使用上就會需要你把這個函數寫清楚。 圖一、類別範例employee
建構子?實例?那又是什麼?
我們換個例子來解釋~
類別與實例的關係就像章魚燒烤盤與章魚燒的關係,一個規範好了這種好吃麵糊的形狀,另一個則是章魚燒本人。建構子啟動「製作章魚燒」的這個關鍵動作。在圖二中,takoyaki = Takoyaki.new()是ruby 中呼叫建構子的語法。當我們使用建構子時,章魚燒機就會根據我們的預設原料跟流程去做一盒章魚燒給你。但假使今天你不想吃原味章魚燒而是芥末章魚燒該怎麼辦呢?那麼你可以在定義class Takoyaki的建構子函數時去指定引數得包含flavor的變數,並將這項資料存在相關的屬性成員欄位中。 圖二、章魚燒機與章魚燒
PICTURE上的實作
這次的範例很簡單,我們只會使用一個按鈕來實驗類別的效果!Ruby Script的部分則是有
- init.rb : Startup script,在此定義Class
- timerTest.rb : Timer script,會在進入畫面時彈出MessageBox顯示當前實例狀態
- variableCheck.rb : 按鈕會呼叫此腳本,彈出MessageBox顯示更改後的實例狀態
在init.rb (圖三)這個startup腳本裡我定義了FANUC這個class。因為模板肯定是一開始就要準備好的材料,所以建議放在Startup script讓專案在剛開始編譯時就先認識它。在ruby 中你可以使用attr_accessor來宣告屬性成員。那可以看到裡面有一個initialize()這樣的函數,它就是剛才提到的建構子函數。在這個函數中我們會把傳入的參數存在個實例的屬性成員欄位並且跳出一個MessgeBox顯示當前姓名。
在這個範例中我的設計是你可以輸入員工的基本資訊來建立員工的實例。此外,員工這個類別還可以做namePrint() 跟 addSalary()兩種功能。
程式的最後是為了使用timerScript而使用的set_handler()函數,這部分就不贅述囉! 圖三、init.rb
Okay~~那接下來我們來看一打開App會執行的timerTest裡寫了什麼(圖四) 圖四、timerTest.rb
這裡你可以看到我就只有呼叫建構子建立一個名叫RSA的實例!
根據我們傳入的參數可以知道RSA這個人呢,他所儲存的相關屬性資料有
- name = RSA
- department = DX
- salary = 100
要讀寫實例的屬性資料,你只需要在【實例名稱】.【屬性名稱】就可以對這筆資料做讀寫。
想要使用實例的方法則是使用【實例名稱】.【方法】就可以啦!是不是很直觀、簡潔?
所以以上面的說明來理解這兩行程式碼,我在第一行把 RSA 的"name" 改成了 "Bernard"。並且在第二行透過 MessageBox 來顯示RSA 的 name。
以上是這次的類別使用分享。個人是覺得只要一熟悉這樣的概念,在做軟體開發上會更事半功倍!不僅是像開頭所說的幾個好處,以提高軟體的重用性、擴充性、可維護性在軟體開發生命週期中進行時間或金錢上的cost down。物件導向在當今的軟體開發領域中是一個太重要、太盛行的概念,所以有時候可能參考其他人的程式範例也會看到這樣的寫法。若是沒有掌握基本觀念的狀態下來進行程式碼的閱讀,那真的是非常痛苦的一件事。此外,在實際使用上的經驗也會發現越來越多函數庫都是以這樣的方式在做開發。所以為了使用更多的好用工具,花點時間了解物件導向我覺得是滿划算的投資。
希望透過以上的分享,可以讓閱讀這篇文章的你感受到物件導向的魅力並產生興趣與動力了解他!


