Si han estado siguiendo los manuales y tutoriales, y si lo han complementado con contenido teórico de algún libro que trate POO (Programación Orientada a Objetos) lo más seguro es que hayan escuchado dos términos que se los suele confundir: Mensajes y métodos.
Concepto
Los métodos son los algoritmos que se implementan en la clase para darle funcionalidad. En pocas: son las "acciones" con las que dispone la clase. Dichos algoritmos se ejecutan cuando se reciben los mensajes.
En Delphi, esto se consigue declarando funciones y procedimientos.
¿Entonces que son los mensajes?
Podría decirse, dada la "definición" anterior, que es la orden que se le da a un objeto para que realize alguno de sus métodos. Si es necesario, el mensaje debe suministrarle los parámetros.
Caso Práctico
Bueno, veamos un ejemplo de método y mensaje. En él podrá verse porqué se los tiende a confundir.
Primeramente definimos una clase más descendientes de TMamifero (si, seguiremos basándonos en ellos ) con los que veremos su comportamiento: TRaton (si, los ratones son mamíferos por si se lo preguntan):
delphi
TRaton = class(TMamifero) Vida: integer; // métodos function VerCueva(var X,Y: integer): boolean; procedure Moverse(HaciaX, HaciaY, Velocidad: integer); procedure Escapar; end;
Luego, una clase TEscoba que va a interactuar con la inocente clase TRaton:
delphi
TEscoba = class(TObject) // por ahora no hace falta una clase base LargoEscoba: integer; Victima: TRaton; // nuestro raton a darle escobazos. Fíjese que se mantiene una referencia a un objeto. // métodos procedure Golpear(Fuerza: integer); end;
Una posible implementación de las clases puede ser:
delphi
implementation { TEscoba } procedure TEscoba.Golpear(Fuerza: integer); begin Victima.Vida := Victima.Vida - (Fuerza div 2); // le quitamos vida :( Victima.Escapar; // Mensaje! end; { TRaton } procedure TRaton.Escapar; var X,Y: integer; Ver: boolean; begin Ver := VerCueva(X,Y); if Ver then Moverse(X,Y,3); // Mensaje! // velocidad 3: muy rápido end;
Un ejemplo de uso podría ser éste:
delphi
procedure TForm1.Button1Click(Sender: TObject); var raton: TRaton; Escoba: TEscoba; begin // creamos los objetos Raton := TRaton.Create; Escoba := TEscoba.Create; Raton.Vida := 200; // gr? Escoba.LargoEscoba := 100; // cm Escoba.Victima := Raton; // asignamos una víctima Escoba.Golpear(50); //Mensaje! ShowMessage(IntToStr(Raton.Vida)); // liberamos objetos Raton.Free; Escoba.Free; end;
Paso a explicar esto:
1. Cremos los objetos, y les asignamos algunos valores a sus "campos".
2. Seguidamente, le asociamos a la escoba el ratón creado.
3. Le damos la orden (mensaje) Golpear con el parámetro 50 al objeto Escoba.
En respuesta a la orden recibida, Escoba ejecuta el método del mismo nombre (Golpear), enviando el mensaje "Escapar" a su víctima. De un modo similar, nuestro Raton se envía a si mismo el mensaje "VerCueva" y "Moverse".
En síntesis: Los mensajes son las órdenes que se envían a un objeto, que coincidentemente son los métodos que luego se ejecutarán.
Técnicamente debemos hablar de métodos cuando se está llevando a cabo la implementación del algoritmo. Cuando "invocamos" a dichos métodos estamos en el contexto de un mensaje.
Los mensajes pueden ser de dos tipos:
1. Mensajes a externos, que son aquellos que se envían a un objeto relacionado. Por ejemplo: Escapar.
2. Mensajes a "Self" o "This", que son los mensajes que se envía un objeto a si mismo. Por ejemplo: Moverse.
Como es de esperar, los mensajes pueden o no recibir parámatros, e incluso devolver valores. Por ejemplo, cuando el objeto Raton se envía el mensaje VerCueva espera un valor booleano, y le indica dos parámetros: X e Y.
Espero que este pequeño manual aclare estos dos conceptos muy relacionados.
Saludos,