Prácticas De Java - OCW

Transcription

eman ta zabal zazuUniversidaddel País VascoEuskal HerrikoUnibertsitateaFundamentos de Programación:Prácticas de Javao1Ingeniería Técnica de TelecomunicaciónBilbao, febrero de 2009

iiFundamentos de Programación: Prácticas de Java.Copyright c 2007, 2008, 2009 Gorka Prieto AgujetaFundamentos de Programación: Prácticas de Java by Gorka Prieto is licensed under a Creative Commons Attribution-Share Alike 3.0 United StatesLicense. To view a copy of this license, .org/or, (b) send a letter to Creative Commons, 1712nd Street, Suite 300, San Francisco, California, 94105, USA.Fundamentos de Programación: Prácticas de Java por Gorka Prieto está licenciado bajo una licencia Creative Commons Reconocimiento-Compartirbajo la misma licencia 2.5 España License. Para ver una copia de esta /by-sa/2.5/es/;o, (b) man-da una carta a Creative Commons, 171 2nd Street, Suite 300, San Francisco,California, 94105, USA.

ResumenCon las siguientes prácticas se pretende a anzar los conceptos de programaciónorientada a objetos (POO) que se han visto en las clases de teoría con Java.Tras la realización de las prácticas, se habrá implementado en Java una aplicaciónque 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 prácticaun concepto nuevo de los vistos en teoría comprobando la mejora que aporta sobrela versión anterior del programa.Salvo en la primera práctica de familiarización con el entorno, en el resto deprácticas se realizará una copia del directorio con todos los cheros de la prácticaanterior y sobre esos cheros se incluirán las nuevas funcionalidades.iii

ivRESUMEN

Índice generalResumeniii1. Familiarización con el Entorno11.1.El workspace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11.2. Hola Mundo desde Consola . . . . . . . . . . . . . . . . . . . . . . .11.3. Hola Mundo desde Eclipse. . . . . . . . . . . . . . . . . . . . . . .21.4.Lectura de Teclado. . . . . . . . . . . . . . . . . . . . . . . . . . . .31.5.Depuración de Aplicaciones. . . . . . . . . . . . . . . . . . . . . . .2. Clases y Objetos2.1.Clase Juego2.2.Ocultación de Atributos47. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3. Herencia y Polimor smo78113.1.Ejercicio 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .113.2.Ejercicio 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .124. Interfaces y Arrays154.1.Interfaces. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .154.2.Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .165. Paquetes195.1.Paquetes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .195.2.Classpath205.2.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Desde la Consola. . . . . . . . . . . . . . . . . . . . . . . . .v20

viÍNDICE GENERAL5.2.2.Desde Eclipse . . . . . . . . . . . . . . . . . . . . . . . . . . .6. El API20236.1.Clase Random . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .236.2.Clase String . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .246.3.Clase Vector . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .247. Excepciones277.1.Ejercicio 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .277.2.Ejercicio 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .27

Práctica 1Familiarización con el EntornoEn esta primera práctica se trata de que el alumno se familiarice conel entorno de programación, tanto mediante la interfaz grá ca (Eclipse)como mediante la línea de comandos. Para ello se utilizará un programasencillo que se compilará y ejecutará.1.1.El workspace En primer lugar creamos un directorio con nuestro nombre dentro delhomedelusuario alumno. En este directorio será donde guardemos todas las prácticas y apartir de ahora nos vamos a referir a él comoworkspace.Se recomienda que antes de terminar cada clase, el alumno se copie suworkspacea una memoria USB a modo de backup, ya que los ordenadores del centro de cálculopueden ser formateados en cualquier momento a lo largo del curso y sin previo aviso.1.2. Hola Mundo desde ConsolaMediante un editor de textos1escribir el siguiente programa de ejemplo:public class HolaJava {public static void main( String args[] ) {System.out.println( "½Hola Java!" );}}A continuación guardar el chero fuente en el directorioworkspacecon el nombreHolaJava.java.1 SiPractica1-1 de vuestrose usa un procesador de textos como OpenO ce, habrá que asegurarse de guardar el cheroen modo texto en lugar de en formato binario.1

