方法 (電腦科學)
![本页使用了标题或全文手工转换](http://upload.wikimedia.org/wikipedia/commons/thumb/c/cd/Zh_conversion_icon_m.svg/35px-Zh_conversion_icon_m.svg.png)
在物件導向程式設計中,方法(英語:Method;德語:Methode; 法語:Méthode)指的是類別(所謂的類別方法、靜態方法或工廠方法)、或者是物件(所謂的實體方法)兩者其中之一的一種子程式。如同程序化程式語言的程序,一個方法通常以一系列的語句所組成,並以之完成一個動作。其可以藉由輸入一組參數以制訂所需的動作,且一部分的方法可能會有輸出值(所謂的返回值)。方法的目的是提供一個機制,以存取(對於讀和寫)物件或類別的私有資料儲存區。
方法的種類
[编辑]如前所述,實體方法附屬於特定物件,而類別或者靜態方法(又稱作共享方法)則附屬於某個類別。在典型的實踐中,實體方法傳送一個隱藏的參考(舉例來說,this
或者self或者Me
)給所屬的物件(不論類別或類別實例),所以它們可以存取與之相關的資料。一個類別方法的典型例子即:在給定的類別中,其內部記錄着已建立物件的計數。
建構子類似於方法,不過它們是在語句區塊中建立一個類別的實體時,所自動呼叫的。在Java、C++、C#以及PHP裡,它們和所屬物件的類別,皆有相同的名稱。在Visual Basic裡,建構子稱為New
,而且在Object Pascal裡,建構子可以有使用者所定義的名字(不過大多稱作Create)。建構子有一部分很像方法,不過也存在著許多差異,所以通常不把其視為方法。
解構子是一個特殊的實體方法,它是在解構一個類別的實體時,所自動呼叫的。在C++裡,它們和所屬物件的類別,皆有相同的名稱,只不過在前面多了一個波浪號(~)。在Object Pascal裡,解構子可以有使用者所定義的名字(不過大多稱作Destroy)。
抽象方法是一個虛設代碼的方法,它沒有實作。它通常用來佔住一個位置,讓子類別或者以此為原型的物件重載,並實作出相應的抽象方法。如此一來,抽象方法有助於明確表明一部分架構。
存取方法通常是一個小型、簡單的,並提供一個用來從程式的其它部分存取物件狀態的方法。雖然它引入了一個新的附屬,但這是直接存取狀態資料的首選方法,因其提供了一個抽象層。例如,如果銀行帳戶類別提供了getBalance()
的存取方法,其用以查詢餘額(而不是直接存取餘額資料區域),之後該部分代碼的修改版可以實作更複雜的查詢餘額機制(例如,取得資料庫),而無須改變相關的代碼。一個用來改變物件狀態的存取方法,通常稱作更新方法,有時又稱作更動方法。提供這些方法的物件就被認為是可變物件。
靜態(共享/類別)方法
[编辑]如前所述,方法可能宣告為靜態的(在Visual Basic裡是shared
,在Object Pascal裡是class
),即靜態方法活動於類別層次,而非實體層次。靜態方法不能觸及一個特定的類別實例(也就是不能觸及this
self
,Me
等等)以下是以C‘ 撰寫的靜態成員以及其客戶端的例子:
public class Example
public static void StaticExample
// 靜態方法的程式碼
public void InstanceExample
M// 此處為實體方法的程式碼
M// 可以使用THIS
/// 上述類別的客戶端:
// 呼叫靜態方法(不包含實體)
ExampleClass.StaticExample
// 呼叫實體方法
ExampleClass objMyExample = ExampleClass
objMyExample.InstanceExample