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.


Copyright c 2007, 2008, 2009 Gorka Prieto Agujeta

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 1. Familiarizacin con el Entorno
1.1. 1.2. 1.3. 1.4. 1.5. El workspace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Hola Mundo desde Consola . . . . . . . . . . . . . . . . . . . . . . . Hola Mundo desde Eclipse Lectura de Teclado . . . . . . . . . . . . . . . . . . . . . . .

iii

1
1 1 2 3 4

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

Depuracin de Aplicaciones

2. Clases y Objetos
2.1. 2.2. Clase Juego . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ocultacin de Atributos

7
7 8

3. Herencia y Polimorsmo
3.1. 3.2. Ejercicio 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ejercicio 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

11
11 12

4. Interfaces y Arrays
4.1. 4.2. Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

15
15 16

5. Paquetes
5.1. 5.2. Paquetes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Classpath 5.2.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

19
19 20 20

Desde la Consola

vi

NDICE GENERAL

5.2.2.

Desde Eclipse . . . . . . . . . . . . . . . . . . . . . . . . . . .

20

6. El API
6.1. 6.2. 6.3. Clase Random . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Clase String . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Clase Vector . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

23
23 24 24

7. Excepciones
7.1. 7.2. Ejercicio 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ejercicio 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

27
27 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

En primer lugar creamos un directorio con nuestro nombre dentro del partir de ahora nos vamos a referir a l como

usuario alumno. En este directorio ser donde guardemos todas las prcticas y a

workspace. workspace

Se recomienda que antes de terminar cada clase, el alumno se copie su

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


1
escribir el siguiente programa de ejemplo:

Mediante un editor de textos

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

workspace
1 Si

con el nombre

HolaJava.java.

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.

F AMILIARIZACIN 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. $ java HolaJava

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:

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 invocar este programa ser que se muestre por pantalla:

main. El resultado de

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 hace con la opcin

File/Switch Workspace ..., y le indicamos que es el directorio /home/alumno/tu_nombre. Es importante hacer esto al principio de cada prctica
ya que puede que otra persona de otro grupo haya cambiado Eclipse a su propio

workspace.

Esto se

workspace.
Ya podemos crear un nuevo proyecto con deseamos crear un

Java Project

y le damos el nombre

Eclipse guarda los proyectos en directorios

File/New Project. Indicamos que Practica1-2 al proyecto. separados dentro del workspace. HolaJava a esta nueva clase y a conti-

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

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 mostrar en la ventana

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

Run

y dar a la

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 Teclado.java
dentro de un nuevo di-

entrada introducida por el usuario en el teclado. Copiar el siguiente cdigo en un chero rectorio

Practica1-3:

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.

F AMILIARIZACIN 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 5 6 7 8 9 10 11 12 13 14 15

