2011年3月5日 星期六

漫談物件導向(二) - 類別與物件概念

類別與物件概念

物件導向程式世界與現實生活中的觀念是相當契合的,對照實際生活中我們處理事情的模式,你會發現物件導向是很生活化的。日常週遭中存在著許多與我們生活息息相關的物件,電腦、原子筆、手機…等,物件也可以是其它物件組合而成,比方說電腦是由主機、螢幕、鍵盤、滑鼠等物件組成;原子筆由筆蓋、筆桿、筆蕊組成。

同一類的物件彼此間或許有些許差異,但其基本功能及與外界互動的模式是共通的。例如各家廠牌的錄音機雖然造型、顏色、輸出功率…等規格有所不同,但按Record鍵錄音、按Play鍵放音等操作方法則是共通的。以物件導向的術語與觀點而言,同一類的物件可以有不同的屬性值 (property values, Java語言稱為fields),但會提供一致的操作方法 (methods)。

而我們也習慣將物件分門別類,被歸屬到同一類的物件都有著共通特性,這如同在生物學上將物種分類為『界門綱目科屬種』七個層次,底層會繼承 ( inherit) 上層的共通特。例如電腦可分為伺服電腦、桌上型電腦、掌上型電腦、筆記型電腦及平板電腦,由於都是屬於電腦類,因此有其共通性,但桌上型電腦、筆記型電腦及掌上型電腦之間還是有些差異;即使同一家廠牌,不同型號電腦規格也有差異,表示不同子類別除了繼承其父類別共通特性外,還可衍生出自己的獨特性

換言之,類別定義有如規格描述,根據類別定義所建置的物件擁有共通的特徴 (或屬性,attribute) 與功能 (或方法,method)。比方說,電腦類別具備算術邏輯運算、資料輸出入、儲存資料等功能,雖然不同型號的電腦產品 (物件實體, instance) 間,規格會有所差異,但其基本狀態與行為還是一樣的。電腦廠商在推出新款電腦時,會先設計產品藍圖 (類別設計階段,class design),下游然後生產線即可依照產品藍圖生產系列電腦產品 (物件實作階段,implementation)。但即使同一型號電腦,電腦商家還是可針對不同消費者進行客制化 (customize),例如可加裝主記憶體、硬碟、或CD-RW等。

另外以個人資料為例,有些資料是屬於私密性質 (private) 並不讓其它人知道,有些訊息則同意公開 (public) 與它人分享,而某些資訊則是有限度的公開(protected),只會讓親朋好友知道,這些概念也都被引用到物件導向程式語言的規範中,類別提供的方法可分為Public、Protected、Package及Private四種存取層級