Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Practicas Java
Practicas Java
Universidad
del Pas Vasco
Euskal Herriko
Unibertsitatea
Fundamentos de Programacin:
Prcticas de Java
ii
Fundamentos de Programacin: Prcticas de Java by Gorka Prieto is licensed under a Creative Commons Attribution-Share Alike 3.0 United States
License. To view a copy of this license, visit
licenses/by-sa/3.0/us/;
http://creativecommons.org/
Fundamentos de Programacin: Prcticas de Java por Gorka Prieto est licenciado bajo una licencia Creative Commons Reconocimiento-Compartir
bajo la misma licencia 2.5 Espaa License. Para ver una copia de esta licencia,
visita
http://creativecommons.org/licenses/by-sa/2.5/es/;
o, (b) man-
da una carta a Creative Commons, 171 2nd Street, Suite 300, San Francisco,
California, 94105, USA.
Resumen
Con las siguientes prcticas se pretende aanzar los conceptos de programacin
orientada a objetos (POO) que se han visto en las clases de teora con Java.
Tras la realizacin de las prcticas, se habr implementado en Java una aplicacin
que permita al usuario elegir entre diferentes juegos sencillos de consola y ejecutarlos.
Para ello se partir de un programa sencillo y se ir incluyendo en cada prctica
un concepto nuevo de los vistos en teora comprobando la mejora que aporta sobre
la versin anterior del programa.
Salvo en la primera prctica de familiarizacin con el entorno, en el resto de
prcticas se realizar una copia del directorio con todos los cheros de la prctica
anterior y sobre esos cheros se incluirn las nuevas funcionalidades.
iii
iv
RESUMEN
ndice general
Resumen
iii
1.1.
El workspace
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2.
1.3.
. . . . . . . . . . . . . . . . . . . . . . .
1.4.
Lectura de Teclado
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.5.
Depuracin de Aplicaciones
. . . . . . . . . . . . . . . . . . . . . . .
2. Clases y Objetos
2.1.
Clase Juego
2.2.
Ocultacin de Atributos
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
3. Herencia y Polimorsmo
7
8
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
5.2.1.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Desde la Consola
. . . . . . . . . . . . . . . . . . . . . . . . .
20
vi
NDICE GENERAL
5.2.2.
Desde Eclipse . . . . . . . . . . . . . . . . . . . . . . . . . . .
6. El API
20
23
6.1.
Clase Random . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23
6.2.
Clase String . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
24
6.3.
Clase Vector . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
24
7. Excepciones
27
7.1.
Ejercicio 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
27
7.2.
Ejercicio 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
27
Prctica 1
Familiarizacin con el Entorno
En esta primera prctica se trata de que el alumno se familiarice con
el entorno de programacin, tanto mediante la interfaz grca (Eclipse)
como mediante la lnea de comandos. Para ello se utilizar un programa
sencillo que se compilar y ejecutar.
1.1.
El workspace
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.
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.2.
workspace
con el nombre
HolaJava.java.
1 Si
Practica1-1 de vuestro
se usa un procesador de textos como OpenOce, habr que asegurarse de guardar el chero
en modo texto en lugar de en formato binario.
1
PRCTICA 1.
El siguiente paso consiste en compilar este programa de ejemplo. Para ello abrimos la consola y nos situamos en el directorio que contiene el cdigo fuente y que
ser el directorio
Practica1-1
dentro del
workspace
$ cd tu_nombre
$ cd Practica1-1
Podemos comprobar los cheros disponibles en este directorio con el comando:
$ ls
Desde este directorio invocamos el compilador de java pasndole como parmetro
el chero que queremos compilar:
$ javac HolaJava.java
Si volvemos a hacer un
HolaJava.class.
ls
tado por una mquina virtual java. Para invocarlo, escribimos lo siguiente:
$ java HolaJava
Como se puede observar, el parmetro que se le pasa no es el nombre del chero
java, sino que es el nombre de la clase que contiene el mtodo
main. El resultado de
Hola Java!
1.3.
workspace.
Esto se
ya que puede que otra persona de otro grupo haya cambiado Eclipse a su propio
workspace.
File/New Project. Indicamos que
Practica1-2 al proyecto.
separados dentro del workspace.
Java Project
y le damos el nombre
Desde el rbol del proyecto, hacemos click con el botn derecho y damos a la
opcin de aadir una nueva clase. Llamamos
nuacin vemos que automticamente se crea un chero fuente sobre el que podemos
1.4.
LECTURA DE TECLADO
Run
y dar a la
mostrar en la ventana
Para el resto de las prcticas el alumno podr usar el entorno de desarrollo que
ms cmodo le resulte.
1.4.
Lectura de Teclado
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 mtodos
Estos
Practica1-3:
Teclado.java
import java.io.*;
public class Teclado {
public static char LeeCaracter() {
char ch;
try {
ch = LeeCadena().charAt(0);
} catch( Exception e ) {
ch = 0;
}
}
return ch;
PRCTICA 1.
}
return str;
return num;
1
2
3
4
6
7
8
9
10
11
12
13
14
15
1.5.
Depuracin de Aplicaciones
Eclipse permite depurar aplicaciones de una forma muy cmoda desde la interfaz
grca. Para que funcione la depuracin de cdigo java en Eclipse, debemos asegurarnos de que se est usando un JRE que soporte la depuracin de aplicaciones.
Para ello en
Window/Preferences/Java/Installed JREs
1.5.
DEPURACIN DE APLICACIONES
/usr/lib/jvm/java-6-sun-1.6.0.03/jre.
Teclado.java
Toggle Breakpoint,
o bien
hacer doble click con el izquierdo en el borde de la lnea. Lo mismo para quitar un
breakpoint puesto previamente.
Una vez puestos los breakpoints, depuramos el programa sin ms que ir al men
Run
y dar a la opcin
El programa se detendr
PRCTICA 1.
Prctica 2
Clases y Objetos
En esta segunda prctica comenzaremos ya con el programa que iremos
ampliando a lo largo del resto de prcticas. El objetivo de esta prctica
es que el alumno practique y se familiarice con los conceptos de clase y
objeto.
2.1.
Clase Juego
Juego
Atributos
Tiene como atributo pblico un entero que indica el nmero de vidas que
le quedan al jugador en la partida actual.
Mtodos
Tiene un mtodo
MuestraVidasRestantes
main
siguiente:
Juego
vidas es 5.
Llama al mtodo
Resta una vida al valor del atributo con las vidas y vuelve a llamar
a
MuestraVidasRestantes
MuestraVidasRestantes.
Juego
vidas es tambin de 5.
Llama al mtodo
MuestraVidasRestantes
de la nueva instancia y
PRCTICA 2.
2.2.
CLASES Y OBJETOS
Ocultacin de Atributos
Juego.
En este ejercicio
se utilizar un acceso controlado a ese atributo. Para ello se realizarn los siguientes
cambios:
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
Aadir un mtodo
Juego Terminado
ReiniciaPartida
por pantalla.
Aadir un mtodo
ActualizaRecord
Si el nmero de vidas restantes es igual al rcord, mostrar un mensaje indicando que se ha alcanzado el rcord.
Aplicacion
en un chero
Antes de modicar esta funcin, comprobar que ahora el compilador nos muestra 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
Llamar al mtodo
de la clase
Juego
continuacin al mtodo
MuestraVidasRestantes.
Llamar al mtodo
ReiniciaPartida
ActualizaRecord
y de nuevo al mtodo
de la primera instancia de
Juego
y a
10
PRCTICA 2.
CLASES Y OBJETOS
Prctica 3
Herencia y Polimorsmo
En esta prctica se introducen los conceptos de herencia y polimorsmo.
La herencia permite a nuevas clases aprovechar cdigo ya implementado
por clases anteriores. El polimorsmo permite llamar a un mtodo con
diferentes resultados segn la clase en la que se est. Adems se ir dando
ya un poco de forma a la aplicacin nal.
3.1.
Ejercicio 1
tenga que
Clase
Juego
La clase
Juego
La funcin
Clase
main
JuegoAdivinaNumero
Juego.
Deriva de la clase
1 Usando
teclado
Implementa el mtodo
Juega
de la clase base:
la clase de entrada por teclado copiada en el primera prctica, se leer un entero del
11
12
PRCTICA 3.
HERENCIA Y POLIMORFISMO
ReiniciaPartida
Llama al mtodo
que ha heredado.
ActualizaRecord,
Acertaste!!
y, tras llamar a
QuitaVida heredado.
QuitaVida devuelve true, signica que an
le que-
dan ms vidas al jugador por lo que se muestra un mensaje indicando si el nmero a adivinar es mayor o menor y se le pide que
lo intente de nuevo.
Si el mtodo
QuitaVida
devuelve
false
signica que ya no le
Aplicacion
Contiene un mtodo main que, tras crear una instancia de la nueva clase
JuegoAdivinaNumero
3.2.
Juega.
Juega.
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
ValidaNumero
boolean
que, en este
true.
En el mtodo Juega pedir un nuevo nmero por teclado si el
ValidaNumero devuelve false y, en este caso, no restar vida.
caso, ser siempre
Clase
mtodo
JuegoAdivinaPar
JuegoAdivinaNumero
mtodo ValidaNumero devolviendo true
Deriva de la clase
Redene el
si el nmero es par.
false.
JuegoAdivinaImpar
JuegoAdivinaNumero
mtodo ValidaNumero devolviendo true
Deriva de la clase
Redene el
si el nmero es im-
false.
3.2.
13
EJERCICIO 2
Clase
Aplicacion
El mtodo main crea una instancia de cada uno de los tres juegos creados:
JuegoAdivinaNumero, JuegoAdivinaPar
JuegoAdivinaImpar.
Como
Llama al mtodo
Juega
14
PRCTICA 3.
HERENCIA Y POLIMORFISMO
Prctica 4
Interfaces y Arrays
En esta prctica se har uso del concepto de interfaz y se crear un
array de interfaces que permita utilizar objetos de clases diferentes de
una forma homognea (polimorsmo).
4.1.
Interfaces
Jugable
que implementarn
los juegos desarrollados hasta ahora y nuevos que se desarrollen. Esta interfaz nos
permitir especicar una serie de operaciones comunes que deben implementar todos
los juegos y que nos permitirn manejarlos de forma genrica posteriormente.
Clase
Juego
Juega,
Jugable
que se ha quitado a la
Juega que
clase Juego.
Dispondr de un mtodo
Se incorporar un mtodo
MuestraNombre
Se incorporar un mtodo
JuegoAdivinaNumero
Jugable
15
16
PRCTICA 4.
El mtodo MuestraNombre
Adivina un nmero
El mtodo
INTERFACES Y ARRAYS
JuegoAdivinaPar
texto
Redene el mtodo
Clase
MuestraInfo
MuestraNombre
Adivina un nmero impar
Redene el mtodo
Redene el mtodo
Clase
JuegoAdivinaImpar
texto
MuestraNombre
Adivina un nmero par
Redene el mtodo
MuestraInfo
Aplicacion
En el mtodo
main
nados.
4.2.
Arrays
Clase
Aplicacion
Mtodo
EligeJuego
Jugable.
Jugable.
Rellena este array con los objetos creados para los distintos juegos.
A partir de este momento, slo se trabajar con este array de tipo
interfaz
Jugable
4.2.
17
ARRAYS
Mtodo
main
Llama al mtodo
interfaz
Jugable
EligeJuego
Finalmente, tras concluir la partida, pregunta al usuario si desea jugar de nuevo y en caso armativo vuelve a repetir los pasos anteriores.
18
PRCTICA 4.
INTERFACES Y ARRAYS
Prctica 5
Paquetes
El nmero de clases y cheros usados en la prctica ya va creciendo, por
lo que vamos a estructurarlos en directorios y paquetes.
5.1.
Paquetes
Paquete
juegos,
Juego
Clase
Paquete
Paquete
interfaces
Contiene la interfaz
Paquete
Jugable
numeros
JuegoAdivinaNumero, JuegoAdivinaPar
JuegoAdivinaImpar
Contiene las clases
profesor
Contiene la clase
Teclado
friendly
ste lo ofrezca como pblico. Por lo tanto se debern actualizar los modicadores
de acceso de clases, mtodos y atributos que se consideren necesarios. De la misma
forma, al estar el cdigo ahora en paquetes diferentes, ser necesario hacer los
import
correspondientes.
Para crear un nuevo paquete desde Eclipse, basta con hacer click con el botn
derecho sobre el proyecto y dar a
New/Package.
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
5.2.
Classpath
5.2.1.
Desde la Consola
workspace:
$
$
$
$
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* .
Si a continuacin se ejecuta el programa, dar un error indicando que no encuen-
$ java Aplicacion
$ java -cp .:/home/alumno/tu_nombre/libs Aplicacion
Finalmente volver a poner los cheros en su ubicacin original.
$ mv /home/alumno/tu_nombre/libs/* .
$ rm -rf /home/alumno/tu_nombre/libs
5.2.2.
Desde Eclipse
JAR
Java/JAR file
Export....
y damos a siguiente.
Teclado.java.
4. En esta misma pantalla indicamos que el nombre del chero que queremos
generar es
profesor.jar
y damos a terminar.
5.2.
21
CLASSPATH
profesor.jar
en el directorio de nuestro
workspace.
muestra varios errores en el resto de nuestro cdigo, esto es debido a que no encuentra
el paquete
profesor.
classpath
el chero
JAR
que aca-
bamos de generar:
profesor.jar
y damos a aceptar.
classpath
22
PRCTICA 5.
PAQUETES
Prctica 6
El API
En esta prctica se trata de que el alumno sea capaz de leer documentacin referente a un paquete externo y de utilizarlo. Para ello se utilizarn
las clases
6.1.
Random, String
Vector
Clase Random
java.util
para que el nmero que hay que adivinar en los juegos de nmeros sea
Clase
JuegoAdivinaNumero
Random
generar nmeros aleatorios. A la hora de construir este objeto, es conveniente 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.
ReiniciaPartida para que, adems de ejecutar el cdigo denido en la clase Juego, asigne un valor aleatorio al dato miembro
Redene el mtodo
AdivinaNumeroPar
1 http://java.sun.com/javase/reference/api.jsp
23
24
PRCTICA 6.
Clase
EL API
AdivinaNumeroImpar
6.2.
Clase String
JuegoAhorcado
Clase
String
JuegoAhorcado
juegos.letras.
Estar en el paquete
Derivar de la clase
Juego.
Jugable.
Implementar la interfaz
Juega
pasos:
Llamar al mtodo
ReiniciaPartida
de la clase base.
Crear una cadena del mismo tamao que la cadena a adivinar pero
en la que todos sus caracteres sean un '-'.
QuitaVida
comprobando
6.3.
Aplicacion
Aadir al mtodo
EligeJuego
Clase Vector
6.3.
25
CLASE VECTOR
Clase
Aplicacion
Aadir un mtodo
InfoVector
En el mtodo
EligeJuego
InfoVector.
Aadir los tres juegos de nmeros a este vector y volver a llamar al mtodo
InfoVector.
InfoVector.
26
PRCTICA 6.
EL API
Prctica 7
Excepciones
En esta ltima prctica se incluir el manejo de excepciones para validar
los datos introducidos por el usuario.
7.1.
Ejercicio 1
El mtodo
LeeEntero
de la clase
Teclado
que se introduzca no sea un nmero. Modicar este mtodo para que si se recibe
una excepcin del tipo
NumberFormatException,
7.2.
Ejercicio 2
Clase
JuegoException
juegos.excepciones.
Estar en el paquete
Extiende la clase
Exception.
JuegoAhorcado
27
Character.
JuegoException noticndolo.
28
PRCTICA 7.
Clase
EXCEPCIONES
Aplicacion
El mtodo
EligeJuego
El mtodo
Tanto en caso de que ocurra una excepcin como de que no ocurra ninguna, el programa debe terminar mostrando el mensaje