Está en la página 1de 34

eman ta zabal zazu

Universidad
del Pas Vasco

Euskal Herriko
Unibertsitatea

Fundamentos de Programacin:

Prcticas de Java

Ingeniera Tcnica de Telecomunicacin

Bilbao, febrero de 2009

ii

Fundamentos de Programacin: Prcticas de Java.


c 2007, 2008, 2009 Gorka Prieto Agujeta
Copyright

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/

or, (b) send a letter to Creative Commons, 171

2nd Street, Suite 300, San Francisco, California, 94105, USA.

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. Familiarizacin con el Entorno

1.1.

El workspace

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.2.

Hola Mundo desde Consola . . . . . . . . . . . . . . . . . . . . . . .

1.3.

Hola Mundo desde Eclipse

. . . . . . . . . . . . . . . . . . . . . . .

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

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.2.

Hola Mundo desde Consola

Mediante un editor de textos

escribir el siguiente programa de ejemplo:

public class HolaJava {


public static void main( String args[] ) {
System.out.println( "Hola Java!" );
}
}
A continuacin guardar el chero fuente en el directorio

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.

FAMILIARIZACIN CON EL ENTORNO

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

que hemos creado:

$ 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

comprobaremos que se nos ha generado un chero

Este chero contiene el bytecode de java que podr ser interpre-

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

invocar este programa ser que se muestre por pantalla:

Hola Java!

1.3.

Hola Mundo desde Eclipse

A continuacin realizamos un proceso equivalente desde Eclipse.


En primer lugar debemos indicar a Eclipse cul es nuestro

workspace.

Esto se

File/Switch Workspace ..., y le indicamos que es el directorio


/home/alumno/tu_nombre. Es importante hacer esto al principio de cada prctica
hace con la opcin

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.

Ya podemos crear un nuevo proyecto con


deseamos crear un

Java Project

y le damos el nombre

Eclipse guarda los proyectos en directorios

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

escribir el fragmento de cdigo mostrado anteriormente. Escribimos el cdigo y guardamos el chero.


Finalmente lo compilamos y ejecutamos sin ms que ir al men
opcin

Run

y dar a la

Run As/Java Application. El resultado de la ejecucin del programa se nos


Console de Eclipse.

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

Teclado.LeeCaracter(), Teclado.LeeEntero() y Teclado.LeeCadena().


mtodos devuelven un char, un int o un String respectivamente con la

entrada introducida por el usuario en el teclado.


Copiar el siguiente cdigo en un chero
rectorio

Practica1-3:

Teclado.java

dentro de un nuevo di-

import java.io.*;
public class Teclado {
public static char LeeCaracter() {
char ch;
try {
ch = LeeCadena().charAt(0);
} catch( Exception e ) {
ch = 0;
}
}

return ch;

public static String LeeCadena() {


BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));
String str;
try {
str = br.readLine();
} catch( Exception e ) {
str = "";

PRCTICA 1.

FAMILIARIZACIN CON EL ENTORNO

}
return str;