public class HolaTeclado { public static void main( String args[] ) { String nombre; int edad; System.out.print( "Dime tu nombre: " ); nombre = Teclado.LeeCadena(); System.out.print( "Dime tu edad: " ); edad = Teclado.LeeEntero(); System.out.println( "Hola " + nombre + ", tienes " + edad + " aos" );

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

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 breakpoint puesto previamente.

Toggle Breakpoint,

o bien

hacer doble click con el izquierdo en el borde de la lnea. Lo mismo para quitar un

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.

F AMILIARIZACIN 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
Juego
con las siguientes caractersticas:

Implementar una clase 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 siguiente:

main

que debe realizar lo

Crea una instancia de la clase vidas es 5. Llama al mtodo

Juego

indicando que el nmero de

MuestraVidasRestantes Juego

del objeto creado.

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

MuestraVidasRestantes.
indicando que el nmero de

Crea otra instancia de la clase vidas es tambin de 5. Llama al mtodo

MuestraVidasRestantes

de la nueva instancia y

luego al de la instancia anterior

PRCTICA 2.

CLASES Y OBJETOS

2.2.

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 cambios:

Juego.

En este ejercicio

se utilizar un acceso controlado a ese atributo. Para ello se realizarn los siguientes

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

Juego Terminado

por pantalla.

Aadir un mtodo

ReiniciaPartida

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.

Para probar la ocultacin, la funcin llamada

Aplicacion

en un chero

main se va a poner ahora en una clase aparte Aplicacion.java dentro del mismo directorio:

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

continuacin al mtodo

QuitaVida de una de las instancias MuestraVidasRestantes. ReiniciaPartida

de la clase

Juego

Posteriormente llamar al mtodo

y de nuevo al mtodo

MuestraVidasRestantes.
Llamar al mtodo

ActualizaRecord

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
1
tenga que

En este ejercicio se va a implementar un juego en el que el usuario

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 Juega que no tome parmetros y que ten-

Aadirle un mtodo abstracto

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

main

ya no estar dentro de esta clase.

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.

teclado
1 Usando

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

Llama al mtodo

ReiniciaPartida

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,
Si el mtodo

Acertaste!!

y, tras llamar a

sale del mtodo.

Si es diferente, llama al mtodo

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

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

Juega.

Aplicacion
que se ha creado, llama al mtodo

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

JuegoAdivinaNumero

Juega.

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 ValidaNumero
que toma como parmetro el

Aade un nuevo mtodo caso, ser siempre

nmero introducido por el usuario y devuelve un

true. En el mtodo Juega pedir un nuevo nmero por teclado si el ValidaNumero devuelve false y, en este caso, no restar vida.
Clase

boolean

que, en este

mtodo

JuegoAdivinaPar JuegoAdivinaNumero mtodo ValidaNumero devolviendo true


si el nmero es par.

Deriva de la clase Redene el vuelve

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

false. JuegoAdivinaNumero mtodo ValidaNumero devolviendo true

Clase

JuegoAdivinaImpar
si el nmero es im-

Deriva de la clase Redene el devuelve

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

false.

3.2.

EJERCICIO 2

13

Clase

Aplicacion
y

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
Jugable
que implementarn

En este ejercicio se va a implementar una interfaz

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,
pero la clase se seguir mante-

Se eliminar su mtodo abstracto directamente.

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

Interfaz

Jugable Juega que clase Juego.


cumplir el mismo objetivo que el

Dispondr de un mtodo que se ha quitado a la

Se incorporar un mtodo

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 Jugable
15

Debe implementar la interfaz

16 El mtodo MuestraNombre Adivina un nmero El mtodo jugador. Clase

PRCTICA 4.

INTERF ACES 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

JuegoAdivinaPar MuestraNombre Adivina un nmero par MuestraInfo


para que visualice por pantalla el

Redene el mtodo texto

Redene el mtodo

Clase

JuegoAdivinaImpar MuestraNombre Adivina un nmero impar MuestraInfo


para que visualice por pantalla el

Redene el mtodo texto

Redene el mtodo

Clase

Aplicacion main
crear un objeto de cada uno de los juegos mencio-

En el mtodo 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 EligeJuego Jugable. Jugable.


Mtodo

Mtodo pblico y esttico que no toma parmetros y devuelve un objeto del tipo

Crea un objeto de cada uno de los tres juegos implementados. Crea un array de tres elementos de tipo interfaz

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.

ARRAYS

17

Devuelve el elemento del array correspondiente al nmero introducido por el usuario.

Mtodo

main Jugable EligeJuego


para obtener una referencia de tipo al juego seleccionado por el usuario.

Llama al mtodo interfaz

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.

INTERF ACES 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

a su vez formado por:

Clase

Paquete

interfaces Jugable
y


Paquete

Contiene la interfaz

Paquete

numeros

JuegoAdivinaNumero, JuegoAdivinaPar JuegoAdivinaImpar


Contiene las clases

profesor Teclado

Contiene la clase

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 correspondientes. Para crear un nuevo paquete desde Eclipse, basta con hacer click con el botn derecho sobre el proyecto y dar a

import

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

Classpath
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

En primer lugar vamos a crear un chero

JAR

no es ms que un conjunto de cheros

JAR con el paquete profesor. El chero *.class comprimidos. Export....

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

Java/JAR file

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.

CLASSPATH

21

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. classpath
el chero

Para solucionarlo vamos a incluir en nuestro bamos de generar:

JAR

que aca-

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

Random, String

Vector

del API de java .

6.1.

Clase Random
Random del paquete

Consultando la documentacin del API de java, usar la clase

java.util
ello:

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

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.

EL API

Clase

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
String
se va a implementar un nuevo juego

Haciendo uso de la clase

JuegoAhorcado
Clase

esta vez no basado en nmeros.

JuegoAhorcado juegos.letras. Juego.

Estar en el paquete Derivar de la clase

Tomar comoprimer parmetro del constructor el nmero de vidas y como segundo parmetro la cadena a adivinar. Implementar la interfaz

Jugable. Juega
se recomienda seguir los siguientes

Para implementar el mtodo 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

Aplicacion EligeJuego
el nuevo juego que se acaba de crear.

Aadir al mtodo

6.3.

Clase Vector
Vector del paquete java.util, vamos a substituir el Aplicacion por un vector.

Para practicar con la clase array de interfaces de la clase

6.3.

CLASE VECTOR

25

Clase

Aplicacion InfoVector
que tome como parmetro un vector e

Aadir un mtodo

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
LeeEntero
de la clase

El mtodo

Teclado

devuelve un 0 en caso de que el dato se le indique al usuario que debe

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

NumberFormatException,

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

Estar en el paquete Extiende la clase

Su constructor toma como parmetro una cadena de caracteres con la descripcin del motivo de la excepcin.

Constructor de la clase

JuegoAhorcado Character.

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

JuegoException noticndolo.

27

28

PRCTICA 7.

EXCEPCIONES

Clase

Aplicacion EligeJuego
no captura la excepcin y la pasa hacia arriba.

El mtodo El mtodo

main debe capturar cualquier excepcin e informar de la causa

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