Jump to content


Photo

Concepto: Diferencias entre mensaje y método


  • Please log in to reply
No replies to this topic

#1 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6295 posts
  • LocationArgentina

Posted 19 December 2008 - 10:48 AM

Hola,
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
  1. TRaton = class(TMamifero)
  2.     Vida: integer;
  3.  
  4.     // métodos
  5.     function VerCueva(var X,Y: integer): boolean;
  6.     procedure Moverse(HaciaX, HaciaY, Velocidad: integer);
  7.     procedure Escapar;
  8.   end;



Luego, una clase TEscoba que va a interactuar con la inocente clase TRaton:



delphi
  1.   TEscoba = class(TObject) // por ahora no hace falta una clase base
  2.      LargoEscoba: integer;
  3.      Victima: TRaton; // nuestro raton a darle escobazos. Fíjese que se mantiene una referencia a un objeto.
  4.  
  5.      // métodos
  6.      procedure Golpear(Fuerza: integer);
  7.    end;



Una posible implementación de las clases puede ser:



delphi
  1. implementation
  2.  
  3. { TEscoba }
  4.  
  5. procedure TEscoba.Golpear(Fuerza: integer);
  6. begin
  7.   Victima.Vida := Victima.Vida - (Fuerza div 2); // le quitamos vida :(
  8.   Victima.Escapar; // Mensaje!
  9. end;
  10.  
  11. { TRaton }
  12.  
  13. procedure TRaton.Escapar;
  14. var X,Y: integer;
  15.     Ver: boolean;
  16. begin
  17.   Ver := VerCueva(X,Y);
  18.   if Ver
  19.      then Moverse(X,Y,3); // Mensaje! // velocidad 3: muy rápido
  20. end;



Un ejemplo de uso podría ser éste:



delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var raton: TRaton;
  3.     Escoba: TEscoba;
  4. begin
  5.   // creamos los objetos
  6.   Raton := TRaton.Create;
  7.   Escoba := TEscoba.Create;
  8.  
  9.   Raton.Vida := 200; // gr?
  10.   Escoba.LargoEscoba := 100; // cm
  11.  
  12.   Escoba.Victima := Raton; // asignamos una víctima
  13.   Escoba.Golpear(50); //Mensaje!
  14.   ShowMessage(IntToStr(Raton.Vida));
  15.  
  16.   // liberamos objetos
  17.   Raton.Free;
  18.   Escoba.Free;
  19. 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,
  • 0




IP.Board spam blocked by CleanTalk.