此篇文章來探討,程式語言中的類別是甚麼?
類別:
1.概論:類別(class)像是一個模子一般,同一個模子做出來的東西都有著一致的特性。Java是以class的語法結構來封裝(encapsulation)一般化的描述。若用類別產生出來的東西稱為一個實例(instance)、物件。類別可定義為:
類別就像是一張藍圖般,其中定義出屬性及方法合稱為特性(features),任何用這張藍圖產生的物件都有著一樣的特性,但是物件間的狀態則可能有所不同。在物件導向的技術裡,類別除了是物件的一般化描述外,類別也是一種分類(categorization)的方式。
2.抽象化:發現類別成員 - 現實生活物件的抽象化
(1)雖是同類物件的一般化描述,但是每個物件都有一份屬於自己的屬性及方法;在程式裡,利用類別(class)來模擬物件時,各別的物件除了保有自己所屬資料外,方法是所有同類物件所共有的。除此之外,程式設計時,軟體的類別還可以定義不屬任一物件所獨有,而是該類別所共有的資料,稱為class variable(若針對物件本身所屬的資料稱為instance variable)。這個class variable有個特徵:當任何一個物件改了它後,其他物件一旦用到這個資料的話,一定是用到更改後的資料。
(2)甚麼時候用到class variable?當用來描述某一個狀態的屬性,對所有物件而言都是相同的,就可以將這個屬性定義成class variable。如,程式裡設計了一個腳踏車的類別,而預期所有用該類別生產出的實例(instance)都一定有兩個輪子的話,就可以將輪子的屬性狀態設為2。如果將那個屬性用instance variable來做的話,100個物件就必須保有100份的instance variable,對系統資源浪費。
(3)在物件導向思維裡,根據系統的需要,程式設計師將真實世界裡物件的屬性及方法中挑選適合開發需要的過程稱為abstract,這個字一般翻成抽象化(摘錄、節錄及篩選)。
- 例如,同樣是一個用來表示「人」的物件,用於人事薪資系統與用於醫療作業系統時,顯然在這兩個不同的系統裡,「人」的類別應該會有不同的屬性與方法;比如說,在醫療作業系統裡可能會有屬性用來記錄「就診紀錄」,但就人事薪資系統而言,可能就不需要這個屬性,因此,abstract就是這樣的一個摘錄、篩選動作。
- 真實存在的具體物件,如果用摘錄後的屬性與方法來模擬時,必定會喪失了很多屬性與方法,一旦這些屬性與方法不復存在時,原本具體的物件當然就不再具體,而是被抽出具體形象的特性而化為一個觀念。
- 程式撰寫是把事實表現在電腦上的一種流程,而描述這些事實時,就必須要依靠抽象化。必要時刪除與問題無關的項目,避免深入細節。
- 若從這些摘錄的屬性與方法的描述能夠讓人想到具體的物件的話,那麼這個抽象化後的觀念應該成功了。
3.物件VS. 類別:即一般化(generic)的描述變成特殊化(specialization)的描述。物件是真實存在的,所以它的屬性一定有內容,物件也是某一類別中的一個實例而已。如果,把class看成是佈滿填空題的試卷的話,那麼填完空格的試卷就是物件。
4.類別層級:單一類別經常與其他類別之間具有層級關係。類別的層級主要用來表示兩個觀念,分類(taxonomy)與繼承(inheritance)。
例如動物分為冷血動物與溫血動物,每個類別都能夠再延伸下去,就是分類與繼承的觀念。
留言
張貼留言