類別 (電腦科學)
此條目沒有列出任何參考或來源。 (2014年2月18日) |
類別(英語:class)在物件導向程式設計中是一種物件導向電腦程式語言的構造,是建立物件的藍圖,描述了所建立的對象共同的特性和方法。
類別的更嚴格的定義是由某種特定的元資料所組成的內聚的包。它描述了一些對象的行為規則,而這些對象就被稱為該類別的實例。類別有介面和結構。介面描述了如何通過方法與類別及其實例互操作,而結構描述了一個實例中資料如何劃分為多個屬性。類別是與某個層[註 1]的對象的最具體的類別。類別還可以有執行時表示形式(元對象),它為操作與類別相關的元資料提供了執行時支援。
支援類別的程式語言在支援與類別相關的各種特性方面都多多少少有一些微妙的差異。大多數都支援不同形式的類別繼承。許多語言還支援提供封裝性的特性,比如訪問修飾詞。類別的出現,為物件導向程式設計的三個最重要的特性(封裝性、繼承性、多型性),提供了實現的手段。
類別的定義
在現實世界中,經常有屬於同一個類別的對象。例如,某輛自行車只是世界上很多自行車中的一輛。在物件導向軟體中,也有很多共享相同特徵的不同的對象:矩形、雇用記錄、影片剪輯等。可以利用這些對象的相同特徵為它們建立一個藍圖。對象的軟體藍圖稱為類別。
類別是定義同一類別所有對象的變數和方法的藍圖或原型。例如,可以建立一個定義包含當前檔位等實例變數的自行車類別。這個類別也定義和提供了實例方法(變檔、剎車)的實現。
實例變數的值由類別的每個實例提供。因此,當建立自行車類別以後,必須在使用之前對它進行實例化。當建立類別的實例時,就建立了這種類別的一個對象,然後系統為類別定義的實例變數分配主記憶體。然後可以呼叫對象的實例方法實現一些功能。相同類別的實例共享相同的實例方法。
除了實例變數和方法,類別也可以定義類別變數和類別方法。可以從類別的實例中或者直接從類別中訪問類別變數和方法。類別方法只能操作類別變數 - 不必訪問實例變數或實例方法。
系統在第一次在程式中遇到一個類別時為這個類別建立它的所有類別變數的拷貝 - 這個類別的所有實例共享它的類別變數。
類別和對象
對象和類別的說明其實很相似。實際上,類別和對象之間的差別經常是一些困惑的起源。在現實世界中很明顯,類別不是它描述的對象 - 自行車的藍圖不是自行車。但是在軟體中就有點難區分類別和對象。這部分是由於軟體對象只是現實世界的電子模型或抽象概念。但是也由於很多人用「對象」指類別和它們的實例這兩者。
抽象類別
抽象類別被定義為永遠不會也不能被實例化為具體的對象。它往往用於定義一種抽象上的概念,在類別的繼承關係中它往往被定義在較上層的位置。在程式設計的實踐活動中,抽象類別與介面存在類別似的地方,即它更偏重於對共通的方法和屬性進行規約。但與介面存在一個非常大的差異則在於,抽象類別往往可以規約一個共同的方法和屬性時提供一個對他們的實現。
以現實世界為例:「水果」可以算作一個抽象類別,而「蘋果」、「香蕉」則可以作為它的衍生類別。區別在於,「水果」是個概念,它不會有實例,但是「蘋果」、「香蕉」則肯定會有實例。
類別的好處
對象提供了模型化和資訊隱藏的好處。類別提供了可重複使用性的好處。自行車製造商一遍一遍地重用相同的藍圖來製造大量的自行車。軟體程式設計師用相同的類別,即相同的代碼一遍一遍地建立對象。