2PRÁCTICA 1.FAMILIARIZACIÓN CON EL ENTORNOEl siguiente paso consiste en compilar este programa de ejemplo. Para ello abrimos la consola y nos situamos en el directorio que contiene el código fuente y queserá el directorioPractica1-1dentro delworkspaceque hemos creado: cd tu nombre cd Practica1-1Podemos comprobar los cheros disponibles en este directorio con el comando: lsDesde este directorio invocamos el compilador de java pasándole como parámetroel chero que queremos compilar: javac HolaJava.javaSi volvemos a hacer unHolaJava.class.lscomprobaremos que se nos ha generado un cheroEste chero contiene el bytecode de java que podrá ser interpre-tado por una máquina virtual java. Para invocarlo, escribimos lo siguiente: java HolaJavaComo se puede observar, el parámetro que se le pasa no es el nombre del cherojava, sino que es el nombre de la clase que contiene el métodomain. El resultado deinvocar este programa será que se muestre por pantalla:½Hola Java!1.3. Hola Mundo desde EclipseA continuación realizamos un proceso equivalente desde Eclipse.En primer lugar debemos indicar a Eclipse cuál es nuestroworkspace.Esto seFile/Switch Workspace ., y le indicamos que es el directorio/home/alumno/tu nombre. Es importante hacer esto al principio de cada prácticahace con la opciónya que puede que otra persona de otro grupo haya cambiado Eclipse a su propioworkspace.File/New Project. Indicamos quePractica1-2 al proyecto.separados dentro del workspace.Ya podemos crear un nuevo proyecto condeseamos crear unJava Projecty le damos el nombreEclipse guarda los proyectos en directoriosDesde el árbol del proyecto, hacemos click con el botón derecho y damos a laopción de añadir una nueva clase. LlamamosHolaJava a esta nueva clase y a conti-nuación vemos que automáticamente se crea un chero fuente sobre el que podemos

1.4.3LECTURA DE TECLADOescribir el fragmento de código mostrado anteriormente. Escribimos el código y guardamos el chero.Finalmente lo compilamos y ejecutamos sin más que ir al menúopciónRuny dar a laRun As/Java Application. El resultado de la ejecución del programa se nosConsole de Eclipse.mostrará en la ventanaPara el resto de las prácticas el alumno podrá usar el entorno de desarrollo quemás cómodo le resulte.1.4.Lectura de TecladoPara los programas que se van a realizar en el resto de prácticas, resulta necesarioel uso de la entrada por teclado. Como estos conceptos no se han explicado en lateoría, usaremos el siguiente código creado por el profesor y que proporciona los métodosEstosTeclado.LeeCaracter(), Teclado.LeeEntero() y Teclado.LeeCadena().métodos devuelven un char, un int o un String respectivamente con laentrada introducida por el usuario en el teclado.Copiar el siguiente código en un cherorectorioPractica1-3:Teclado.javadentro 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 "";

