3URJUDPDFLyQ -DYD

Anuncio
3UiFWLFD
3URJUDPDFLyQ-DYD
,QIRUPiWLFD3UiFWLFDQž&XUVR3iJLQD
Ë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.
(VFXHOD6XSHULRUGH,QJHQLHURVGH6DQ6HEDVWLiQ8QLYHUVLGDGGH1DYDUUD
3DXO%XVWDPDQWH
,QIRUPiWLFD3UiFWLFDQž&XUVR3iJLQD
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).
2. El método 6WULQJ TXH,QVWUXPHQWR(UHV, declarado por la interface ,GHQWLILFDEOH.
3. El método YRLG DILQDU, cuyo significado se ha explicado anteriormente en la clase
,QVWUXPHQWR, en la que ha sido declarado como DEVWUDFW.
&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.
2. El método 6WULQJ TXH,QVWUXPHQWR(UHV, declarado por la interface ,GHQWLILFDEOH.
(VFXHOD6XSHULRUGH,QJHQLHURVGH6DQ6HEDVWLiQ8QLYHUVLGDGGH1DYDUUD
3DXO%XVWDPDQWH
,QIRUPiWLFD3UiFWLFDQž&XUVR3iJLQD
3. El método YRLG DILQDU, cuyo significado se ha explicado anteriormente en la clase
,QVWUXPHQWR, en la que ha sido declarado como DEVWUDFW.
&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.
2. El método 6WULQJ TXH,QVWUXPHQWR(UHV, declarado por la interface ,GHQWLILFDEOH.
3. El método YRLG DILQDU, cuyo significado se ha explicado anteriormente en la clase
,QVWUXPHQWR, en la que ha sido declarado como DEVWUDFW.
&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
}
}
(VFXHOD6XSHULRUGH,QJHQLHURVGH6DQ6HEDVWLiQ8QLYHUVLGDGGH1DYDUUD
3DXO%XVWDPDQWH
,QIRUPiWLFD3UiFWLFDQž&XUVR3iJLQD
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
1 instrumentos
2 instrumentos
2 instrumentos
:
de
de
de
de
viento (metal)
viento (madera)
percusión
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?´´.
(VFXHOD6XSHULRUGH,QJHQLHURVGH6DQ6HEDVWLiQ8QLYHUVLGDGGH1DYDUUD
3DXO%XVWDPDQWH
Descargar