sábado, 22 de febrero de 2014

Referencias a objetos

Hola,
esta semana avanzamos bastante y casi terminamos Sokoban. Hicimos el método muevePersonaje de la clase escenario teniendo en cuenta todas las restricciones del juego en cuanto a cuándo se puede mover el personaje y cuándo las cajas. Para conseguirlo usamos un array de dos dimensiones de booleanos que guardaba true si había un muro en la celda asociada y false en caso contrario. Además escribimos el método Caja hayCaja(int x, int y) que comprobaba si en la fila y y columna x había una caja y, en ese caso, la devolvía. Si no devolvía nulo.

Estuvimos después viendo que, en realidad, las variables cuyos tipos son clases (no las variables de tipos básicos como int, boolean, char, o double) lo que almacenan es la referencia al objeto, es decir, cuál es el objeto por lo que al copiar variables de este tipo asignando el valor de una a otra no estamos creando un nuevo objeto sino haciendo que dos variables se refieran al mismo objeto. Sólo se crean objetos al hacer new pero no al asignar el valor de una variable a otra.

Para entenderlo hicimos un ejemplo en la pizarra en el que asignábamos a una variable de tipo Caja el contenido de una celda de un array de cajas. Aquí os dejo el mismo ejemplo para que podáis ver cómo pasa de una forma gráfica y animada y, además, con la opción de ver paso a paso cómo se van creando y asignando los distintos objetos. Prestad atención sobre todo a lo que pasa cuando se crean los objetos con new, lo que pasa cuando se ejecuta el método muévete y cómo en ese momento aparece el objeto this, y el efecto que tiene que tanto la segunda celda del array como la variable laPrimera se refieran al mismo objeto.

http://goo.gl/Ogmdvl

No hay comentarios:

Publicar un comentario