Este documento presenta 14 ejercicios sobre herencia y polimorfismo en Java. Los ejercicios cubren temas como las relaciones entre clases, el uso de modificadores de visibilidad, métodos abstractos e interfaces. Se pide al lector que determine resultados de código, complete diagramas de clases UML y desarrolle código Java para ilustrar diferentes conceptos de POO relacionados con la herencia.
0 calificaciones0% encontró este documento útil (0 votos)
162 vistas15 páginas
Este documento presenta 14 ejercicios sobre herencia y polimorfismo en Java. Los ejercicios cubren temas como las relaciones entre clases, el uso de modificadores de visibilidad, métodos abstractos e interfaces. Se pide al lector que determine resultados de código, complete diagramas de clases UML y desarrolle código Java para ilustrar diferentes conceptos de POO relacionados con la herencia.
Este documento presenta 14 ejercicios sobre herencia y polimorfismo en Java. Los ejercicios cubren temas como las relaciones entre clases, el uso de modificadores de visibilidad, métodos abstractos e interfaces. Se pide al lector que determine resultados de código, complete diagramas de clases UML y desarrolle código Java para ilustrar diferentes conceptos de POO relacionados con la herencia.
Este documento presenta 14 ejercicios sobre herencia y polimorfismo en Java. Los ejercicios cubren temas como las relaciones entre clases, el uso de modificadores de visibilidad, métodos abstractos e interfaces. Se pide al lector que determine resultados de código, complete diagramas de clases UML y desarrolle código Java para ilustrar diferentes conceptos de POO relacionados con la herencia.
Descargue como PDF, TXT o lea en línea desde Scribd
Descargar como pdf o txt
Está en la página 1de 15
Fundamentos de Programacin II
Ejercicios Tema 2 Pgina 1
Tema 2. Herencia y Polimorfismo
1. Qu tipos de relacin hay entre las siguientes clases?
Personal de la Universidad Profesor Estudiante 1 n PAS
a) herencia y asociacin b) herencia y dependencia c) dependencia y asociacin d) transposicin y bifuncionalismo
2. Cul es el resultado del siguiente programa?
cl ass Pr ogr ama { publ i c st at i c voi d mai n( St r i ng [ ] ar gs) { Cl ase1 obj 1=new Cl ase1( ) ; obj 1. i mpr i mi r ( 4) ; Cl ase2 obj 2=new Cl ase2( ) ; obj 2. i mpr i mi r ( 3) ; } }
cl ass Cl ase1 { pr ot ect ed i nt pr op1=10, pr op2=4; publ i c voi d i mpr i mi r ( i nt i ) { pr op1=pr op1+i ; pr op2=pr op2+i ; Syst em. out . pr i nt ( pr op1+" " +pr op2+" " ) ; } }
cl ass Cl ase2 ext ends Cl ase1 { publ i c voi d i mpr i mi r ( i nt i ) { pr op1=pr op1- i ; pr op2=pr op2- i ; Syst em. out . pr i nt ( pr op1+" " +pr op2) ; } }
3. Qu modificador de visibilidad debo usar en los siguientes casos?
Para un atributo de una clase que va a tener hijas Para un mtodo de soporte Para un mtodo de servicio Para un atributo de una clase que no va a tener hijas
Fundamentos de Programacin II
Ejercicios Tema 2 Pgina 2
4. Cul es el resultado del siguiente programa?
abst r act cl ass Uno { pr ot ect ed i nt i =2; abst r act publ i c voi d f r ase( ) ;
}
cl ass Dos ext ends Uno { publ i c voi d f r ase( ) { i nt i =3; Syst em. out . pr i nt l n( " Est oy en un obj et o de cl ase Dos con i : " +i ) ; } }
cl ass Tr es ext ends Dos { publ i c voi d f r ase( ) { Syst em. out . pr i nt l n( " Est oy en un obj et o de cl ase Tr es con i : " +i ) ; } }
cl ass Dr i ver { publ i c st at i c voi d mai n( St r i ng[ ] ar gs) { Uno [ ] l i st a =new Uno [ 2] ; l i st a [ 0] = new Dos( ) ; l i st a [ 1] = new Tr es( ) ; f or ( i nt i =0; i <2; i ++) { l i st a[ i ] . f r ase( ) ; } } }
5. En una tienda se venden 2 tipos de ordenadores: porttiles y de sobremesa. Ambos tipos de ordenadores se caracterizan por su cdigo y por su precio. Adems cada uno tiene un eslogan que es: " Ideal para sus viajes" en el caso de los porttiles y " Es el que ms pesa, pero el que menos cuesta" para el caso de los ordenadores de sobremesa. Adems los ordenadores porttiles tienen un atributo peso, y los de sobremesa la descripcin del tipo de torre. Realice un diseo indicando las clases que hay que tener en cuenta (incluyendo atributos y mtodos) y su relacin. Implemente en Java dichas clases.
6. En un banco tenemos varios tipos de cuentas bancarias en todas las cuales es posible retirar fondos y hacer depsitos. Consideremos tres tipos de cuentas: cuenta corriente, libreta de ahorro y libreta 2000. Las cuentas corrientes se usan para realizar pagos y no proporcionan ningn inters. La cuenta corriente puede tener asociada una libreta de ahorro para cubrir descubiertos de la cuenta corriente. Por otro lado, las libretas de ahorro proporcionan un inters del 4%. La libreta 2000 es un tipo de libreta de ahorro que rinde un mayor inters (del 8%) pero la retirada de fondos est penalizada con un 2% de la cantidad retirada. En estas condiciones: a) Construir un diagrama de clases usando UML, incluyendo los atributos y mtodos en cada clase. Incluya tambin las relaciones entre las distintas clases b) Programar las clases resultantes c) Construir un programa ejemplo que use las clases del apartado a). En el programa deben crearse objetos de cada una de las clases, inicializando las cuentas con unos valores iniciales. Adems se retiraran fondos de cada uno de los tipos de cuenta, se actualizarn los intereses de la libreta 2000 y se depositar una determinada cantidad en la libreta 2000.
Fundamentos de Programacin II
Ejercicios Tema 2 Pgina 3
7. Cul es el resultado del siguiente programa?
cl ass Padr e { pr ot ect ed i nt aa=0; publ i c i nt aa( ) { r et ur n aa; } } cl ass Hi j a ext ends Padr e { publ i c Hi j a ( i nt bb) { t hi s. aa=bb+1; } } cl ass Ni et a ext ends Hi j a { publ i c Ni et a ( i nt cc) { super ( cc+2) ; } } cl ass Fami l i a { publ i c st at i c voi d mai n( St r i ng [ ] ar gs) { Hi j a h= new Hi j a( 4) ; h=f ( h) ; Syst em. out . pr i nt l n ( h. aa( ) ) ; } pr i vat e st at i c Ni et a f ( Padr e h) { Ni et a n=new Ni et a ( h. aa( ) ) ; r et ur n n; } }
8. Dada la siguiente relacin entre clases:
Publicacin Tesis Revista
donde la clase publicacin tiene los mtodos: devuelve_autor y devuelve_editorial. La clase tesis tiene adems el mtodo devuelve_departamento y la clase revista devuelve_nmero_de_revista. Qu mtodos podran ser invocados usando una variable polimrfica de tipo publicacin?
a)devuelve_autor, devuelve_editorial y devuelve_nmero_de revista b)devuelve_numero_de_revista y devuelve_departamento c)devuelve_autor, devuelve_editorial, devuelve_departamento y devuelve_nmero_de_revista d)devuelve_autor, devuelve_editorial
9. Cul de las siguientes afirmaciones es la nica correcta?
a) Para que una clase sea abstract debe tener al menos un mtodo abstract b) Se pueden crear objetos de una clase abstract c) Se pueden crear referencias de una clase abstract d) Un atributo private en una clase abstract puede ser heredado por una subclase y modificado en esa subclase Fundamentos de Programacin II
Ejercicios Tema 2 Pgina 4
10. Dada la siguiente jerarqua de clases:
Naturaleza Animal Hervboro Elefante Rinoceronte
Con las siguientes declaraciones: Naturaleza n; Animal a; Herbvoro h; Elefante e; Rinoceronte r; Cul de las siguientes sentencias son incorrectas y por qu? a) a=n b) e=r c) h=e d) a=h
11. Dada la siguiente jerarqua de clases:
Instrumento {abstracta} Cuerda Viento Arpa
Con las siguientes declaraciones: Cuerda c; Viento v; Arpa a; Instrumento i; Cul de las siguientes asignaciones es la nica correcta?
a) a=v; b) v=c; c) c=i; d) i=a;
12. Implemente el cdigo de una interfaz llamada Primera que contenga dos mtodos A y B. Defina otra interfaz llamada Segunda que herede de la anterior y adems contenga un mtodo llamado C. Escriba el cdigo de otra clase llamada Objetos que use la segunda interfaz. Cuntos mtodos debe implementar esta clase? Implemente dichos mtodos de forma que cada mtodo imprima una lnea indicando el nombre del mtodo. Cree un programa que utilice los mtodos definidos.
Fundamentos de Programacin II
Ejercicios Tema 2 Pgina 5
13. Construya un programa que calcule el volumen molar de una sustancia a una presin y temperatura dadas usando la ecuacin de estado de un gas ideal: PV=nN a kT donde p es la presin, V el volumen, n el nmero de moles, N a la constante de Avogadro, k la constante de Boltzmann y T la temperatura. Sabiendo que la contante de Avogadro vale 6.023 10 23 partculas/mol y la constante de Boltzmann 1.38066 10 -23 J/K, el programa debe hacer uso de dichas constantes definindolas a travs de una interfaz.
14. Cul es el resultado del siguiente programa?
cl ass Ej er ci ci o { publ i c st at i c voi d mai n ( St r i ng [ ] ar gs) { Vehi cul o v= new Vehi cul o( " AAA" , 1000) ; Coche c = new Coche( " BBB" , 1000) ; v. i ncr ement ar _pr eci o( 100) ; Syst em. out . pr i nt ( v. devol ver _mar ca( ) + ) ; Syst em. out . pr i nt l n( v. devol ver _pr eci o( ) ) ; c. i ncr ement ar _pr eci o( 100) ; Syst em. out . pr i nt ( c. devol ver _mar ca( ) + ) ; Syst em. out . pr i nt l n( c. devol ver _pr eci o( ) ) ; v=c; v. i ncr ement ar _pr eci o( 100) ; Syst em. out . pr i nt ( v. devol ver _mar ca( ) + ) ; Syst em. out . pr i nt l n( v. devol ver _pr eci o( ) ) ;
} } cl ass Vehi cul o { pr ot ect ed St r i ng mar ca; pr ot ect ed doubl e pr eci o; publ i c Vehi cul o ( St r i ng mar ca, doubl e pr eci o) { t hi s. mar ca=mar ca; t hi s. pr eci o=pr eci o; } publ i c voi d i ncr ement ar _pr eci o( doubl e p) { pr eci o=pr eci o+p; } publ i c doubl e devol ver _pr eci o( ) { r et ur n pr eci o; } publ i c St r i ng devol ver _mar ca( ) { r et ur n mar ca; } } cl ass Coche ext ends Vehi cul o { publ i c Coche ( St r i ng mar ca, doubl e pr eci o) { super ( mar ca, pr eci o) ; } publ i c voi d i ncr ement ar _pr eci o( doubl e p) { pr eci o=pr eci o+2*p; } }
Fundamentos de Programacin II
Ejercicios Tema 2 Pgina 6
15. Cul es el resultado del siguiente programa?
abst r act cl ass Al umno { pr ot ect ed St r i ng nombr e; pr ot ect ed doubl e not a; publ i c Al umno ( St r i ng nombr e, doubl e not a) { t hi s. nombr e=nombr e; t hi s. not a=not a; }/ / mt odo
abst r act publ i c doubl e cal cul ar not a ( ) ;
}/ / de cl ase Al umno
cl ass Al umno_Or di nar i o ext ends Al umno { pr i vat e char cur so; publ i c Al umno_Or di nar i o ( St r i ng nombr e, doubl e not a, char cur so) { super ( nombr e, not a) ; t hi s. cur so=cur so; }/ / f i n mt odo
publ i c doubl e cal cul ar not a ( ) { r et ur n not a; }/ / f i n mt odo
}/ / de cl ase Al umno_Or di nar i o
cl ass Ej er ci ci o { publ i c st at i c voi d mai n ( St r i ng [ ] ar gs) { Al umno al umno1; al umno1=new Al umno( " Fel i x" , 5. 0) ; Syst em. out . pr i nt l n ( al umno1. cal cul ar not a( ) ) ; al umno1=new Al umno_Or di nar i o ( Luci a, 7. 0, 1 ) ; Syst em. out . pr i nt l n ( al umno1. cal cul ar not a( ) ) ; }/ / f i n mt odo }/ / f i n cl ase Ej er ci ci o
a) Error: No se pueden crear objetos de una clase abstracta b) 5.0 c) Error: alumno1 no se puede referir a objetos de distintas clases d) 7.0
16. En un banco se tienen una serie de clientes caracterizados por su NIF, nmero de cuenta y saldo. Dentro de estos clientes existe un cliente especial llamado Preferente. Dicho cliente se caracteriza porque posee varios fondos de inversin. Cada fondo se caracteriza por su nmero y el saldo mensual. Se pide: a) Dibujar, usando UML, el diagrama de clases indicando qu clases hay y la relacin entre ellas. b) Implementar en Java todas las clases resultantes del diagrama. c) Escribir un programa principal en Java donde se creen un cliente y un cliente Preferente. Para cada uno de ellos se debe poder consultar todos los atributos que contiene. Adems, para el caso del cliente Preferente se debe poder consultar tambin los datos de cada uno de sus fondos (nmero y el saldo mensual). El nmero de fondos que posee el cliente Preferente y las caractersticas de cada fondo deben introducirse por teclado.
Fundamentos de Programacin II
Ejercicios Tema 2 Pgina 7
17. Cul es el error del siguiente programa?
i nt er f ace A { doubl e a=2. 3; voi d i mpr i mer esul t adoA ( ) { Syst em. out . pr i nt l n ( " val or de a" + a) ; } } i nt er f ace B { i nt b=435; voi d i mpr i mer esul t adoB ( ) ; } cl ass AA i mpl ement s A, B { doubl e aa=324. 32; publ i c voi d i mpr i mer esul t adoA ( ) { Syst em. out . pr i nt l n ( " val or de a" + a+ " val or de aa" + aa) ; } publ i c voi d i mpr i mer esul t adoB ( ) { Syst em. out . pr i nt l n ( " val or de b" + b+ " val or de aa" + aa) ; } } cl ass Pr i nci pal { publ i c st at i c voi d mai n ( St r i ng [ ] ar gs) { AA ob1=new AA( ) ; ob1. i mpr i mer esul t adoA( ) ; ob1. i mpr i mer esul t adoB( ) ; } }
18. Una tienda de informtica vende dos tipos de artculos (software y hardware) ambos caracterizados por su cdigo (de tipo char) y su descripcin. Adems, en los productos software hay que indicar el tipo de producto (con una cadena), y en los hardware se debe indicar si es un perifrico o no. Para saber el precio de un artculo utilice una interface que indique que para un artculo cuyo cdigo es A el precio es 100.0 euros, si el cdigo es B el precio es 50.3; para un artculo con cdigo C el precio es 150.50 euros. En el caso de ser un producto hardware, los artculos slo sern A B y si es un perifrico el precio se incrementar en un 10%. Los productos software sern exclusivamente B C incrementndose el precio del artculo en un 5% si el software es de tipo ProgramaJuegos. Nota: la interface debe tener un mtodo abstracto. a) Dibuje en UML los diagramas de las clases y las relaciones entre ellas. Para cada clase debe indicar los atributos y mtodos teniendo en cuenta que se puede consultar y modificar cada atributo. b) Implemente las clases y la interfaz. c) Realice un programa principal donde cree un objeto software y otro hardware y muestre el precio y dems caractersticas del objeto.
19. Se pretende automatizar el sistema de una empresa dedicada al alquiler de viviendas. Los tipos de viviendas que la empresa ofrece son pisos y chalets. De todas las viviendas se registra su identificador (un valor entero), metros cuadrados y precio mensual de alquiler. De los pisos se debe saber si estn amueblados y el ao de construccin. Por otra parte, de los chalets se debe saber si tienen piscina. Para cada tipo de vivienda tambin se desea conocer el nombre y DNI de los tres ltimos inquilinos. Se pide:
a) Dibujar el diagrama de clases indicando qu clases hay, la relacin entre ellas y los miembros (atributos y mtodos) de cada clase usando notacin UML. Considere Inquilino como una clase b) Implementar en Java todas las clases resultantes del diagrama. Todas las clases deben implementar mtodos de consulta para cada variable de ejemplar. c) Escribir un programa principal en Java donde en una nica matriz se guarde un objeto piso y uno chalet. Posteriormente, se debe consultar usando esa matriz el nombre y DNI de cada uno de los tres ltimos inquilinos que ha tenido esa vivienda.
Fundamentos de Programacin II
Ejercicios Tema 2 Pgina 8
20. Qu imprime el siguiente programa?
abst r act cl ass Uno { pr ot ect ed i nt d1, d2; abst r act publ i c i nt devol ver _suma ( i nt x, i nt y) ; } cl ass Dos ext ends Uno { publ i c i nt devol ver _suma( i nt x, i nt y) { d1=x+3; d2=y+3; r et ur n d1+d2; } } cl ass Tr es ext ends Dos { publ i c i nt devol ver _suma( i nt x, i nt y) { d1=x- 3; d2=y- 3; r et ur n d1+d2; } publ i c i nt devol ver _suma( i nt x, i nt y, i nt i , i nt j ) { d1=x- i ; d2=y- j ; r et ur n d1+d2; } } cl ass Pr i nci pal { publ i c st at i c voi d mai n( St r i ng [ ] ar gs) { i nt c=0, d=0; Uno [ ] l i st a=new Uno[ 2] ; l i st a [ 0] = new Dos( ) ; l i st a [ 1] = new Tr es( ) ; f or ( i nt i =0; i <2; i ++) { d=l i st a[ i ] . devol ver _suma( 10, 10) ; Syst em. out . pr i nt f ( " d=%d \ n" , d) ; c=l i st a[ i ] . devol ver _suma( 10, 10, 5, 5) ; Syst em. out . pr i nt f ( " c=%d \ n" , c) ; } } }
21. Por qu da error el siguiente programa? Cmo lo solucionara?
cl ass A { pr i vat e i nt l =2; publ i c i nt get _l ( ) { r et ur n l ; } } cl ass B ext ends A { publ i c i nt cal cul ar _m( i nt x) { i nt m=l +x; r et ur n m; } } cl ass Pr i nci pal { publ i c st at i c voi d mai n( St r i ng [ ] ar gs) { i nt l , m; B o1=new B( ) ; l =o1. get _l ( ) ; Syst em. out . pr i nt f ( " l =%d \ n" , l ) ; m=o1. cal cul ar _m( 2) ; Syst em. out . pr i nt f ( " m=%d \ n" , m) ; } } Fundamentos de Programacin II
Ejercicios Tema 2 Pgina 9
22. Qu imprime el siguiente programa?
cl ass Uno { pr ot ect ed i nt d1, d2; publ i c i nt get _suma( ) { r et ur n d1+d2; } } cl ass Dos ext ends Uno { publ i c voi d cambi ar _ds( i nt x, i nt y) { d1=x+3; d2=y+3; } } cl ass Tr es ext ends Dos { publ i c voi d cambi ar _ds( i nt x, i nt y, i nt i , i nt j ) { d1=d1+x- i ; d2=d2+y- j ; } } cl ass Pr i nci pal {
publ i c st at i c voi d mai n( St r i ng [ ] ar gs) { i nt c, d; Dos obj 2=new Dos( ) ; Tr es obj 3=new Tr es( ) ; obj 2. cambi ar _ds( 2, 2) ; obj 3. cambi ar _ds( 3, 3) ; obj 3. cambi ar _ds( 10, 9, 7, 8) ; d=obj 2. get _suma( ) ; c=obj 3. get _suma( ) ; Syst em. out . pr i nt f ( " d=%d \ nc=%d\ n" , d, c) ;
} }
23. Cul es el resultado del siguiente programa?
cl ass Pr i nci pal { publ i c st at i c voi d mai n( St r i ng [ ] ar gs) { doubl e cant i dad_i ni , cant i dad_i nc; Coche c1=new Coche( ) ; cant i dad_i ni =c1. devol ver _cant i dad( ) ; cant i dad_i nc=c1. cambi ar _cant i dad( 20. 17) ; Syst em. out . pr i nt f ( " %. 1f %. 1f " , cant i dad_i ni , cant i dad_i nc) ; } } cl ass Vehi cul o { pr i vat e doubl e c=10. 11; publ i c doubl e devol ver _cant i dad( ) { r et ur n c; } } cl ass Coche ext ends Vehi cul o { publ i c doubl e cambi ar _cant i dad( doubl e p) { r et ur n devol ver _cant i dad( ) +p; } } a) 10,1 30,3 b) 10,1 30,2 c) Error: No se puede usar el mtodo devolver_cantidad en la clase Coche porque la variable c es private d) Error: No se puede invocar directamente en el return de la clase Coche al mtodo devolver_cantidad Fundamentos de Programacin II
Ejercicios Tema 2 Pgina 10
24. Cul es el error del siguiente programa?
i nt er f ace Const ant es { doubl e PI =3. 141593; doubl e e=2. 718282; doubl e FI =1. 618034; } i nt er f ace Met odos { voi d met odoA ( ) ; doubl e met odoB ( ) ; } cl ass Cal cul os i mpl ement s Met odos, Const ant es { publ i c doubl e met odoB ( ) { r et ur n PI *e*FI ; } }
a) La clase Clculos no puede implementar ms de una interfaz b) Los mtodos de la interfaz Metodos deben ser pblicos c) La clase Calculos debe ser abstract d) No hay ningn error
25. Cul es el resultado del siguiente programa?
cl ass Ej er ci ci o { publ i c st at i c voi d mai n ( St r i ng [ ] ar gs) { A a1= new A( 7) ; A a2= new B( 9) ; B b1= new B( 10) ; Syst em. out . pr i nt ( a1. get _p1( ) +" " ) ; Syst em. out . pr i nt ( a2. get _p1( ) +" " ) ; Syst em. out . pr i nt ( b1. get _p1( ) +" " ) ; a1=b1; Syst em. out . pr i nt ( b1. get _p2( ) +" " ) ; }/ / f i n mai n } f i nal cl ass A{ st at i c i nt p1=0; publ i c A ( i nt v) { p1=v; } publ i c i nt get _p1( ) { r et ur n p1; } } cl ass B ext ends A { i nt p2=0; publ i c B( i nt p) { super ( p) ; p2=p; }
publ i c i nt get _p2( ) { r et ur n p2+p1; } } a) 10 10 10 20 b) 7 9 10 20 c) Se produce un error porque las variables de las clases no tienen visibilidad declarada d) Se produce un error porque una clase declarada como final no se puede heredar
Fundamentos de Programacin II
Ejercicios Tema 2 Pgina 11
26. Qu imprime el siguiente programa?
cl ass Pr i nci pal { publ i c st at i c voi d mai n ( St r i ng [ ] ar gs) { Or denador or de=new Por t at i l ( 34, 870. 12, 2. 3) ; ; Syst em. out . pr i nt f ( " Codi go: %d \ nPr eci o_t ot al : %. 2f " , or de. devuel vecodi go( ) , or de. cal cul a_pr eci ot ot al ( 5) ) ; } }/ / f i n cl ase Pr i nci pal
cl ass Or denador { pr i vat e i nt codi go; pr i vat e doubl e pr eci o; publ i c Or denador ( i nt codi go, doubl e pr eci o) { t hi s. codi go=codi go; t hi s. pr eci o=pr eci o; } publ i c i nt devuel vecodi go( ) { r et ur n codi go; } publ i c doubl e devuel vepr eci o( ) { r et ur n pr eci o; } f i nal publ i c doubl e cal cul a_pr eci ot ot al ( i nt uni dades) { r et ur n pr eci o*uni dades; }
}/ / f i n cl ase Or denador
cl ass Por t at i l ext ends Or denador { pr i vat e doubl e peso; publ i c Por t at i l ( i nt codi go, doubl e pr eci o, doubl e peso) { super ( codi go, pr eci o) ; t hi s. peso=peso; } publ i c doubl e devuel vepeso( ) { r et ur n peso; } publ i c doubl e cal cul a_pr eci ot ot al ( i nt uni dades) { r et ur n devuel vepr eci o( ) *uni dades*. 90; } }/ / cl ase Por t at i l
27. Una empresa de envo de paquetes tiene varias sucursales en todo el pas. Cada sucursal est definida por su nmero de sucursal, direccin y ciudad. Adems, conviene distinguir si la sucursal es Principal o Secundaria. En caso de ser sucursal Principal se debe saber el nmero de sucursales secundarias que dependen de ella y en el caso de la Secundaria es necesario saber el nombre de la sucursal de la que depende. Para calcular el precio que cuesta enviar cada paquete, las sucursales tienen en cuenta el peso del paquete y la prioridad, sabiendo que se cobra 1 euro por kilo, 10 euros ms si la prioridad es alta y 20 si es Express. Cada paquete enviado tendr un nmero de referencia. Construya un diagrama UML que indique la relacin entre las clases. Cree un diagrama UML para cada clase que incluya todos sus miembros. Implemente las clases correspondientes aadiendo mtodos para consultar todos los atributos y para modificar el peso y la prioridad de los paquetes Por ltimo, construya un mtodo main donde se cree un objeto sucursal Secundaria mediante una referencia polimrfica. El programa deber imprimir el precio y el peso de los paquetes que se reciban en dicha sucursal. La informacin de los paquetes deber guardarse en una matriz. Deber controlarse que la prioridad del paquete sea 0, 1 2. Tanto los datos de la sucursal como los de los paquetes debern introducirse por teclado. Nota: No considere que paquete es un atributo de sucursal.
Fundamentos de Programacin II
Ejercicios Tema 2 Pgina 12
28. En una mediateca tenemos disponibles dos tipos diferentes de documentos: Libros y DVDs (video). Todos los documentos se caracterizan por una fecha de edicin, un ttulo, un valor nominal (en euros), y un atributo que indica si el documento est prestado o no. A su vez, los libros deben incluir el autor y los DVDs el director de la pelcula. Si una vez prestado un documento no se devuelve en la fecha debida existe una penalizacin en todos ellos. En los libros la penalizacin se obtiene como un 5% de su valor nominal. En los DVDs es un 6% del valor nominal ms un valor fijo de 2 euros. A su vez, los socios de la mediateca se caracterizan por su nombre y nmero de socio. Los socios de la mediateca pueden sacar en prstamo un mximo de n documentos. En caso de retraso en la devolucin de los documentos prestados se aplica al socio una penalizacin obtenida como la suma de las penalizaciones de cada documento prestado.
Se pide:
a) Dibujar el diagrama de clases indicando las relaciones entre las mismas. b) Dibujar para cada clase el diagrama UML indicando los miembros que hay en cada una. Debe incluir todos los mtodos que sean necesarios para la resolucin del ejercicio. c) Implementar en Java dichas clases. d) Implementar un programa principal que defina dos documentos de tipos distintos. Los documentos se inicializarn directamente en el programa principal. A continuacin cree un objeto de clase socio (inicializado tambin directamente en el main) que saque en prstamo los dos documentos anteriores. Finalmente, imprima los datos del socio as como la penalizacin correspondiente por un retraso en la devolucin de los dos documentos. Utilice una matriz para almacenar los objetos documento haciendo uso del polimorfismo.
29. Escriba un programa para una biblioteca que contiene libros y revistas. Ambas publicaciones tienen un cdigo, un ao de publicacin y un atributo prestado. Cuando se crea la publicacin, el atributo prestado est a falso porque la publicacin no est prestada. Las revistas tienen un nmero y los libros un nombre del autor. Ambos tipos de publicaciones deben tener mtodos de consulta de todos sus atributos. Para prevenir posibles cambios en el programa se tiene que implementar una interfaz que contenga los mtodos prestar(), devolver() y prestado(). La clase publicacin implementar dicha interfaz. El programa deber obtener el nmero de publicaciones prestadas Para ello la clase Principal contendr dos mtodos: a) un mtodo que cuente las publicaciones prestadas. Dicho mtodo recibir como parmetro una lista de las publicaciones existentes en la biblioteca y devolver cuntas hay prestadas. b) el mtodo main que crear una matriz de referencias polimrficas de tipo publicacin, invocar al mtodo con el que se obtiene el nmero de publicaciones prestadas e imprimir el nmero de publicaciones prestadas. Tambin se deber imprimir los datos de todas las publicaciones. Como ejemplo cree una matriz de 2 libros y 2 revistas y considere que se prestan un libro y una revista. Se debe:
a) Dibujar el diagrama de clases indicando qu clases hay, la relacin entre ellas y los miembros (atributos y mtodos) de cada clase usando notacin UML. b) Implementar en Java todas las clases e interfaces resultantes del diagrama. c) Escribir un programa principal en Java en el que se realicen las operaciones comentadas anteriormente (clculo de publicaciones prestadas usando un mtodo especfico para tal fin e impresin en el mtodo main del nmero de publicaciones prestadas).
Fundamentos de Programacin II
Ejercicios Tema 2 Pgina 13
30. Qu imprime el siguiente programa?
cl ass Pr i nci pal { publ i c st at i c voi d mai n ( St r i ng [ ] ar gs) { Rueda r 1=new Rueda ( 16, " R1" ) ; Rueda r 2=new Rueda ( 16, " R1" ) ; Rueda r 3=new Rueda ( 17, " R2" ) ;
Syst em. out . pr i nt l n( r 1. equal s( r 3) ) ; Syst em. out . pr i nt l n( r 1. equal s( r 2) ) ; r 1=r 3; Syst em. out . pr i nt l n( r 1. equal s( r 3) ) ; } }/ / f i n cl ase Pr i nci pal
cl ass Rueda { pr i vat e i nt di mensi on; pr i vat e St r i ng I D; publ i c Rueda ( i nt di mensi on, St r i ng I D) { t hi s. di mensi on=di mensi on; t hi s. I D=I D; } publ i c i nt get _di mensi on( ) { r et ur n di mensi on; } publ i c St r i ng get _I D( ) { r et ur n I D; } publ i c bool ean equal s ( Obj ect o) { bool ean l ogi ca=f al se; i f ( t hi s==o) l ogi ca=t r ue; el se i f ( t hi s. I D == ( ( Rueda) o) . get _I D( ) && t hi s. di mensi on==( ( Rueda) o) . get _di mensi on( ) ) { l ogi ca=t r ue; } r et ur n l ogi ca; } }
Fundamentos de Programacin II
Ejercicios Tema 2 Pgina 14
31. a) Qu imprime el siguiente programa?
cl ass Pr oduct o i mpl ement s Compar abl e <Pr oduct o> {
i nt I D; St r i ng nombr e; doubl e pr eci o;
publ i c Pr oduct o( i nt I D, St r i ng n, doubl e p) { t hi s. I D=I D; nombr e=n; pr eci o=p; } publ i c St r i ng t oSt r i ng( ) { r et ur n I D+" : " +nombr e+" " +pr eci o+" eur os" ; } publ i c St r i ng get _nombr e( ) { r et ur n nombr e; } publ i c i nt get _I D ( ) { r et ur n I D; } publ i c doubl e get _pr eci o( ) { r et ur n pr eci o; } publ i c i nt compar eTo ( Pr oduct o p) { i nt r es=0; i f ( I D>p. get _I D( ) ) { r es=1; } el se { i f ( I D<p. get _I D( ) ) { r es=- 1; } } r et ur n r es; } }
cl ass Pr i nci pal { publ i c st at i c voi d mai n ( St r i ng [ ] ar gs) {
Pr oduct o[ ] pr oduct os = {new Pr oduct o( 21, " Por t t i l " , 488. 90) , new Pr oduct o( 8, " Tar j et a gr f i ca" , 139. 15) , new Pr oduct o( 12, " Moni t or " , 149. 0) , new Pr oduct o( 13, " I mpr esor a" , 105. 45) , new Pr oduct o( 4, " Tecl ado" , 500. 2) };
Syst em. out . pr i nt l n( " Pr oduct os si n or denar " ) ;
f or ( i nt i =0; i <pr oduct os. l engt h; i ++) { Syst em. out . pr i nt l n( pr oduct os[ i ] . t oSt r i ng( ) ) ; }
bur buj a( pr oduct os) ;
Syst em. out . pr i nt l n( " \ nOr denados por I D" ) ;
f or ( Pr oduct o p : pr oduct os) { Syst em. out . pr i nt l n( p. t oSt r i ng( ) ) ; } } Fundamentos de Programacin II
Ejercicios Tema 2 Pgina 15
publ i c st at i c voi d bur buj a ( Pr oduct o [ ] p) { Pr oduct o aux; i nt l ongi t ud; l ongi t ud=p. l engt h;
f or ( i nt i =0; i <l ongi t ud- 1; i ++) { f or ( i nt j =0; j < ( l ongi t ud- 1- i ) ; j ++) { i f ( p[ j ] . compar eTo( p[ j +1] ) >0) { aux=p[ j ] ; p[ j ] =p[ j +1] ; p[ j +1] =aux; } } } } }
b) Y si el mtodo compareTo() se sustituye por el siguiente?
publ i c i nt compar eTo( Pr oduct o p) { r et ur n nombr e. compar eTo( p. get _nombr e( ) ) ; }
c) Y si el mtodo compareTo() se sustituye por el siguiente?
publ i c i nt compar eTo( Pr oduct o p) { r et ur n new Doubl e( pr eci o) . compar eTo( new Doubl e( p. get _pr eci o( ) ) ) ; }
32. Escribir un programa en Java que ordene una serie personas por edad (de mayor a menor) usando el mtodo de ordenacin por intercambio. Las personas estarn contenidas en una matriz de objetos de clase Persona. Esta clase tendr dos atributos, nombre y edad, adems de los mtodos necesarios para resolver el ejercicio. El mtodo de ordenacin deber ser genrico para que acepte cualquier tipo de matriz de objetos. Repetir el programa para ordenar ahora por nombre (en orden alfabtico de mayor a menor).