1 Diseñando mi solución en POO (Galaga)Eugenio Yolis - Mayo 2010
2 Agenda El problema Solución rápida Limitaciones Buscando objetosResumen Preguntas?
3 El problema
4 Implementar modelo del “Galaga”Ø las naves se mueven por el espacio Ø el jugador maneja su nave Ø la nave del usuario dispara a las otras, y las otras le disparan al él
5 Solución rápida
6 Diagrama de clases Ø creo que ya tengo el diseño base... empiezo a codificar y despues le voy agregando la funcionalidad pedida
7 Ejemplos de código int incX, incY; if (this.direccion == 1) {incX = 0; incY = 1; // arriba } else if ... { } this.x = this.x + incX; this.y = this.y + incY; if (this.y > getEspacio().getY()) { // choque contra el borde superior this.y = this.y - 1; } // voy a “chocar” al jugador int posJugY = espacio.getNaveJug().getY(); int incY = posJugY / Math.abs(posJugY); this.y = this.y + incY;
8 Limitaciones
9 Limitaciones Repetición de codigo Constantes magicasUna mejora es hacer un “ObjetoMovil” abstracto, pero igual es un problema Constantes magicas if (this.direccion == 1) Calculos y condiciones dificiles de entender Esto va empeorando cada vez que se agrega un nuevo caso a contemplar Poco encapsulamiento Diferentes metodos de la clase van a manipular el “x” y el “y” directamente
10 Buscando objetos
11 Diagrama de clases Las naves delegan en movimiento la logica del “mover” Dirección y Posición encapsulan calculos Diferentes naves pueden usar las mismas estrategias de movimiento
12 Ejemplos de código // en Nave.moverthis.posicion = this.movimiento.calcularPosSiguiente(this.posicion) // en Movimiento.calcularPosSiguiente posicion = this.direccion.desplazarPos(posicion) // en Movimiento.calcularPosSiguiente if (!posicion.dentroDe(espacio.getLimites()) { // choque contra algun borde del espacio this.direccion = direccion.dirOpuesta(); }
13 Resumen
14 Resumen Encapsular todo lo posiblePensar de quién es la responsabilidad Revisar métodos “largos” Revisar clases que tienen “getters” y “setters” para todos sus atributos Revisar el uso de condicionales y estructuras “case” Revisar el uso de tipos “standard” (primitivos, String, List) como parametros de entrada y de retorno
15 ¿Preguntas?