4PRÁCTICA 1.FAMILIARIZACIÓN 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 código en un cheroHolaTeclado.java dentro del mismo directorio y probar a compilar ambos cherosdesde la consola y desde un nuevo proyecto de Eclipse.1234public class HolaTeclado {public static void main( String args[] ) {String nombre;int edad;5System.out.print( "Dime tu nombre: " );nombre Teclado.LeeCadena();678System.out.print( "Dime tu edad: " );edad println( "Hola " nombre ", tienes " edad " años" );Depuración de AplicacionesEclipse permite depurar aplicaciones de una forma muy cómoda desde la interfazgrá ca. Para que funcione la depuración de código java en Eclipse, debemos asegurarnos de que se esté usando un JRE que soporte la depuración de aplicaciones.Para ello enWindow/Preferences/Java/Installed JREsnos aseguramos de que

1.5.5DEPURACIÓN DE APLICACIONESesté presente y activado el JRE de SUN. Si no está presente, lo añadimos indicandoel siguiente path:/usr/lib/jvm/java-6-sun-1.6.0.03/jre.A continuación vamos a poner dos breakpoints, uno en la línea 6 del cheroTeclado.javay otro en la línea 9. Para poner un breakpoint basta con hacer clickcon el derecho en el borde izquierdo de la línea y dar aToggle Breakpoint,o bienhacer doble click con el izquierdo en el borde de la línea. Lo mismo para quitar unbreakpoint puesto previamente.Una vez puestos los breakpoints, depuramos el programa sin más que ir al menúRuny dar a la opciónDebug As/Java Application.El programa se detendrácuando llegue a la línea 6. Si pulsamos la tecla F6, se ejecutará esa instrucción yse quedará detenido en la siguiente. Si a continuación pulsamos F8, el programa secontinua ejecutando hasta llegar al siguiente breakpoint.Repetir el procedimiento anterior pero pulsando F5 en lugar de F6 y comentarlas diferencias observadas.

6PRÁCTICA 1.FAMILIARIZACIÓN CON EL ENTORNO

Práctica 2Clases y ObjetosEn esta segunda práctica comenzaremos ya con el programa que iremosampliando a lo largo del resto de prácticas. El objetivo de esta prácticaes que el alumno practique y se familiarice con los conceptos de clase yobjeto.2.1.Clase JuegoImplementar una claseJuegocon las siguientes características:Atributos Tiene como atributo público un entero que indica el número de vidas quele quedan al jugador en la partida actual.Métodos Tiene como método el constructor que acepta un parámetro de tipo enteroque indica el número de vidas iniciales con las que parte el jugador. Tiene un métodoMuestraVidasRestantesque visualiza por pantalla elnúmero de vidas que le quedan al jugador en la partida actual. Además esta clase tiene también el métodomainque debe realizar losiguiente: Crea una instancia de la claseJuegoindicando que el número devidas es 5. Llama al métododel objeto creado.Resta una vida al valor del atributo con las vidas y vuelve a llamara MuestraVidasRestantesMuestraVidasRestantes.Crea otra instancia de la claseJuegoindicando que el número devidas es también de 5. Llama al métodoMuestraVidasRestantesluego al de la instancia anterior7de la nueva instancia y

8PRÁCTICA 2.2.2.CLASES Y OBJETOSOcultación de AtributosEn el ejercicio anterior no se ha prestado atención a la forma en que se permiteque alguien modi que el atributo con las vidas de la claseJuego.En este ejerciciose utilizará un acceso controlado a ese atributo. Para ello se realizarán los siguientescambios:Atributos Debe ocultarse a cualquier otra clase el atributo con las vidas. Para podermodi car este atributo, se crearán los dos nuevos métodos que se explicanmás adelante. Crear un nuevo atributo también privado que guarde el número de vidasque inicialmente se le pasaron al constructor del objeto. Este atributo seutilizará para poder reiniciar el juego. Crear otro atributo también privado y de tipo entero que guarde el récord.A diferencia de los anteriores (que son atributos de instancia) éste esun atributo de clase, por lo que será común a todos los juegos que seimplementen. Inicialmente este atributo tendrá el valor 0.Métodos QuitaVida que disminuya en 1 el número de vidasdel jugador y devuelva un boolean indicando si al jugador le quedan másAñadir un métodovidas o no. En caso de que al jugador no le queden más vidas, este métododebe mostrar un mensaje Añadir un métodoJuego TerminadoReiniciaPartidapor pantalla.que asigne al atributo vidas el nú-mero de vidas que se habían indicado al llamar al constructor del objeto.Para ello utilizará el nuevo atributo que se ha añadido. Añadir un métodoActualizaRecordque compare el valor actual de ré-cord con el número de vidas restantes. Si el número de vidas restantes es igual al récord, mostrará un mensaje indicando que se ha alcanzado el récord. Si el número de vidas restante es mayor que el récord, actualizará elrécord y mostrará un mensaje diciendo que éste se ha batido y cuáles su nuevo valor. Si el número de vidas es menor, no hará nada.main se va a poner ahora en una clase aparteAplicacion.java dentro del mismo directorio:Para probar la ocultación, la funciónllamadaAplicacionen un cheroAntes de modi car esta función, comprobar que ahora el compilador nos muestra un mensaje de error al intentar modi car directamente el atributo con lasvidas. A continuación proceder con las modi caciones que siguen.

2.2.9OCULTACIÓN DE ATRIBUTOSLlamar al métodoQuitaVida de una de las instanciasMuestraVidasRestantes.de la claseJuegoacontinuación al métodoPosteriormente llamar al métodoMuestraVidasRestantes.Llamar al métodoReiniciaPartidaActualizaRecordy de nuevo al métodode la primera instancia deJuegoy acontinuación llamar a este mismo método pero en la segunda instancia. Explicalos mensajes mostrados.

10PRÁCTICA 2.CLASES Y OBJETOS

Práctica 3Herencia y Polimor smoEn esta práctica se introducen los conceptos de herencia y polimor smo.La herencia permite a nuevas clases aprovechar código ya implementadopor clases anteriores. El polimor smo permite llamar a un método condiferentes resultados según la clase en la que se esté. Además se irá dandoya un poco de forma a la aplicación nal.3.1.Ejercicio 1En este ejercicio se va a implementar un juego en el que el usuario1tenga queadivinar un número que conoce el programa. El código correspondiente a cada claseque se implemente deberá estar en un chero java separado y que tenga el mismonombre que la clase.Clase JuegoAñadirle un método abstractoJuega que no tome parámetros y que ten-drán que implementar las clases derivadas. La claseJuegoahora pasa a ser una clase abstracta por lo que ya no sepodrán crear instancias de la misma. La funciónClasemainya no estará dentro de esta clase.JuegoAdivinaNumeroJuego. Deriva de la clase Tiene un constructor que toma dos parámetros de tipo entero. El primeroes el número de vidas que, a su vez, se lo pasará al constructor de la clasebase. El segundo parámetro es un número a adivinar entre 0 y 10. 1 UsandotecladoImplementa el métodoJuegade la clase base:la clase de entrada por teclado copiada en el primera práctica, se leerá un entero del11

12PRÁCTICA 3. HERENCIA Y POLIMORFISMOReiniciaPartidaLlama al métodoque ha heredado.Muestra un mensaje al usuario pidiendo que adivine un número entreel 0 y el 10. Lee un entero del teclado y lo compara con el valor prede nido porel programador: Si es igual, muestra un mensajeActualizaRecord, Acertaste!!y, tras llamar asale del método.QuitaVida heredado.QuitaVida devuelve true, signi ca que aúnSi es diferente, llama al métodoSi el métodole que-dan más vidas al jugador por lo que se muestra un mensaje indicando si el número a adivinar es mayor o menor y se le pide quelo intente de nuevo. Si el métodoQuitaVidadevuelvefalsesigni ca que ya no lequedan más vidas al jugador, con lo que sale del métodoClase AplicacionContiene un método main que, tras crear una instancia de la nueva claseJuegoAdivinaNumero3.2.Juega.que se ha creado, llama al métodoJuega.Ejercicio 2A partir del juego anterior, se añadirán dos juegos más, uno de adivinación denúmeros pares y otro de adivinación de números impares.Clase JuegoAdivinaNumeroAñade un nuevo métodoValidaNumeroque toma como parámetro elnúmero introducido por el usuario y devuelve unbooleanque, en estetrue. En el método Juega pedirá un nuevo número por teclado si elValidaNumero devuelve false y, en este caso, no restará vida.caso, será rométodo ValidaNumero devolviendo true Deriva de la clase Rede ne elsi el número es par.Si el número es impar, muestra un mensaje de error por pantalla y merométodo ValidaNumero devolviendo true Deriva de la clase Rede ne elsi el número es im-par. Si el número es par, muestra un mensaje de error por pantalla ydevuelvefalse.

3.2.13EJERCICIO 2Clase AplicacionEl método main crea una instancia de cada uno de los tres juegos creados:JuegoAdivinaNumero, JuegoAdivinaParyJuegoAdivinaImpar.Comonúmero de vidas de cada juego se pondrá 3 y como número a adivinar unnúmero cualquiera, otro par y otro impar respectivamente, todos comprendidos entre el 0 y el 10. Llama al métodoJuegade cada una de las tres instancias.La jerarquía de clases resultante es la siguiente:

14PRÁCTICA 3.HERENCIA Y POLIMORFISMO

Práctica 4Interfaces y ArraysEn esta práctica se hará uso del concepto de interfaz y se creará unarray de interfaces que permita utilizar objetos de clases diferentes deuna forma homogénea (polimor smo).4.1.InterfacesEn este ejercicio se va a implementar una interfazJugableque implementaránlos juegos desarrollados hasta ahora y nuevos que se desarrollen. Esta interfaz nospermitirá especi car una serie de operaciones comunes que deben implementar todoslos juegos y que nos permitirán manejarlos de forma genérica posteriormente.Clase JuegoSe eliminará su método abstractoJuega,pero la clase se seguirá mante-niendo como abstracta ya que no interesa que se creen instancias de ellasdirectamente.Interfaz Jugableque se ha quitado a la Juega queclase Juego.Dispondrá de un métodoSe incorporará un métodocumplirá el mismo objetivo que elMuestraNombreque no tome ningún paráme-tro y que obligue a las clases que implementen la interfaz a mostrar unmensaje por pantalla con el nombre del juego. Se incorporará un métodoMuestraInfo que no tome ningún parámetro yque obligue a las clases que implementen la interfaz a mostrar un mensajepor pantalla con una descripción de cómo jugar al juego.Clase JuegoAdivinaNumeroDebe implementar la interfazJugable15

16PRÁCTICA 4. El método MuestraNombreAdivina un número El métodoINTERFACES Y ARRAYSvisualizará por pantalla el textoMuestraInfo visualizará por pantalla una descripción de cómose juega al juego, informando del número de intentos que se le dan aljugador.Clase JuegoAdivinaPartexto Rede ne el métodoClase MuestraInfoMuestraNombreAdivina un número imparRede ne el métodoRede ne el métodoClasepara que visualice por pantalla elJuegoAdivinaImpartexto MuestraNombreAdivina un número parRede ne el métodopara que visualice por pantalla elMuestraInfoAplicacionEn el métodomaincreará un objeto de cada uno de los juegos mencio-nados. A continuación llama los métodosMuestraNombre, MuestraInfo y Juegade cada uno de los tres objetos creados.4.2.ArraysPara comprender la utilidad de las interfaces, implementamos en este ejercicioun array de interfaces que permitirá invocar a cualquiera de los tres juegos de formagenérica.Clase AplicacionMétodo EligeJuegoMétodo público y estático que no toma parámetros y devuelve unobjeto del tipo Jugable.Crea un objeto de cada uno de los tres juegos implementados.Crea un array de tres elementos de tipo interfazJugable.Rellena este array con los objetos creados para los distintos juegos.A partir de este momento, sólo se trabajará con este array de tipointerfaz Jugablepara referirse a cualquiera de los juegos.Muestra un menú por pantalla con el nombre de los tres juegos ypide al usuario que elija un juego introduciendo un número entre 0 y2. Si el número introducido no es válido, seguirá pidiendo al usuarioun número válido.

4.2.17ARRAYS Devuelve el elemento del array correspondiente al número introducidopor el usuario. Método mainLlama al métodointerfaz JugableEligeJuegopara obtener una referencia de tipoal juego seleccionado por el usuario.MuestraNombre de este juego.A continuación llama al método MuestraInfo del juego.Llama al método Juega del mismo para comenzar una nueva partida.Llama al métodoFinalmente, tras concluir la partida, pregunta al usuario si desea jugar de nuevo y en caso a rmativo vuelve a repetir los pasos anteriores.

18PRÁCTICA 4.INTERFACES Y ARRAYS

Práctica 5PaquetesEl número de clases y cheros usados en la práctica ya va creciendo, porlo que vamos a estructurarlos en directorios y paquetes.5.1.PaquetesSe trata de organizar en diferentes paquetes las clases empleadas hasta ahora yde utilizarlos desde los diferentes cheros de código.Paquetejuegos,Juego Clase Paquete Paquete interfacesContiene la interfazPaquete a su vez formado por:JugablenumerosJuegoAdivinaNumero, JuegoAdivinaParJuegoAdivinaImparContiene las clasesyprofesorContiene la claseTecladoTener en cuenta que al estructurar el código en paquetes diferentes, el modi cadorpor defectofriendlyva a impedir que un paquete use código de otro salvo queéste lo ofrezca como público. Por lo tanto se deberán actualizar los modi cadoresde acceso de clases, métodos y atributos que se consideren necesarios. De la mismaforma, al estar el código ahora en paquetes diferentes, será necesario hacer losimportcorrespondientes.Para crear un nuevo paquete desde Eclipse, basta con hacer click con el botónderecho sobre el proyecto y dar aNew/Package.19A continuación pedirá el nombre

20PRÁCTICA 5.PAQUETESdel paquete y, tras introducirlo, creará un directorio con el nombre del paquete quenos aparecerá en el árbol del proyecto. Ahora ya podemos hacer click con el derechosobre este paquete e ir añadiendo clases. Eclipse se encarga de poner por nosotroslas directivaspackagenecesarias en los cheros fuente de las clases que vayamosañadiendo a ese paquete.5.2.Classpath5.2.1.Desde la ConsolaMover todos los cheros salvoworkspace: Aplicacion.java a un directorio libs en vuestromkdir -p /home/alumno/tu nombre/libscd /home/alumno/tu nombre/Practica5mv * /home/alumno/tu nombre/libsmv /home/alumno/tu nombre/libs/Ap* .Si a continuación se ejecuta el programa, dará un error indicando que no encuen-tra clases. Solucionarlo añadiendo al classpath este directorio. java Aplicacion java -cp .:/home/alumno/tu nombre/libs AplicacionFinalmente volver a poner los cheros en su ubicación original. mv /home/alumno/tu nombre/libs/* . rm -rf /home/alumno/tu nombre/libs5.2.2.Desde EclipseJAR con el paquete profesor. El chero*.class comprimidos.En primer lugar vamos a crear un cheroJARno es más que un conjunto de cheros1. Hacemos click con el derecho sobre el paquete y damos a2. SeleccionamosJava/JAR fileExport.y damos a siguiente.3. A continuación seleccionamos los cheros java que nos interese meter en elpaquete, en nuestro caso sóloTeclado.java.4. En esta misma pantalla indicamos que el nombre del chero que queremosgenerar esprofesor.jary damos a terminar.

5.2.21CLASSPATHSi abrimos el explorador de cheros, veremos que se nos ha generado un nuevocheroprofesor.jaren el directorio de nuestroworkspace.profesor de nuestro árbol de proyecto haciendoclick con el derecho sobre él y dando a Delete. Al borrarlo se puede ver que EclipseAhora borramos el paquetemuestra varios errores en el resto de nuestro código, esto es debido a que no encuentrael paqueteprofesor.Para solucionarlo vamos a incluir en nuestroclasspathel cheroJARque aca-bamos de generar:1. Hacemos click con el derecho sobre el proyecto y damos aBuild Path/Add External Archives.2. Seleccionamos el cheroprofesor.jary damos a aceptar.Ahora comprobamos cómo desaparecen los errores de Eclipse y que podemosvolver a ejecutar la aplicación sin problema. Esto es debido a que con el nuevoclasspathya se pueden encontrar todos los paquetes necesarios.

22PRÁCTICA 5.PAQUETES

Práctica 6El APIEn esta práctica se trata de que el alumno sea capaz de leer documentación referente a un paquete externo y de utilizarlo. Para ello se utilizaránlas clases6.1.Random, StringyVector1del API de java .Clase RandomConsultando la documentación del API de java, usar la clasejava.utilRandom del paquetepara que el número que hay que adivinar en los juegos de números seaun número aleatorio en lugar de un número prede nido por el programador. Paraello:Clase JuegoAdivinaNumeroAhora el constructor ya no necesitará como parámetro el número a adivinar. Añade como dato miembro un objeto de tipoRandomque se usará paragenerar números aleatorios. A la hora de construir este objeto, es conveniente pasarle una semilla que evita que se genere siempre la mismasecuencia de números pseudoaleatorios. Para ello puede usarse la claseDate de paquetejava.util.ReiniciaPartida para que, además de ejecutar el código de nido en la clase Juego, asigne un valor aleatorio al dato miembroRede ne el métodoque contiene el número a adivinar.Clase AdivinaNumeroParReiniciaPartida para que ejecute el código de nidoen la clase JuegoAdivinaNumero y además transforme el número aleatorioRede ne el métodogenerado por ésta en un número par entre 0 y 10.1 http://java.sun.com/javase/reference/api.jsp23

24PRÁCTICA 6.Clase EL APIAdivinaNumeroImparReiniciaPartida para que ejecute el código de nidoen la clase JuegoAdivinaNumero y además transforme el número aleatorioRede ne el métodogenerado por ésta en un número impar entre 0 y 10.6.2.Clase StringHaciendo uso de la claseJuegoAhorcadoClaseStringse va a implementar un nuevo juegoesta vez no basado en números.JuegoAhorcadojuegos.letras. Estará en el paquete Derivará de la clase Tomará comoprimer parámetro del constructor el número de vidas y comoJuego.segundo parámetro la cadena a adivinar.Jugable. Implementará la interfaz Para implementar el métodoJuegase recomienda seguir los siguientespasos: Llamar al métodoReiniciaPartidade la clase base.Crear una cadena del mismo tamaño que la cadena a adivinar peroen la que todos sus caracteres sean un '-'. Mostrar al usuario la cadena con los '-'.Pedir al usuario que introduzca un carácter y comprobar si está enla cadena a adivinar. Si está en la cadena, reemplazar los '-' por el carácter en las posicionesque corresponda. Comparar esta cadena con la cadena a adivinar y,si son iguales, indicárselo al usuario y terminar la partida. Si no está en la cadena, llamar al métodoQuitaVidacomprobandosi 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.AplicacionAñadir al métodoEligeJuegoel nuevo juego que se acaba de crear.Clase VectorPara practicar con la clasearray de interfaces de la claseVector del paquete java.util, vamos a substituir elAplicacion por un vector.

6.3.25CLASE VECTORClase AplicacionAñadir un métodoInfoVectorque tome como parámetro un vector eindique por pantalla la capacidad y tamaño del mismo. En el métodoEligeJuegocrear un vector de capacidad 3 y con un in-cremento en saltos de 2 elementos. Llamar al método InfoVector.Añadir los tres juegos de números a este vector y volver a llamar al métodoInfoVector. A continuación añadir al vector el objeto correspondiente al juego delahorcado y volver a llamar al método InfoVector.Modi car el resto de la función para que trabaje con el vector en lugarde con el array de interfaces.

26PRÁCTICA 6.EL API

Práctica 7ExcepcionesEn esta última práctica se incluirá el manejo de excepciones para validarlos datos introducidos por el usuario.7.1.Ejercicio 1El métodoLeeEnterode la claseTecladodevuelve un 0 en caso de que el datoque se introduzca no sea un número. Modi car este método para que si se recibeuna excepción del tipoNumberFormatException,se le indique al usuario que debeintroducir un número válido y se vuelva a leer la entrada. En caso de recibir cualquierotra excepción, sigue devolviendo un 0.7.2.Ejercicio 2El constructor de las clases no puede devolver ningún código de retorno paraindicar si ha funcionado bien o no. Una opción es que genere una excepción en casode fallo.ClaseJuegoExceptionjuegos.excepciones. Estará en el paquete Extiende la clase Su constructor toma como parámetro una cadena de caracteres con laException.descripción del motivo de la excepción.Constructor de la clase JuegoAhorcadoDebe comprobar que ninguno de los caracteres de la palabra a adivinar seaun número, para ello puede valerse de los métodos de la claseSi hay un número, lanzará una excepción27Character.JuegoException noti cándolo.

28PRÁCTICA 7.ClaseEXCEPCIONESAplicacion El métodoEligeJuego El métodomain debe capturar cualquier excepción e informar de la causano captura la excepción y la pasa hacia arriba.de fallo antes de terminar. Tanto en caso de que ocurra una excepción 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 aadivinar una con número y otra sin ningún número.

a una memoria USB a modo de backup, ya que los ordenadores del centro de cálculo 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 1 escribir el siguiente programa de ejemplo: public class HolaJava {public static void main( String args[] )