Java 程式設計()  第 五章 物件變數與物件陣列      下一頁

 

第五章  物件變數與物件陣列

5-1 真實環境程式化

內容:

  • 5-1-1 真實現象數位化

  • 5-1-2 被動式描述技巧 - 結構變數

  • 5-1-3 主動式描述技巧 - 物件變數

5-1-1 真實現象數位化

建構資訊系統主要目的,是要將真實環境可能出現的各種現象數位化,並能儲存於資訊系統內,再依照運作環境所需而編寫處理資料之程式,使其能自動化執行,這就是目前最流行的『電子化系統』,如電子化企業(E-enterprise)、電子化商務(E-commercer...等。

由此可見,建構電子化系統,最基本的工作即是將所欲處理的『事務』數位化,才可利用資訊系統處理。但這裡所說的『事務』並不一定是有形的真實事務,也有可能虛擬幻象的『抽象』現象。簡單的說,吾人必須想盡辦法將任何可能出現的『人』、『事』、『地』、『物』,且無論是有形或無形的,都要將其數據化,使其可放入資訊系統中處理。

如何將真實環境數位化,基本方法是將該『事物』(或實體,Entity)可能出現的現象,收集成若干個屬性(attribute)。每一種屬性利用一個變數(某種資料型態)儲存該屬性的數值,這些屬性的集合,則是該『事物』現象的數位資料。譬如,如欲描述真實環境中的『汽車』現象,也許會選用廠牌、價錢、車型、排氣量、馬力、門數等屬性,每一種屬性由一個變數儲存其數值或資料,有了這些數位化資料的格式後,則可將許多類型汽車依照其屬性儲存於資訊系統。如果有很多類型汽車,每種汽車都選用相同屬性但屬性內的資料不同,吾人就可以利用這些資訊來作各廠牌之間汽車效能比較、搜尋所喜歡車種...等等電子化處理程序。

另一方面來講,描述『事物』的屬性越多的話,描述得越仔細,雖然可得到的資訊越正確,但資訊系統則需要更多的資源來處理;如果『屬性』越少的話,系統處理速度可能較快,但可能會不能滿現況所需,或出現處理不周的現象。到底應該如何描述才是最理想,這就考驗程式設計師的能耐了。但最起碼可區分下列兩大重點:

A同一『現象』不同描述:

當某一種真實『現象』需要不同的處理時,可能會出現不同的描述,每一種描述則需要各種不同的屬性。譬如,真實環境中的『人』就可能出現許多描述的類型,如圖 5-1 所示。建構醫院管理系統時,描述每一個『人』的屬性可能包含姓名、身分證號、病歷代號、地址、電話;而建構銀行信用卡系統時,『人』的信用卡資料可能包含姓名、會員代號、地址、電話、信用等級、所屬銀行;而銀行開戶系統中,銀行可能會需要登錄『人』的姓名、帳戶代號、地址、電話、存款等等。由此可見,同樣的『事物』進入不同系統處理時,所需描述的屬性可能會相差很大。而且就算是相同功能的資訊系統但由不同程式設計師製作時,因個人考量不同,要選擇哪些屬性來描述『現象』也不盡相同,何況是不同應用系統呢?

5-1 同一現象不同描述

B相同描述,辨識不同個體:

選定某些『屬性』來描述特定『事物』之後,又如何來辨識相同事物現象之間的不同個體呢?譬如,系統如何在眾多信用卡之中,辨識哪一張是『春嬌』、哪一張是『志明』?簡單的方法是選取某一個能夠辨識不同個體的屬性,如果是『人』的話,可以選用『身分證字號』作為屬性其中之一,因為幾乎不可能出現相同身分證字號的『人』,如果找不到現有可辨識個體的屬性,則可能要自行創立。以圖 5-2 圖書館系統為例,描述書籍則非常有可能出現相同的出版社、書名、作者,為了要能辨識個體,只好加入一個『編號』屬性。基本上,該『編號』屬性與所描述書籍並沒直接關聯,僅為了分辨不同書籍而已,因此,他的內容需由管理員自行編制,但需保證不可以重複。

5-2 相同描述辨識不同個體

5-1-2 被動式描述技巧結構變數

傳統語言描述真實環境的『實體』(Entity,或稱事物)現象,大多利用幾個基本資料型態(int, float, char 等等)所構成的結構變數(如 C 語言的 structure 變數)。亦是,結構變數內包含了若干個元素,每一元素可能由基本資料型態,或另一個結構所產生的變數。基本上,結構是描述實體的結合體,至於會採用元素的多寡,這必須視如何分辨出不同實體之間的差異,與實體的運用範圍。

利用結構變數所描述真實環境,『實體』之間大多是獨立的,很難找出它們之間的關連性。譬如,一般公司員工大略可區分為工作員與經理員兩群組,如利用 C 語言的結構來製作員工資料時,則可能產生兩個獨立分別描述工作員與經理員兩種結構變數,兩者之間也很難找出關連性。其實公司裡的員工許多資料都是相同的,資料型態之間應該有許多相似的地方。譬如,當工作員工升等成經理階層,則他的資料可能需要重新製作。如果改利用物件來宣告,就能輕易地取得兩者之間的連帶關係。另外,某些變數可能會有一些限制,譬如,經理級的薪資可能有最低基本薪額,當我們使用結構變數變更資料時,很難去處理這些特殊限制,但運用物件變數卻很容易達成。

A 結構變數描述

吾人用一個簡單範例說明傳統語言描述『實體』的方法。假設某家製造工廠欲建立薪資管理系統,針對某位員工選擇描述的屬性如圖 5-3 所示。以 C 語言為範例,宣告產生『結構變數』與『陣列結構變數』的語法如下:

5-3 結構變數的被動描述

描述工作員的結構變數如下:(C 語言範例)

struct worker {

int ID;                // 員工代號

char name[15];         // 姓名

int age;               // 年齡

char department[10];    // 服務部門

int payment;           // 底薪

int  position;          // 職務加級

}

struct worker Liu;

struct worker Employ[30];

/* 給予 Liu 變數內容 (描述 Liu 個體) */

Liu.ID = 31012;

Lin.name = "張大年";

Liu.age = 27;

Liu.department = “銷售”;

Liu.payment = 50000;

Liu.overtime = 15000;

 

/* 給予陣列結構變數內容 (描述某一員工屬性) */

Employ[0].ID = 32011;

Employ[0].name = "劉有志";

Employ[0].age = 30;

Employ[0].department ="製造";

Employ[0].payment = 40000;

Employ[0].overtime = 10000;

B結構變數可能出現問題

(1) 同一資訊系統內,描述某一『實體』的資料結構於不同應用軟體之間是否能保持一致性。譬如,員工資料當然不會僅出現於薪資管理系統,同一公司的其他系統也會使用到員工資料,可能出現同一員工在相同資訊系統裡出現多種描述結構,而這些描述變數之間沒有任何關聯性,常會造成資料相衝突。

(2) 當資訊系統處理模式變更,需要改變描述實體的結構變數時,也許所有資訊系統的結構變數都需要變更。譬如,期望在每一員工的資料裡加入『電話』,則所有結構變數都必須變更。

(3) 對於描述實體的屬性內容無法管制。譬如,經理級的員工薪資有最低保障薪資、最高加班時數等等;資料本身無法判斷正確與否,必須仰賴程式裡加以限制。也就是,結構變數對於某些較重要的屬性無法隱藏與限制。

當然,物件導向程式語言並非僅針對上述缺點來設計,不只解決了上述問題,更加入許多功能。但無論如何,我們還是由這方面切入探討物件的基本功能,之後再研究他額外增加的功能,如此一來,對於學習物件導向的觀念,也許會較容易。

5-1-3 主動式描述技巧物件變數

在物件導向程式設計下,描述真實現象『實體』的物件,不再僅由若干個基本型態的變數所構成。意即不僅包含某些變數成員,同時也包含處理這些變數的方法成員。方法成員基本運用是作為整個物件的輸入與輸出介面,又稱為『輸入/輸出埠口』,如圖 5-4 所示。當某一物件被引用之後,其內部的方法也可能隨之被呼叫執行,然而執行方法成員時,也可能需要獨立的記憶體空間(譬如,程式執行當中會產生的變數)不可與原主程式記憶體空間相衝突。由此可見,物件是獨立的個體,背負某一特殊任務所構成,因此稱之為『Object』。圖 5-4 為主動式物件變數的概念圖,物件內包含:變數(Variable)與方法(Method)兩種成員。變數成員如同結構變數一般,可用來描述真實環境,某些變數(隱藏式變數,如 ID 變數)必須透過『方法』成員才可處理,但較無關鍵性變數則可直接處理(非隱藏式,如 payname 變數)。

5-4 主動式描述

 

翻轉工作室:粘添壽

 

Java 程式設計(二) 含物件導向

 

 

翻轉電子書系列: