Ejercicios Tema 2 FunProII

Descargar como pdf o txt
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).

También podría gustarte