public static int LeeEntero() {


int num;
try {
num = Integer.parseInt( LeeCadena().trim() );
} catch( Exception e ) {
num = 0;
}

return num;

Para probar el funcionamiento del teclado, copiar el siguiente cdigo en un chero

HolaTeclado.java dentro del mismo directorio y probar a compilar ambos cheros


desde la consola y desde un nuevo proyecto de Eclipse.

1
2
3
4

public class HolaTeclado {


public static void main( String args[] ) {
String nombre;
int edad;

System.out.print( "Dime tu nombre: " );


nombre = Teclado.LeeCadena();

6
7
8

System.out.print( "Dime tu edad: " );


edad = Teclado.LeeEntero();

9
10
11
12
13
14
15

1.5.

System.out.println( "Hola " + nombre +


", tienes " + edad + " aos" );

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

nos aseguramos de que

1.5.

DEPURACIN DE APLICACIONES

est presente y activado el JRE de SUN. Si no est presente, lo aadimos indicando


el siguiente path:

/usr/lib/jvm/java-6-sun-1.6.0.03/jre.

A continuacin vamos a poner dos breakpoints, uno en la lnea 6 del chero

Teclado.java

y otro en la lnea 9. Para poner un breakpoint basta con hacer click

con el derecho en el borde izquierdo de la lnea y dar a

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

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.
Repetir el procedimiento anterior pero pulsando F5 en lugar de F6 y comentar
las diferencias observadas.

PRCTICA 1.

FAMILIARIZACIN CON EL ENTORNO

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

Implementar una clase

Juego

con las siguientes caractersticas:

Atributos

Tiene como atributo pblico un entero que indica el nmero de vidas que
le quedan al jugador en la partida actual.

Mtodos

Tiene como mtodo el constructor que acepta un parmetro de tipo entero


que indica el nmero de vidas iniciales con las que parte el jugador.

Tiene un mtodo

MuestraVidasRestantes

que visualiza por pantalla el

nmero de vidas que le quedan al jugador en la partida actual.

Adems esta clase tiene tambin el mtodo

main

que debe realizar lo

siguiente:

Crea una instancia de la clase

Juego

indicando que el nmero de

vidas es 5.

Llama al mtodo

del objeto creado.

Resta una vida al valor del atributo con las vidas y vuelve a llamar
a

MuestraVidasRestantes

MuestraVidasRestantes.

Crea otra instancia de la clase

Juego

indicando que el nmero de

vidas es tambin de 5.

Llama al mtodo

MuestraVidasRestantes

luego al de la instancia anterior

de la nueva instancia y

PRCTICA 2.

2.2.

CLASES Y OBJETOS

Ocultacin de Atributos

En el ejercicio anterior no se ha prestado atencin a la forma en que se permite


que alguien modique el atributo con las vidas de la clase

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 un nuevo atributo tambin privado que guarde el nmero de vidas


que inicialmente se le pasaron al constructor del objeto. Este atributo se
utilizar para poder reiniciar el juego.

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

QuitaVida que disminuya en 1 el nmero de vidas


del jugador y devuelva un boolean indicando si al jugador le quedan ms
Aadir un mtodo

vidas o no. En caso de que al jugador no le queden ms vidas, este mtodo


debe mostrar un mensaje

Aadir un mtodo

Juego Terminado

ReiniciaPartida

por pantalla.

que asigne al atributo vidas el n-

mero de vidas que se haban indicado al llamar al constructor del objeto.


Para ello utilizar el nuevo atributo que se ha aadido.

Aadir un mtodo

ActualizaRecord

que compare el valor actual de r-

cord con el nmero de vidas restantes.

Si el nmero de vidas restantes es igual al rcord, mostrar un mensaje indicando que se ha alcanzado el rcord.

Si el nmero de vidas restante es mayor que el rcord, actualizar el


rcord y mostrar un mensaje diciendo que ste se ha batido y cul
es su nuevo valor.

Si el nmero de vidas es menor, no har nada.

main se va a poner ahora en una clase aparte


Aplicacion.java dentro del mismo directorio:

Para probar la ocultacin, la funcin


llamada

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

QuitaVida de una de las instancias


MuestraVidasRestantes.

de la clase

Juego

continuacin al mtodo

Posteriormente llamar al mtodo

MuestraVidasRestantes.
Llamar al mtodo

ReiniciaPartida

ActualizaRecord

y de nuevo al mtodo

de la primera instancia de

Juego

y a

continuacin llamar a este mismo mtodo pero en la segunda instancia. Explica


los mensajes mostrados.

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

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.

La funcin

Clase

main

ya no estar dentro de esta clase.

JuegoAdivinaNumero
Juego.

Deriva de la clase

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

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.

Muestra un mensaje al usuario pidiendo que adivine un nmero entre


el 0 y el 10.

Lee un entero del teclado y lo compara con el valor predenido por


el programador:

Si es igual, muestra un mensaje

ActualizaRecord,



Acertaste!!

y, tras llamar a

sale del mtodo.

QuitaVida heredado.
QuitaVida devuelve true, signica que an

Si es diferente, llama al mtodo


Si el mtodo

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

quedan ms vidas al jugador, con lo que sale del mtodo


Clase

Aplicacion

Contiene un mtodo main que, tras crear una instancia de la nueva clase

JuegoAdivinaNumero

3.2.

Juega.

que se ha creado, llama al mtodo

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

Aade un nuevo mtodo

ValidaNumero

que toma como parmetro el

nmero introducido por el usuario y devuelve un

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.

Si el nmero es impar, muestra un mensaje de error por pantalla y devuelve


Clase

false.

JuegoAdivinaImpar
JuegoAdivinaNumero
mtodo ValidaNumero devolviendo true

Deriva de la clase

Redene el

si el nmero es im-

par. Si el nmero es par, muestra un mensaje de error por pantalla y


devuelve

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

nmero de vidas de cada juego se pondr 3 y como nmero a adivinar un


nmero cualquiera, otro par y otro impar respectivamente, todos comprendidos entre el 0 y el 10.

Llama al mtodo

Juega

de cada una de las tres instancias.

La jerarqua de clases resultante es la siguiente:

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

En este ejercicio se va a implementar una interfaz

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

Se eliminar su mtodo abstracto

Juega,

pero la clase se seguir mante-

niendo como abstracta ya que no interesa que se creen instancias de ellas


directamente.
Interfaz

Jugable

que se ha quitado a la

Juega que
clase Juego.

Dispondr de un mtodo

Se incorporar un mtodo

cumplir el mismo objetivo que el

MuestraNombre

que no tome ningn parme-

tro y que obligue a las clases que implementen la interfaz a mostrar un


mensaje por pantalla con el nombre del juego.

Se incorporar un mtodo

MuestraInfo que no tome ningn parmetro y

que obligue a las clases que implementen la interfaz a mostrar un mensaje


por pantalla con una descripcin de cmo jugar al juego.
Clase

JuegoAdivinaNumero

Debe implementar la interfaz

Jugable
15

16

PRCTICA 4.

El mtodo MuestraNombre
Adivina un nmero

El mtodo

INTERFACES Y ARRAYS

visualizar por pantalla el texto

MuestraInfo visualizar por pantalla una descripcin de cmo

se juega al juego, informando del nmero de intentos que se le dan al


jugador.
Clase

JuegoAdivinaPar

texto

Redene el mtodo

Clase

MuestraInfo

MuestraNombre
Adivina un nmero impar

Redene el mtodo

Redene el mtodo

Clase

para que visualice por pantalla el

JuegoAdivinaImpar

texto

MuestraNombre
Adivina un nmero par

Redene el mtodo

para que visualice por pantalla el

MuestraInfo

Aplicacion

En el mtodo

main

crear un objeto de cada uno de los juegos mencio-

nados.

A continuacin llama los mtodos

MuestraNombre, MuestraInfo y Juega

de cada uno de los tres objetos creados.

4.2.

Arrays

Para comprender la utilidad de las interfaces, implementamos en este ejercicio


un array de interfaces que permitir invocar a cualquiera de los tres juegos de forma
genrica.

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.


Crea un array de tres elementos de tipo interfaz

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

para referirse a cualquiera de los juegos.

Muestra un men por pantalla con el nombre de los tres juegos y


pide al usuario que elija un juego introduciendo un nmero entre 0 y
2. Si el nmero introducido no es vlido, seguir pidiendo al usuario
un nmero vlido.

4.2.

17

ARRAYS

Devuelve el elemento del array correspondiente al nmero introducido


por el usuario.

Mtodo

main

Llama al mtodo
interfaz

Jugable

EligeJuego

para obtener una referencia de tipo

al juego seleccionado por el usuario.

MuestraNombre de este juego.


A continuacin llama al mtodo MuestraInfo del juego.
Llama al mtodo Juega del mismo para comenzar una nueva partida.
Llama al mtodo

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

Se trata de organizar en diferentes paquetes las clases empleadas hasta ahora y


de utilizarlos desde los diferentes cheros de cdigo.

Paquete

juegos,
Juego

Clase

Paquete

Paquete

interfaces

Contiene la interfaz

Paquete

a su vez formado por:

Jugable

numeros

JuegoAdivinaNumero, JuegoAdivinaPar
JuegoAdivinaImpar
Contiene las clases

profesor

Contiene la clase

Teclado

Tener en cuenta que al estructurar el cdigo en paquetes diferentes, el modicador


por defecto

friendly

va a impedir que un paquete use cdigo de otro salvo que

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

A continuacin pedir el nombre

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

5.2.1.

Desde la Consola

Mover todos los cheros salvo

workspace:
$
$
$
$

Aplicacion.java a un directorio libs en vuestro

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-

tra clases. Solucionarlo aadiendo al classpath este directorio.

$ 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 con el paquete profesor. El chero


*.class comprimidos.

En primer lugar vamos a crear un chero

JAR

no es ms que un conjunto de cheros

1. Hacemos click con el derecho sobre el paquete y damos a


2. Seleccionamos

Java/JAR file

Export....

y damos a siguiente.

3. A continuacin seleccionamos los cheros java que nos interese meter en el


paquete, en nuestro caso slo

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

Si abrimos el explorador de cheros, veremos que se nos ha generado un nuevo


chero

profesor.jar

en el directorio de nuestro

workspace.

profesor de nuestro rbol de proyecto haciendo


click con el derecho sobre l y dando a Delete. Al borrarlo se puede ver que Eclipse
Ahora borramos el paquete

muestra varios errores en el resto de nuestro cdigo, esto es debido a que no encuentra
el paquete

profesor.

Para solucionarlo vamos a incluir en nuestro

classpath

el chero

JAR

que aca-

bamos de generar:

1. Hacemos click con el derecho sobre el proyecto y damos a

Build Path/Add External Archives....


2. Seleccionamos el chero

profesor.jar

y damos a aceptar.

Ahora comprobamos cmo desaparecen los errores de Eclipse y que podemos


volver a ejecutar la aplicacin sin problema. Esto es debido a que con el nuevo

classpath

ya se pueden encontrar todos los paquetes necesarios.

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

del API de java .

Clase Random

Consultando la documentacin del API de java, usar la clase

java.util

Random del paquete

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

Ahora el constructor ya no necesitar como parmetro el nmero a adivinar.

Aade como dato miembro un objeto de tipo

Random

que se usar para

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

que contiene el nmero a adivinar.


Clase

AdivinaNumeroPar

ReiniciaPartida para que ejecute el cdigo denido


en la clase JuegoAdivinaNumero y adems transforme el nmero aleatorio
Redene el mtodo

generado por sta en un nmero par entre 0 y 10.

1 http://java.sun.com/javase/reference/api.jsp
23

24

PRCTICA 6.

Clase

EL API

AdivinaNumeroImpar

ReiniciaPartida para que ejecute el cdigo denido


en la clase JuegoAdivinaNumero y adems transforme el nmero aleatorio
Redene el mtodo

generado por sta en un nmero impar entre 0 y 10.

6.2.

Clase String

Haciendo uso de la clase

JuegoAhorcado
Clase

String

se va a implementar un nuevo juego

esta vez no basado en nmeros.

JuegoAhorcado
juegos.letras.

Estar en el paquete

Derivar de la clase

Tomar comoprimer parmetro del constructor el nmero de vidas y como

Juego.

segundo parmetro la cadena a adivinar.

Jugable.

Implementar la interfaz

Para implementar el mtodo

Juega

se recomienda seguir los siguientes

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 '-'.

Mostrar al usuario la cadena con los '-'.


Pedir al usuario que introduzca un carcter y comprobar si est en
la cadena a adivinar.

Si est en la cadena, reemplazar los '-' por el carcter en las posiciones


que corresponda. Comparar esta cadena con la cadena a adivinar y,
si son iguales, indicrselo al usuario y terminar la partida.

Si no est en la cadena, llamar al mtodo

QuitaVida

comprobando

si se ha terminado la partida o no. Si no se ha terminado la partida,


volver a mostrar la cadena con '-' al usuario y repetir el proceso.
Clase

6.3.

Aplicacion

Aadir al mtodo

EligeJuego

el nuevo juego que se acaba de crear.

Clase Vector

Para practicar con la clase


array de interfaces de la clase

Vector del paquete java.util, vamos a substituir el


Aplicacion por un vector.

6.3.

25

CLASE VECTOR

Clase

Aplicacion

Aadir un mtodo

InfoVector

que tome como parmetro un vector e

indique por pantalla la capacidad y tamao del mismo.

En el mtodo

EligeJuego

crear un vector de capacidad 3 y con un in-

cremento en saltos de 2 elementos. Llamar al mtodo

InfoVector.

Aadir los tres juegos de nmeros a este vector y volver a llamar al mtodo

InfoVector.

A continuacin aadir al vector el objeto correspondiente al juego del


ahorcado y volver a llamar al mtodo

InfoVector.

Modicar el resto de la funcin para que trabaje con el vector en lugar


de con el array de interfaces.

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

devuelve un 0 en caso de que el dato

que se introduzca no sea un nmero. Modicar este mtodo para que si se recibe
una excepcin del tipo

NumberFormatException,

se le indique al usuario que debe

introducir un nmero vlido y se vuelva a leer la entrada. En caso de recibir cualquier


otra excepcin, sigue devolviendo un 0.

7.2.

Ejercicio 2

El constructor de las clases no puede devolver ningn cdigo de retorno para


indicar si ha funcionado bien o no. Una opcin es que genere una excepcin en caso
de fallo.

Clase

JuegoException
juegos.excepciones.

Estar en el paquete

Extiende la clase

Su constructor toma como parmetro una cadena de caracteres con la

Exception.

descripcin del motivo de la excepcin.


Constructor de la clase

JuegoAhorcado

Debe comprobar que ninguno de los caracteres de la palabra a adivinar sea


un nmero, para ello puede valerse de los mtodos de la clase
Si hay un nmero, lanzar una excepcin

27

Character.

JuegoException noticndolo.

28

PRCTICA 7.

Clase

EXCEPCIONES

Aplicacion

El mtodo

EligeJuego

El mtodo

main debe capturar cualquier excepcin e informar de la causa

no captura la excepcin y la pasa hacia arriba.

de fallo antes de terminar.

Tanto en caso de que ocurra una excepcin como de que no ocurra ninguna, 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.

También podría gustarte