5-2 物件的概論
5-2-1 物件的屬性 何謂『物件』(Object)是許多初學者迫切想知道的答案,如果從抽象的哲學觀點來講,可以說成一大篇文章,但相信也很難聽得懂。我們用最簡單的方法來說明『物件』在程式設計裡扮演的角色,了解之後再來推演它的哲學觀念,可能會比較容易懂。首先我們將物件的屬性歸納如下: (1) 物件是針對某一『實體』(Entity)的資料表示,並可依照環境需求,制定實體『資料』的規格,實體可以是無形或有形、真實或抽象現象,譬如:人、動物、天氣、感受、圖形、聲音、色彩、語意、個性...等等。簡單的說,真實環境裡任何有形或無形的事項,都可以由規格化的物件來表示。 (2) 為了確保物件規格的完整性,物件實體裡除了有表現實體(Entity)的資料外,可能還包含某些程式,透過適當程式來判斷操作者是否超越規格。 (3) 為了確保物件在程式執行當中不被侵犯,物件實體內有獨立的變數、程式與記憶體空間。 5-2-2 物件的產生 規劃物件的藍本即是『類別』(class)。同一個類別可以透過 new() 命令產生多個物件,並給予物件適當名稱,如圖 5-5 所示。簡單的說,『物件』是類別的某一『驗例』(instance,特定範例的意思)。
圖 5-5 物件的產生 類別具有繼承性功能,可由某一類別擴充成另一個類別。譬如,可由學生類別產生『張同學』的學生物件(透過 new() 命令);另一方面,也可以由學生類別擴充成『班長類別』(透過 extends 命令),再由它產生『張班長』的班長物件。 5-2-3 物件的成員 我們可以了解為了確保物件所描述真實現象的完整性,物件(或類別)裡必須包含兩種主要成員,如下:
吾人利用變數成員描述真實世界的狀況(無論真實或虛擬世界、有形或無形事務),又使用方法成員來限定存取變數成員的規則,如此才能規範物件的完整性與主動性。 5-2-4 物件的種類 由上所敘,類別是描述某一真實現象的藍本。為了規範藍本的規格,必須包含著變數與方法兩種成員。但真實運用上並非如此,有些『Entity』並不需要嚴格的規格限制,不需要另外制定『方法』成員;另一方面,物件也可能是一種軟體工具,也可能不需變數成員來描述 Entity 的樣式。因此,物件可能出現下列三種格式:(如圖 5-6 所示) (1) 傳統物件變數(被動式物件):物件內僅包含變數成員,並沒有方法成員。我們可以將它當成傳統程式語言(如 C 語言)的結構變數使用,本章將介紹此物件的運用方法。 (2) 物件導向(主動式物件):物件(或類別)內包含變數與方法兩種成員,可主動性的描述任何真實現象,第 6 ~ 8 章介紹。 (3) 物件方法套件(物件方法庫):物件(或類別)內僅包含方法成員,不具有變數成員(如果有也不是描述事件使用),本書第 9 章介紹。
圖 5-6 物件的三種型態 5-2-5 類別宣告與物件產生 利用物件變數來描述真實環境。首先必須建構一個可以產生物件變數的類別,再利用此類別來宣告產生物件。僅有變數成員的類別宣告語法如下:
(1) class 類別名稱 {….}:宣告類別的語法,其中 class 為關鍵字,左右大括號內為變數成員。每一個變數成員可獨立宣告變數型態,甚至另一種類別型態(如 String)。 (2) 類別名稱 物件名稱 = new 類別名稱():利用類別宣告並產生物件。譬如 Employee Liu = new Employee() 表示利用 Employee 宣告 Liu 物件型態,再利用 new 產生一個 Employee 型態的物件,並填入 Liu 物件變數內(如同 int data = 5; 的意思相同) (3) 物件名稱.變數名稱_1:變數成員表示。譬如所產生的 Liu 物件變數,其成員有:Liu.ID、Liu.name、Liu.depart...等 圖 5-7 為宣告 Employee 類別,並由它產生物件的運作情況。圖中包含兩個類別:Employee 與 Ex5_1,其中 Employee 類別僅有變數成員,可以宣告產生物件;Ex5_1 是靜態類別(容後介紹),可不經由 new 產生物件,而直接呼叫執行(即是中介碼,Bytecode)。
圖 5-7 物件變數宣告產生範例
|
翻轉工作室:粘添壽
Java 程式設計(二) 含物件導向
翻轉電子書系列:
|