Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Practicas Java
Practicas Java
Fundamentos de Programacin:
Prcticas de Java
1
o Ingeniera Tcnica de Telecomunicacin
Copyright
c 2007, 2008, 2009 Gorka Prieto Agujeta
iii
iv RESUMEN
ndice general
Resumen iii
2. Clases y Objetos 7
2.1. Clase Juego . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3. Herencia y Polimorsmo 11
3.1. Ejercicio 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.2. Ejercicio 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
4. Interfaces y Arrays 15
4.1. Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
4.2. Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
5. Paquetes 19
5.1. Paquetes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
5.2. Classpath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
v
vi NDICE GENERAL
6. El API 23
6.1. Clase Random . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
7. Excepciones 27
7.1. Ejercicio 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
7.2. Ejercicio 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Prctica 1
1.1. El workspace
En primer lugar creamos un directorio con nuestro nombre dentro del home del
usuario alumno. En este directorio ser donde guardemos todas las prcticas y a
partir de ahora nos vamos a referir a l como workspace.
Se recomienda que antes de terminar cada clase, el alumno se copie su workspace
a una memoria USB a modo de backup, ya que los ordenadores del centro de clculo
pueden ser formateados en cualquier momento a lo largo del curso y sin previo aviso.
1
Mediante un editor de textos escribir el siguiente programa de ejemplo:
1
2 PRCTICA 1. FAMILIARIZACIN CON EL ENTORNO
El siguiente paso consiste en compilar este programa de ejemplo. Para ello abri-
mos la consola y nos situamos en el directorio que contiene el cdigo fuente y que
ser el directorio Practica1-1 dentro del workspace que hemos creado:
$ cd tu_nombre
$ cd Practica1-1
$ ls
$ javac HolaJava.java
$ java HolaJava
Hola Java!
Desde el rbol del proyecto, hacemos click con el botn derecho y damos a la
opcin de aadir una nueva clase. Llamamos HolaJava a esta nueva clase y a conti-
nuacin vemos que automticamente se crea un chero fuente sobre el que podemos
1.4. LECTURA DE TECLADO 3
Para los programas que se van a realizar en el resto de prcticas, resulta necesario
el uso de la entrada por teclado. Como estos conceptos no se han explicado en la
teora, usaremos el siguiente cdigo creado por el profesor y que proporciona los m-
todos Teclado.LeeCaracter(), Teclado.LeeEntero() y Teclado.LeeCadena().
Estos mtodos devuelven un char, un int o un String respectivamente con la
entrada introducida por el usuario en el teclado.
import java.io.*;
try {
ch = LeeCadena().charAt(0);
} catch( Exception e ) {
ch = 0;
}
return ch;
}
try {
str = br.readLine();
} catch( Exception e ) {
str = "";
4 PRCTICA 1. FAMILIARIZACIN CON EL ENTORNO
return str;
}
try {
num = Integer.parseInt( LeeCadena().trim() );
} catch( Exception e ) {
num = 0;
}
return num;
}
}
Eclipse permite depurar aplicaciones de una forma muy cmoda desde la interfaz
grca. Para que funcione la depuracin de cdigo java en Eclipse, debemos asegu-
rarnos de que se est usando un JRE que soporte la depuracin de aplicaciones.
Para ello en Window/Preferences/Java/Installed JREs nos aseguramos de que
1.5. DEPURACIN DE APLICACIONES 5
Una vez puestos los breakpoints, depuramos el programa sin ms que ir al me-
n Run y dar a la opcin Debug As/Java Application. El programa se detendr
cuando llegue a la lnea 6. Si pulsamos la tecla F6, se ejecutar esa instruccin y
se quedar detenido en la siguiente. Si a continuacin pulsamos F8, el programa se
continua ejecutando hasta llegar al siguiente breakpoint.
Clases y Objetos
Atributos
Tiene como atributo pblico un entero que indica el nmero de vidas que
le quedan al jugador en la partida actual.
Mtodos
Adems esta clase tiene tambin el mtodo main que debe realizar lo
siguiente:
Resta una vida al valor del atributo con las vidas y vuelve a llamar
a MuestraVidasRestantes.
Crea otra instancia de la clase Juego indicando que el nmero de
vidas es tambin de 5.
7
8 PRCTICA 2. CLASES Y OBJETOS
Atributos
Debe ocultarse a cualquier otra clase el atributo con las vidas. Para poder
modicar este atributo, se crearn los dos nuevos mtodos que se explican
ms adelante.
Crear otro atributo tambin privado y de tipo entero que guarde el rcord.
A diferencia de los anteriores (que son atributos de instancia) ste es
un atributo de clase, por lo que ser comn a todos los juegos que se
implementen. Inicialmente este atributo tendr el valor 0.
Mtodos
Para probar la ocultacin, la funcin main se va a poner ahora en una clase aparte
llamada Aplicacion en un chero Aplicacion.java dentro del mismo directorio:
Antes de modicar esta funcin, comprobar que ahora el compilador nos mues-
tra un mensaje de error al intentar modicar directamente el atributo con las
vidas. A continuacin proceder con las modicaciones que siguen.
2.2. OCULTACIN DE ATRIBUTOS 9
Herencia y Polimorsmo
3.1. Ejercicio 1
1
En este ejercicio se va a implementar un juego en el que el usuario tenga que
adivinar un nmero que conoce el programa. El cdigo correspondiente a cada clase
que se implemente deber estar en un chero java separado y que tenga el mismo
nombre que la clase.
Clase Juego
Aadirle un mtodo abstracto Juega que no tome parmetros y que ten-
drn que implementar las clases derivadas.
La clase Juego ahora pasa a ser una clase abstracta por lo que ya no se
podrn crear instancias de la misma.
Clase JuegoAdivinaNumero
Deriva de la clase Juego.
Tiene un constructor que toma dos parmetros de tipo entero. El primero
es el nmero de vidas que, a su vez, se lo pasar al constructor de la clase
base. El segundo parmetro es un nmero a adivinar entre 0 y 10.
1 Usando la clase de entrada por teclado copiada en el primera prctica, se leer un entero del
teclado
11
12 PRCTICA 3. HERENCIA Y POLIMORFISMO
3.2. Ejercicio 2
A partir del juego anterior, se aadirn dos juegos ms, uno de adivinacin de
nmeros pares y otro de adivinacin de nmeros impares.
Clase JuegoAdivinaNumero
Aade un nuevo mtodo ValidaNumero que toma como parmetro el
nmero introducido por el usuario y devuelve un boolean que, en este
true.
caso, ser siempre
Clase Aplicacion
El mtodo main crea una instancia de cada uno de los tres juegos creados:
JuegoAdivinaNumero, JuegoAdivinaPar y JuegoAdivinaImpar. Como
nmero de vidas de cada juego se pondr 3 y como nmero a adivinar un
nmero cualquiera, otro par y otro impar respectivamente, todos com-
prendidos entre el 0 y el 10.
Interfaces y Arrays
4.1. Interfaces
Clase Juego
Interfaz Jugable
Clase JuegoAdivinaNumero
15
16 PRCTICA 4. INTERFACES Y ARRAYS
Clase JuegoAdivinaPar
Redene el mtodo MuestraNombre para que visualice por pantalla el
texto Adivina un nmero par
Redene el mtodo MuestraInfo
Clase JuegoAdivinaImpar
Redene el mtodo MuestraNombre para que visualice por pantalla el
texto Adivina un nmero impar
Redene el mtodo MuestraInfo
Clase Aplicacion
En el mtodo main crear un objeto de cada uno de los juegos mencio-
nados.
4.2. Arrays
Clase Aplicacion
Mtodo EligeJuego
Mtodo pblico y esttico que no toma parmetros y devuelve un
objeto del tipo Jugable.
Crea un objeto de cada uno de los tres juegos implementados.
Mtodo main
Llama al mtodo EligeJuego para obtener una referencia de tipo
interfaz Jugable al juego seleccionado por el usuario.
Llama al mtodo Juega del mismo para comenzar una nueva partida.
Paquetes
5.1. Paquetes
Clase Juego
Paquete interfaces
Contiene la interfaz Jugable
Paquete numeros
JuegoAdivinaNumero, JuegoAdivinaPar
Contiene las clases y
JuegoAdivinaImpar
Paquete profesor
Contiene la clase Teclado
Para crear un nuevo paquete desde Eclipse, basta con hacer click con el botn
derecho sobre el proyecto y dar a New/Package. A continuacin pedir el nombre
19
20 PRCTICA 5. PAQUETES
del paquete y, tras introducirlo, crear un directorio con el nombre del paquete que
nos aparecer en el rbol del proyecto. Ahora ya podemos hacer click con el derecho
sobre este paquete e ir aadiendo clases. Eclipse se encarga de poner por nosotros
las directivas package necesarias en los cheros fuente de las clases que vayamos
aadiendo a ese paquete.
5.2. Classpath
$ mkdir -p /home/alumno/tu_nombre/libs
$ cd /home/alumno/tu_nombre/Practica5
$ mv * /home/alumno/tu_nombre/libs
$ mv /home/alumno/tu_nombre/libs/Ap* .
$ java Aplicacion
$ java -cp .:/home/alumno/tu_nombre/libs Aplicacion
$ mv /home/alumno/tu_nombre/libs/* .
$ rm -rf /home/alumno/tu_nombre/libs
En primer lugar vamos a crear un chero JAR con el paquete profesor. El chero
JAR no es ms que un conjunto de cheros *.class comprimidos.
El API
Consultando la documentacin del API de java, usar la clase Random del paquete
java.util para que el nmero que hay que adivinar en los juegos de nmeros sea
un nmero aleatorio en lugar de un nmero predenido por el programador. Para
ello:
Clase JuegoAdivinaNumero
Aade como dato miembro un objeto de tipo Random que se usar para
generar nmeros aleatorios. A la hora de construir este objeto, es con-
veniente pasarle una semilla que evita que se genere siempre la misma
secuencia de nmeros pseudoaleatorios. Para ello puede usarse la clase
Date de paquete java.util.
Redene el mtodo ReiniciaPartida para que, adems de ejecutar el c-
digo denido en la clase Juego, asigne un valor aleatorio al dato miembro
que contiene el nmero a adivinar.
Clase AdivinaNumeroPar
1 http://java.sun.com/javase/reference/api.jsp
23
24 PRCTICA 6. EL API
Clase AdivinaNumeroImpar
Clase JuegoAhorcado
Crear una cadena del mismo tamao que la cadena a adivinar pero
en la que todos sus caracteres sean un '-'.
Clase Aplicacion
Para practicar con la clase Vector del paquete java.util, vamos a substituir el
array de interfaces de la clase Aplicacion por un vector.
6.3. CLASE VECTOR 25
Clase Aplicacion
Aadir un mtodo InfoVector que tome como parmetro un vector e
indique por pantalla la capacidad y tamao del mismo.
Excepciones
7.1. Ejercicio 1
7.2. Ejercicio 2
Clase JuegoException
Estar en el paquete juegos.excepciones.
Extiende la clase Exception.
Su constructor toma como parmetro una cadena de caracteres con la
descripcin del motivo de la excepcin.
27
28 PRCTICA 7. EXCEPCIONES
Clase Aplicacion
El mtodo EligeJuego no captura la excepcin y la pasa hacia arriba.
Tanto en caso de que ocurra una excepcin como de que no ocurra ningu-
na, el programa debe terminar mostrando el mensaje Fin del programa.
Probar a compilar y ejecutar el programa empleando como palabra a
adivinar una con nmero y otra sin ningn nmero.