3UiFWLFD 3URJUDPDFLyQ-DYD
Ë1',&( PRACTICA N 7...2 1. EJERCICIO 1: DESARROLLAR UN PROGRAMA JAVA PARA UNA PEQUEÑA ORQUESTA...2 CLASE INSTRUMENTO...2 INTERFACE IDENTIFICABLE...3 CLASE VIENTO...3 CLASE PERCUSIÓN...3 CLASE CUERDA...4 CLASE MUSICA (PROGRAMA PRINCIPAL)...4 2. EJERCICIO 2: CAMBIAR EL PROGRAMA PRINCIPAL...5 35$&7,&$1 El guión de esta práctica recoge GRVHMHUFLFLRV: el primero de ellos es el más importante, mientras que el segundo es solamente una ampliación. No deberás pasar a este segundo ejercicio más que en el caso de que hayas concluido satisfactoriamente el primero. (-(5&,&,2'(6$552//$581352*5$0$-$9$3$5$81$3(48(f$2548(67$ abstract class Instrumento String sonido, String nombre, double precio static numeroinstrumentos abstract void afinar() interface Identificable String queinstrumentoeres() class Viento boolean esdemetal Static numinstrvientometal Static numinstrvientomadera class Percusion static numinstrpercusion class Cuerda static numinstrcuerda Se desea crear una SHTXHxD RUTXHVWD GH FiPDUD que pueda ofrecer información de sí misma, incluso sin disponer de tarjeta de sonido (en futuras versiones se desea que pueda ser audible). La figura anterior muestra la jerarquía de clases. En la misma figura se incluyen las variables miembro y métodos que es necesario considerar. &ODVH,QVWUXPHQWR La clase,qvwuxphqwres una clase DEVWUDFWD, esto es, una clase de la que no se pueden crear objetos y sirve como marco o modelo para las otras clases que deriven de ella. Se declara como: SXEOLFFODVVDEVWUDFW,QVWUXPHQWR^«` Las YDULDEOHVPLHPEUR de la clase son las siguientes: 1. Variable VRQLGR: un 6WULQJ que trata de reproducir el sonido del correspondiente instrumento.
2. Variable QRPEUH: un 6WULQJ con el nombre o tipo del instrumento concreto de que se trate: piano, timbal, violín, flauta, etc. 3. Variable SUHFLR: un GRXEOH con el precio aproximado del instrumento en euros ( 4. Variable QXPHUR,QVWUXPHQWRV: una variable VWDWLF LQW con el número total de instrumentos que componen la orquesta. Los PpWRGRV públicos de,qvwuxphqwr son los siguientes: 1. Un FRQVWUXFWRU (no mostrado en la figura) con el KHDGHU siguiente, public Instrumento(String name, String sound, double price) {... 2. Método YRLG DILQDU. Se trata de un método para afinar los instrumentos de la orquesta. Básicamente emite de alguna manera el sonido propio del instrumento. A la espera de una futura versión audible, en la presente versión imprime por consola con un método SULQWOQ el sonido típico del instrumento, representado por la variable VRQLGR. Como es natural, en esta clase este método es DEVWUDFW.,QWHUIDFH,GHQWLILFDEOH La interface,ghqwlilfdeoh declara un único método 6WULQJ TXH,QVWUXPHQWR(UHV. En cada clase que implemente esta interface, este método describe con detalle el tipo de instrumento de que se trata, incluyendo el nombre, el sonido, el precio y en el caso de que sea un instrumento de vientosi es de PHWDO o no. Ver la salida por consola mostrada más adelante para cada clase Esta interface es implementada por todas las clases que descienden de,qvwuxphqwr. &ODVH9LHQWR La clase 9LHQWR desciende de,qvwuxphqwr e implementa la interface,ghqwlilfdeoh. Define una nueva variable miembro de tipo ERROHDQ llamada HV'H0HWDO. Como su mismo nombre sugiere, esta variable indica si el instrumento de viento correspondiente es de metal, como por ejemplo la trompeta y el trombón, o de madera como la flauta y el oboe. La clase 9LHQWR define además dos variables miembro VWDWLF de tipo LQW, llamadas QXP,QVWU9LHQWR0HWDO y QXP,QVWU9LHQWR0DGHUD, que llevan cuenta del número de instrumentos de viento de metal y madera, respectivamente, de que dispone la orquesta. La clase 9LHQWR debe definir los métodos siguientes: 1. Un FRQVWUXFWRU que reciba valores para las cuatro variables miembro (las tres heredadas de la clase,qvwuxphqwr y HV'H0HWDO). &ODVH3HUFXVLyQ La clase 3HUFXVLRQ desciende de,qvwuxphqwr e implementa la interface,ghqwlilfdeoh. Define una nueva variable miembro VWDWLF de tipo LQW llamada QXP,QVWU3HUFXVLRQ. La clase 3HUFXVLRQ define los métodos siguientes: 1. Un FRQVWUXFWRU que reciba valores para las tres variables miembro heredadas de,qvwuxphqwr.
&ODVH&XHUGD La clase &XHUGD desciende de,qvwuxphqwr e implementa la interface,ghqwlilfdeoh. Define una nueva variable miembro VWDWLF de tipo LQW llamada QXP,QVWU&XHUGD. La clase &XHUGD define los métodos siguientes: 1. Un FRQVWUXFWRU que reciba valores para las tres variables miembro heredadas de,qvwuxphqwr. &ODVH0XVLFDSURJUDPDSULQFLSDO Esta clase contiene el SURJUDPDSULQFLSDO, que realiza las siguientes funciones: 1. Crea un DUUD\ de 6 referencias de la clase,qvwuxphqwr. 2. Crea seis objetos, dos de cada clase. 3. Imprime una serie de datos sobre la orquesta. El HVTXHOHWR del programa principal, contenido en el fichero 0XVLFDMDYD, será como sigue. Este programa está completo en lo que se refiere a la definición de los objetos del array de instrumentos, pero hay que definir los métodos VWDWLF YRLG LPSULPLU'DWRV,QVWUXPHQWR>@ RU y VWDWLF YRLG DILQDU7RGRV,QVWUXPHQWR>@RU. ILFKHUR0XVLFDMDYD LPSRUWMDYDXWLO SXEOLFFODVV0XVLFD^ PpWRGRVVWDWLF SXEOLFVWDWLFYRLGPDLQ6WULQJ>@DUJV^ Instrumento[] orquesta = new Instrumento[6]; int i = 0; FUHDFLyQGHREMHWRV orquesta[i++] = new Cuerda("violín", "nii-ñiiiiii-ñeee", 2000); orquesta[i++] = new Percusion("tambor", "porrom-pom-pom", 800); orquesta[i++] = new Cuerda("guitarra", "glin-glan-glin-glin", 500); orquesta[i++] = new Viento("trompeta", "ta-ra-riiiii", 1000, true); orquesta[i++] = new Viento("flauta", "tua-tua-tu-tuuuu", 1200, false); orquesta[i++] = new Percusion("platillos", "chin-chun-chin", 200); LPSULPLUGDWRVGHODRUTXHVWD LPSULPLU'DWRVRUTXHVWD DILQDU7RGRVRUTXHVWD VWDWLFYRLGLPSULPLU'DWRV,QVWUXPHQWR>@RUTXHVWD^ System.out.println("\nLa orquesta tiene :" +...); &203/(7$5(67(0e72'2 System.out.println("\nPasando revisión a la orquesta:"); for (int i=0; i<orquesta.length; i++) {... &203/(7$5(/&Ï',*2'((67(%8&/()25
VWDWLFYRLGDILQDU7RGRV,QVWUXPHQWR>@H^ for(int i = 0; i < e.length; i++) {... &203/(7$5(/&Ï',*2'((67(%8&/()25 ILQFODVH0XVLFD Como ayuda adicional se incluye a continuación el UHVXOWDGRTXHGHEHDSDUHFHUSRUFRQVROD: La orquesta tiene : 1 instrumentos de viento (metal) 1 instrumentos de viento (madera) 2 instrumentos de percusión 2 instrumentos de cuerda Pasando revisión a la orquesta: Soy un instrumento de cuerda, del tipo violín. Mi sonido es: "niiñiiiiii-ñeee" 1 y valgo 2000.0 Soy un instrumento de percusión, del tipo tambor. Mi sonido es: "porrompom-pom" y valgo 800.0 Soy un instrumento de cuerda, del tipo guitarra. Mi sonido es: "glinglan-glin-glin" y valgo 500.0 Soy un instrumento de Viento, de metal. Soy del tipo trompeta. Mi sonido es: "ta-ra-riiiii" y valgo 1000.0 Soy un instrumento de Viento, pero no soy de metal. Soy del tipo flauta. Mi sonido es: "tua-tua-tu-tuuuu" y valgo 1200.0 Soy un instrumento de percusión, del tipo platillos. Mi sonido es: "chin-chun-chin" y valgo 200.0 Afinando todos los instrumentos: Afinando violín: nii-ñiiiiii-ñeee Afinando tambor: porrom-pom-pom Afinando guitarra: glin-glan-glin-glin Afinando trompeta: ta-ra-riiiii Afinando flauta: tua-tua-tu-tuuuu Afinando platillos: chin-chun-chin (-(5&,&,2&$0%,$5(/352*5$0$35,1&,3$/ Crea un nuevo programa principal similar al de la clase 0XVLFD, llamado 0XVLFD, que utilice la clase $UUD\/LVW en vez de un DUUD\ para almacenar los distintos instrumentos musicales. El método PDLQ deberá ser similar al anterior. Haz este ejercicio en un directorio llamado (MHU. Las clases 9LHQWR, 3HUFXVLyQ y &XHUGD pueden ser idénticas a las del ejercicio anterior. 1 Para incluir el carácter dobles comillas ( ) en una cadena de caracteres se debe incluir la secuencia?. Por ejemplo, para imprimir +ROD³-DYD, habrá que utilizar la sentencia 6\VWHPRXWSULQWOQ³+ROD? -DYD?.