07-Comunicación entre objetos

Como hemos visto en la entrada anterior, el mundo en el que viven nuestros objetos no es sino otro objeto que los contiene. A su vez, los objetos pueden pedirle al mundo en el que viven hacer cosas o comunicarle mensajes para que el propio mundo haga algo por ellos.

Vamos a ver algunos ejemplos de esta interacción entre objetos (objetos<->mundo y objeto<->objeto).

Los ejemplos que vamos a plantear y resolver para introducir el concepto de comunicación entre objetos se introducen en los vídeos que incluyo a continuación.

(OBSERVACIÓN: en el vídeo 27 se hace uso de clases que se han introducido en vídeos anteriores. Para conocer más qué hacen esas clases, se pueden visionar dichos vídeos, pero no es necesario para comprender el proceso de comunicación que se está explicando.)

Lo que nosotros nos vamos a plantear es el embarazo de la tortuga y nacimiento de una BabyTortuga. Imaginemos que comer lechugas hace que la Tortuga quede “embarazada” y, al alcanzar las 10 lechugas comidas, la tortuga da a luz a una nueva BabyTortuga.

Esa BabyTortuga nacida debe estar presente en el mundo y, para ello, la Tortuga debe ser capaz de comunicarse con el mundo donde vive para comunicarle dicho nacimiento y que la BabyTortuga se añada al mundo. El mundo debe ofrecer la posibilidad de crear estas pequeñas tortugas, por lo que añadiremos una clase de nombre BabyTortuga, a la que le asociaremos la imagen de una pequeña tortuga (seguir el enlace).

Para todo lo planteado anteriormente, deberemos hacer varias cosas:

  • en primer lugar, la tortuga debe estar preparada para tener una BabyTortuga, incluyendo en la clase Tortuga una referencia (un nuevo campo) a la posible BabyTortuga hija que posiblemente tenga

BabyTortuga bt;

  • a continuación, en el momento en que la tortuga se haya comido 5 lechugas, deberemos crear una nueva BabyTortuga, mediante el uso del constructor de la clase BabyTortuga que habremos creado y asociaremos esa nueva tortuga a la referencia bt anterior (así la Tortuga reconocerá a su hija…)

bt = new BabyTortuga();

  • finalmente, debemos informar al mundo del nacimiento de la BabyTortuga (es como ir al registro de nacimientos), para que la BabyTortuga pase a formar parte del mundo. Es en este momento cuando hacemos una llamada de atención al mundo donde viven las tortugas mediante el método getWorld() que todo actor dispone. El método devuelve una referencia  al mundo donde vive y, una vez sabe esto, puede invocar al método addObject del mundo para añadir la BabyTortuga.

World miMundo = this.getWorld();

miMundo.addObject(bt, posX, posY),

Vamos ahora a suponer que queremos visualizar cuantas lechugas lleva comidas la tortuga, para poder prever el feliz alumbramiento. Para ello, vamos a hacer uso de la clase Contador que os podéis bajar del enlace.

Con esta clase, podemos crear un objeto de tipo Contador en el mundo donde viven las tortugas para ir informando de cuántas lechugas se ha comido la tortuga y prever el feliz desenlace del alumbramiento. Sin embargo, la tortuga debe poder decirle a ese contador que añada una lechuga más, cada vez que se coma una. Podríamos hacerlo recuperando el mundo donde vive la tortuga y tratar de utilizar el contador que en él hay, pero nos obligaría a hacer determinadas conversiones (o type casting) que ahora nos resultarían extrañas.

Lo que vamos a hacer es utilizar otra manera de comunicar objetos que es pasarlos como referencia en el momento de crear la Tortuga en el mundo. Para ello:

  • crearemos en la Tortuga una referencia a un objeto Contador, que será el que nos ayude a notificar al contador del mundo que nos hemos comido una lechuga más.

Contador c;

  • vamos a crear un constructor para la clase Tortuga, que le pase como argumento el contador del mundo (es como hacerte la ficha del ginecólogo que te va a hacer el seguimiento del embarazo…)

public Tortuga (Contador cont){

this.c=cont;

}

  • en el momento de crear la tortuga en el mundo, le pasaremos el contador a esa Tortuga

Tortuga t=new Tortuga(c);

  • cada vez que la Tortuga se coma una lechuga, aumentaremos en uno el contador usando el método aumentaUno() del Contador c

c.aumentaUno();

De esta manera, lo que hemos hecho es poner en comunicación los objetos Tortuga y Contador usando como gestor intermediario el MundoTortuga que los contiene a ambos.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s