Métodos de clase
Los métodos de clase son igual que los métodos de siempre. Lo que los diferencia de los "comunes" es que éstos se declaran anteponiendo la palabra "Class":
delphi
class function NombreMetodo(ListaParametros): Tipo;
class procedure NombreMetodo(ListaParametros);
...
class function NombreMetodo(ListaParametros): Tipo;
begin
...
end;
class procedure NombreMetodo(ListaParametros);
begin
....
end;
Como dije al comienzo: el método sirve para trabajar con la clase y como el método "apunta" a la clase (mediante el parámetro implícito self) y no a la instancia, no se puede emplear éstos métodos para acceder a propiedades, atributos, etc.
¿Entonces de que sirve tenerlos?
En realidad sirven para dar funcionalidad a nivel de clase, y no de una instancia. Es decir que los métodos son aplicados en un concepto mucho más abstracto.
Funcionan independientemente de si hay o no una clase, por ello es que se puede hacer cosas como éstas:
delphi
var Clase: TMiClase;
...
TMiClase.MetodoClase; // Se usa a la clase
Clase.MetodoClase; // se invoca al método a través de una instancia
Contar con métodos de clase nos permite trabajar fuera del contexto de una instancia y aplicar operaciones más generales (recuerde que una instancia es un caso particular, o concreto de una clase). Por ejemplo: ¿es necesario contar con un objeto para saber la cantidad que han sido creados? No necesariamente. Puede emplearse una variable privada u oculta que lleve el conteo de instancias a medida que se crean y liberan los objetos y emplear un método de clase para consultar su valor.
De modo similar, ¿es necesario contar con instancias si lo que deseamos saber es si una clase pertenece a una jerarquía u otra, o si cuenta con alguna funcionalidad?
No. Porque lo que define a éstas acciones no es a una instancia, sino al conjunto de éstas instancias: la clase.
Cualquier dato, funcionalidad, y/o comportamiento que desee conocer sobre una clase puede ser consultado, y aplicado mediante métodos de clase.
Existen muchos de hecho TObject ofrece los más básicos:
delphi
class function InitInstance(Instance: Pointer): TObject;
function ClassType: TClass;
class function ClassName: ShortString;
class function ClassNameIs(const Name: string): Boolean;
class function ClassParent: TClass;
class function ClassInfo: Pointer;
class function InstanceSize: Longint;
class function InheritsFrom(AClass: TClass): Boolean;
class function MethodAddress(const Name: ShortString): Pointer;
class function MethodName(Address: Pointer): ShortString;
class function GetInterfaceEntry(const IID: TGUID): PInterfaceEntry;
class function GetInterfaceTable: PInterfaceTable;
class function NewInstance: TObject; virtual;
Eso si, más comunes son las funciones que los procedimientos. Lo importante del concepto es que cualquier operatoria que el negocio o contexto nos indique que se aplica a un nivel conceptual puede ser enfocado mediante esta técnica.
A los métodos de clase le son aplicables todos los conceptos a cualquier método: sobrecargarlos, sobreescribirlos, etc.
En el próximo post dejo un ejemplo muy sencillo de uso.


 
	 
					 
			
			 
				
				
			 
			
			







