Metodología y Tecnología de la Programación ESI-UCLM Ejercicios Tema 8: Herencia 1. ¿Qué tipos de relación hay entre las siguientes clases? Personal de la Universidad 1 PAS Profesor a) herencia y asociación c) dependencia y asociación n Estudiante b) herencia y dependencia d) transposición y bifuncionalismo 2. ¿Cuál es el resultado del siguiente programa? class Programa { public static void main(String [ ] args){ Clase1 obj1=new Clase1(); obj1.imprimir(4); Clase2 obj2=new Clase2(); obj2.imprimir(3); } } class Clase1 { protected int prop1=10,prop2=4; public void imprimir(int i){ prop1=prop1+i; prop2=prop2+i; System.out.print(prop1+" "+prop2+" "); } } class Clase2 extends Clase1 { public void imprimir(int i){ prop1=prop1-i; prop2=prop2-i; System.out.print(prop1+" "+prop2); } } 3. ¿Qué modificador debo usar en los siguientes casos? Para un atributo de una clase que va a tener hijas Para un método de soporte Para un método de servicio Para una atributo de una clase que no va a tener hijas 4. ¿Cuál es el resultado del siguiente programa? abstract class Uno { protected int i=2; abstract public void frase(); } class Dos extends Uno { public void frase() { int i=3; System.out.println("Estoy en un objeto de clase Dos con i:"+i); } } class Tres extends Dos { public void frase() { System.out.println("Estoy en un objeto de clase Tres con i:"+i); } } Ejercicios tema 8: Herencia Página: 1 Metodología y Tecnología de la Programación ESI-UCLM class Driver { public static void main(String[] args) { Uno [] lista =new Uno [2]; lista [0]= new Dos(); lista [1]= new Tres(); for (int i=0; i<2; i++){ lista[i].frase(); } } } 5. En una tienda se venden 2 tipos de ordenadores: portátiles y de sobremesa. Ambos tipos de ordenadores se caracterizan por su código y por su precio. Además cada uno tiene un eslogan que es: "Ideal para sus viajes" en el caso de los portátiles y "Es el que más pesa, pero el que menos cuesta" para el caso de los ordenadores de sobremesa. Además los ordenadores portátiles tienen un atributo peso, y los de sobremesa la descripción del tipo de torre. Realice un diseño indicando las clases que hay que tener en cuenta (incluyendo atributos y métodos) y su relación. 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 depósitos. Consideremos tres tipos de cuentas: cuenta corriente, libreta de ahorro y libreta 2000. Las cuentas corrientes se usan para realizar pagos y no proporcionan ningún interés. 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 interés del 4%. La libreta 2000 es un tipo de libreta de ahorro que rinde un mayor interés (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 métodos en cada clase. Incluya también 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. Además se retiraran fondos de cada uno de los tipos de cuenta, se actualizarán los intereses de la libreta 2000 y se depositará una determinada cantidad en la libreta 2000. 7. ¿Cuál es el resultado del siguiente programa? class Padre { protected int aa=0; public int aa() { return aa; } } class Hija extends Padre { public Hija (int bb) { this.aa=bb+1; } } class Nieta extends Hija { public Nieta (int cc) { super(cc+2); } } class Familia { public static void main(String [] args){ Hija h= new Hija(4); h=f(h); System.out.println (h.aa()); } private static Nieta f (Padre h) { Nieta n=new Nieta (h.aa()); return n; } } Ejercicios tema 8: Herencia Página: 2 Metodología y Tecnología de la Programación ESI-UCLM 8. Dada la siguiente relación entre clases: Publicación Tesis Revista donde la clase publicación tiene los métodos: devuelve_autor y devuelve_editorial. La clase tesis tiene además el método devuelve_departamento y la clase revista devuelve_número_de_revista. ¿Qué métodos podrían ser invocados usando una variable polimórfica de tipo publicación? a)devuelve_autor, devuelve_editorial y devuelve_número_de revista b)devuelve_numero_de_revista y devuelve_departamento c)devuelve_autor, devuelve_editorial, devuelve_departamento y devuelve_número_de_revista d)devuelve_autor, devuelve_editorial 9. Dada la siguiente jerarquía de clases: Naturaleza Animal Hervíboro Elefante Rinoceronte Con las siguientes declaraciones: Naturaleza n; Animal a; Herbívoro h; Elefante e; Rinoceronte r; ¿Cuál de las siguientes sentencias son incorrectas y por qué? a) a=n b)e=r c)h=e d) a=h 10. ¿Cuál es el resultado del siguiente programa? class Ejercicio { public static void main (String [] args) { Vehiculo v= new Vehiculo("AAA", 1000); Coche c = new Coche("BBB", 1000); v.incrementar_precio(100); System.out.print(v.devolver_marca()+” “); System.out.println(v.devolver_precio()); c.incrementar_precio(100); System.out.print(c.devolver_marca()+” “); System.out.println(c.devolver_precio()); v=c; v.incrementar_precio(100); System.out.print(v.devolver_marca()+” “); System.out.println(v.devolver_precio()); } } class Vehiculo { protected String marca; protected double precio; public Vehiculo (String marca, double precio) { this.marca=marca; this.precio=precio; } public void incrementar_precio(double p) { precio=precio+p; } Ejercicios tema 8: Herencia Página: 3 Metodología y Tecnología de la Programación ESI-UCLM public double devolver_precio(){ return precio; } public String devolver_marca(){ return marca; } } class Coche extends Vehiculo { public Coche (String marca, double precio){ super (marca,precio); } public void incrementar_precio(double p) { precio=precio+2*p; } } 11. Implemente el código de una interfaz llamada Primera que contenga dos métodos A y B. Defina otra interfaz llamada Segunda que herede de la anterior y además contenga un método llamado C. Escriba el código de otra clase llamada Objetos que use la segunda interfaz. ¿Cuántos métodos debe implementar esta clase? Implemente dichos métodos de forma que cada método imprima una línea indicando el nombre del método. Cree un programa que utilice los métodos definidos. 12. Construya un programa que calcule el volumen molar de una sustancia a una presión y temperatura dadas usando la ecuación de estado de un gas ideal: PV=nNakT, donde p es la presión, V el volumen, n el número de moles, Na la constante de Avogadro, k la constante de Boltzmann y T la temperatura. 23 Sabiendo que la contante de Avogadro vale 6.023 10 partículas/mol y la constante de Boltzmann 1.38066 10-23 J/K, el programa debe hacer uso de dichas constantes definiéndolas a través de una interfaz. 13. ¿Cuál es el resultado del siguiente programa? abstract class Alumno { protected String nombre; protected double nota; public Alumno (String nombre, double nota) { this.nombre=nombre; this.nota=nota; }//método abstract public double calcularnota (); }//de clase Alumno class Alumno_Ordinario extends Alumno { private char curso; public Alumno_Ordinario (String nombre, double nota, char curso) { super (nombre, nota); this.curso=curso; }//fin método public double calcularnota () { return nota; }//fin método }// de clase Alumno_Ordinario class Ejercicio { public static void main (String [] args) { Alumno alumno1; alumno1=new Alumno("Felix", 5.0); System.out.println (alumno1.calcularnota()); alumno1=new Alumno_Ordinario (“Lucia”, 7.0, ‘1’); System.out.println (alumno1.calcularnota()); }//fin método }//fin clase Ejercicio Ejercicios tema 8: Herencia Página: 4 Metodología y Tecnología de la Programación ESI-UCLM 14. ¿Cuál es el error del siguiente programa? interface A { double a=2.3; void imprimeresultadoA () { System.out.println ("valor de a"+ a); } } interface B { int b=435; void imprimeresultadoB () ; } class AA implements A, B { double aa=324.32; public void imprimeresultadoA () { System.out.println ("valor de a"+ a+ "valor de aa"+ aa); } public void imprimeresultadoB () { System.out.println ("valor de b"+ b+ "valor de aa"+ aa); } } class Principal { public static void main (String [] args) { AA ob1=new AA(); ob1.imprimeresultadoA(); ob1.imprimeresultadoB(); } } 15. En un banco se tienen una serie de clientes caracterizados por su NIF, número de cuenta y saldo. Dentro de estos clientes existe un cliente especial llamado Preferente. Dicho cliente se caracteriza porque posee varios fondos de inversión. Cada fondo se caracteriza por su número y el saldo mensual. Se pide: a) Dibujar, usando UML, el diagrama de clases indicando qué clases hay y la relación 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. Además, para el caso del cliente Preferente se debe poder consultar también los datos de cada uno de sus fondos (número y el saldo mensual). El número de fondos que posee el cliente Preferente y las características de cada fondo deben introducirse por teclado. 16. Una tienda de informática vende dos tipos de artículos (software y hardware) ambos caracterizados por su código (de tipo char) y su descripción. Además, en los productos software hay que indicar el tipo de producto (con una cadena), y en los hardware se debe indicar si es un periférico o no. Para saber el precio de un artículo utilice una interface que indique que para un artículo cuyo código es A el precio es 100.0 euros, si el código es B el precio es 50.3; para un artículo con código C el precio es 150.50 euros. En el caso de ser un producto hardware, los artículos sólo serán A ó B y si es un periférico el precio se incrementará en un 10%. Los productos sofware serán exclusivamente B ó C incrementándose el precio del artículo en un 5% si el sofware es de tipo ProgramaJuegos. Nota: la interface debe tener un método abstracto. a) Dibuje en UML los diagramas de las clases y las relaciones entre ellas. Para cada clase debe indicar los atributos y métodos 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 demás características del objeto. Ejercicios tema 8: Herencia Página: 5