方法 (电脑科学)
在物件导向程式设计中,方法(英语: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