Modificadores de acceso. Miniproyecto.
Vamos a comenzar la última sesión del módulo con un pequeño ejercicio para comprobar los modificadores de acceso de Java.
Antes de nada, hagamos un pequeño resumen. En Java existen cuatro posibles
niveles de acceso: private
, por defecto (si no declaramos nada),
protected
, public
. Estos cuatro niveles tienen la
siguiente política de acceso:
private
: no se permite
el acceso al elemento, ni siquiera para los objetos de alguna subclase. Sólo se puede acceder al elemento desde la
misma clase. Si, por ejemplo, declaramos un método A de una
superclase Super como private, ese método A no es heredado por las
subclases de Super.protected
: puede ser que una subclase no esté
en el mismo paquete que la superclase. Si un elemento tiene el modificador
protected, se puede acceder a él desde el mismo paquete y desde
cualquier subclase, aunque la subclase no esté en el mismo paquete.public
: un elemento public es accesible
desde cualquier otra clase sin ninguna restricción.Vamos a hacer un pequeño ejercicio para probar estos niveles de
acceso. Supongamos la siguiente clase en el paquete modulo1.sesion5
package modulo1.sesion5; public class Acceso { public int valorPublico; int valorDefecto; protected int valorProtected; private int valorPrivate; }
y ahora supongamos las dos siguientes clases que van a comprobar el acceso a los campos de Acceso:
package modulo1.sesion5; public class TestAcceso{ public void testeador() { int i; Acceso acceso = new Acceso(); i = acceso.valorPrivado; i = acceso.valorDefecto; i = acceso.valorProtected; i = acceso.valorPublico; } }
package modulo1.sesion5; public class TestAccesoSubclase extends Acceso{ public void testeador() { int i; i = this.valorPrivado; i = this.valorDefecto; i = this.valorProtected; i = this.valorPublico; } }
La primera clase es una clase normal que está en el mismo paquete y la segunda es una subclase de Acceso. Contesta a las siguientes preguntas en el fichero respuestas.txt:
TestAcceso
hay
un error?TestAccesoSubclase
hay un error?modulo1.sesion4
,
modificando la instrucción package y añadiendo el import de
la clase modulo1.sesion5.Acceso
:
package modulo1.sesion4; import modulo1.sesion5.Acceso;
¿Qué ha cambiado ahora? ¿Qué componentes son accesibles?
En el fichero de plantillas de esta sesión se encuentran la siguientes
clases que implementan un sencillo juego de un laberinto: Posicion
,
Laberinto
Jugador
, EstadoJuego
, Vista
,
Controlador
, JuegoLaberinto
y JuegoLauncher
.
Vamos primero a explicar brevemente el funcionamiento del juego y después comentaremos el ejercicio a realizar.
El juego define un laberinto (siempre el mismo) en el que se mueve el jugador. La posición inicial del jugador es aleatoria. El jugador se mueve introduciendo un comando de texto. El laberinto y el jugador aparecen representado en modo texto y se muestra por la salida estándar cada vez que el jugador ha introducido un comando:
# ############# # * # # # ### # # ### # # # # ### # ### ######## # # # #### # # ### ###### ## # # ##### ## # ## # ## ############ ## INTRODUCE MOVIMIENTO (A,B,D,I,S)>
El juego se ha diseñado siguiendo la estrategia (o el patrón, como se suele decir) Modelo-Vista-Controlador. La idea de esta estrategia es independizar el funcionamiento del programa de su presentación al usuario. De esta forma, es más sencillo modificar la interfaz de usuario (la forma de obtener los datos del usuario y de presentar los resultados) sin afectar al funcionamiento del programa.
En nuestro caso, tenemos la clase Vista que se encarga de mostrar el laberinto y de obtener la instrucción del usuario. Tenemos también la clase Controlador que se encarga de realizar un paso de ejecución del juego. Y, por último, tenemos las clases Jugador, Laberinto y EstadoJuego que mantienen los distintos elementos del juego.
Si, por ejemplo, quisiéramos adaptar el juego a un entorno gráfico,
sólo tendríamos que modificar la clase Vista
y esto
no afectaría al funcionamiento interno del juego.
Vamos ya a plantear los ejercicios:
modulo1.sesion5
y prueba
que funciona la aplicación.PARA ENTREGAR
Debes crear un ZIP llamado sesion5.zip con: