2013年10月18日 星期五

何謂類別及物件

一般對程式的認知,不外是利用一群指令,可對資料運算的工具。
傳統非物件程式語言視方法為程式結構主體,內含諸多指令,負責運算資料。
物件導向語言相對重視資料本身,視資料為主體,稱為物件
而和資料相關的運算,則附屬於資料,稱為物件方法。

可以想見不同類型的資料及運算可以包裝成不同物件,
每個物件皆有一個型別,稱為類別
類別可想成是物件的模版,一個類別可以產生無數物件。
類別定義了物件的長相及能力,分別稱為
1.狀態: 資料儲存處,又稱為欄位,屬性,或物件變數
 狀態本身也可以是另一個物件。
 狀態一般宣告為私密等級,不允許外界直接存取。
 若要讓外界存取,通常會提供公開存取方法,供統一管制窗口之用。
2.行為: 對狀態之運算,又稱為函數,訊息,或物件方法
 行為一般宣告為公開等級,允許接收外界傳來訊息,直接呼叫啟動。

舉例: 以Java API的掃瞄器java.util.Scanner物件為例,
   其狀態包含一可讀資料來源(Readable)物件,
   其行為則包含nextInt(), nextLine()等方法,
   允許外界從Readable物件取得一個整數,或一行字串。

物件可以視為類別的實體,故類別產生物件的過程,也稱為實體化
以程式觀點,實體化可以想像成配置一塊記憶體空間,供存放物件之用。
此空間的名稱即為物件名,此空間的型別即為類別名。

舉例: 如下兩指令可產生一個掃瞄器物件,並從鍵盤取得一整數,

   Scanner input = new Scanner(System.in);
   int n = input.nextInt();


其中,
new就是類別產生物件的實體化指令,後面要接類別建構方法,稱為建構子
建構子必須和類別同名,()一般會帶參數,供物件屬性填入初始值之用。
new Scanner(System.in)表示產生一塊型別為Scanner之物件空間。
其可讀資料來源設定為系統輸入流System.in,即鍵盤,
Scanner input = 表示將此物件名字取為input。

有了物件就可呼叫其物件方法,啟動所需行為,
input.nextInt()表示呼叫input物件的nextInt()方法,從鍵盤回傳一整數,
int n =表示將此整數存入另一變數n格子,供後續利用。

PS:中英對照
class 類別
object 物件
instance 實體,物件
attribute 屬性
state 狀態
behavior 行為
method 方法
function 函數
field 欄位
message 訊息
instantiation 實體化
instance variable 物件變數
instance method 物件方法
constructor 建構子

沒有留言: