Metodología y Tecnología de la Programación Ejercicios Tema 8: HerenciaESI-UCLM 1. ¿Qué tipos de relación hay entre las siguientes clases? Personal de la Universidad 1 n PAS Profesor Estudiante a) herencia y asociación c) dependencia y asociación 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 frase(). libreta de ahorro y libreta 2000.aa()). La cuenta corriente puede tener asociada una libreta de ahorro para cubrir descubiertos de la cuenta corriente. 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. Consideremos tres tipos de cuentas: cuenta corriente. Además se retiraran fondos de cada uno de los tipos de cuenta. inicializando las cuentas con unos valores iniciales. Implemente en Java dichas clases.aa()). lista [0]= new Dos(). System. } } class Familia { public static void main(String [] args){ Hija h= new Hija(4). En un banco tenemos varios tipos de cuentas bancarias en todas las cuales es posible retirar fondos y hacer depósitos. En estas condiciones: a) Construir un diagrama de clases usando UML. h=f(h). Además los ordenadores portátiles tienen un atributo peso. y los de sobremesa la descripción del tipo de torre. Las cuentas corrientes se usan para realizar pagos y no proporcionan ningún interés. lista [1]= new Tres(). Realice un diseño indicando las clases que hay que tener en cuenta (incluyendo atributos y métodos) y su relación. se actualizarán los intereses de la libreta 2000 y se depositará una determinada cantidad en la libreta 2000. las libretas de ahorro proporcionan un interés del 4%. ¿Cuál es el resultado del siguiente programa? class Padre { protected int aa=0. for (int i=0. i<2. Por otro lado. } } } 5.Metodología y Tecnología de la Programación ESI-UCLM class Driver { public static void main(String[] args) { Uno [] lista =new Uno [2]. 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. pero el que menos cuesta" para el caso de los ordenadores de sobremesa. i++){ lista[i]. public int aa() { return aa. 6. incluyendo los atributos y métodos en cada clase. } } Ejercicios tema 8: Herencia Página: 2 .println (h. } private static Nieta f (Padre h) { Nieta n=new Nieta (h. } } class Hija extends Padre { public Hija (int bb) { this. 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).aa=bb+1. } } class Nieta extends Hija { public Nieta (int cc) { super(cc+2). En el programa deben crearse objetos de cada una de las clases.out. 7. Ambos tipos de ordenadores se caracterizan por su código y por su precio. return n. En una tienda se venden 2 tipos de ordenadores: portátiles y de sobremesa. } public void incrementar_precio(double p) { precio=precio+p. Dada la siguiente jerarquía de clases: Naturaleza Animal Hervíboro Elefante Rinoceronte Con las siguientes declaraciones: Naturaleza n.print(c.Metodología y Tecnología de la Programación ESI-UCLM 8. devuelve_editorial 9. ¿Cuál de las siguientes sentencias son incorrectas y por qué? a) a=n b)e=r c)h=e d) a=h 10. } } class Vehiculo { protected String marca.incrementar_precio(100). Elefante e. v=c.devolver_precio()).out. La clase tesis tiene además el método devuelve_departamento y la clase revista devuelve_número_de_revista. devuelve_editorial y devuelve_número_de revista b)devuelve_numero_de_revista y devuelve_departamento c)devuelve_autor.out.devolver_marca()+” “). this. 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.out. devuelve_editorial.println(v. 1000).marca=marca. public Vehiculo (String marca. ¿Cuál es el resultado del siguiente programa? class Ejercicio { public static void main (String [] args) { Vehiculo v= new Vehiculo("AAA".out.print(v. Animal a. System.devolver_marca()+” “).devolver_precio()).precio=precio.incrementar_precio(100). double precio) { this.out.print(v.println(v. devuelve_departamento y devuelve_número_de_revista d)devuelve_autor. System. Herbívoro h. ¿Qué métodos podrían ser invocados usando una variable polimórfica de tipo publicación? a)devuelve_autor.println(c.incrementar_precio(100). v.devolver_marca()+” “). protected double precio. c. } Ejercicios tema 8: Herencia Página: 3 . System. Coche c = new Coche("BBB". System. 1000). System.out. v. System.devolver_precio()). Rinoceronte r. }//fin método public double calcularnota () { return nota. System. n el número de moles.calcularnota()). } } class Coche extends Vehiculo { public Coche (String marca. el programa debe hacer uso de dichas constantes definiéndolas a través de una interfaz. 23 Sabiendo que la contante de Avogadro vale 6. ¿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.out. char curso) { super (nombre.println (alumno1. }//fin método }//fin clase Ejercicio Ejercicios tema 8: Herencia Página: 4 .0.println (alumno1. double nota. Cree un programa que utilice los métodos definidos. double precio){ super (marca. } public String devolver_marca(){ return marca. public Alumno (String nombre. V el volumen. 13. } public void incrementar_precio(double p) { precio=precio+2*p. 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. alumno1=new Alumno("Felix". this. } } 11.precio).023 10 partículas/mol y la constante de Boltzmann 1. k la constante de Boltzmann y T la temperatura. ¿Cuál es el resultado del siguiente programa? abstract class Alumno { protected String nombre.calcularnota()). nota).out. Na la constante de Avogadro. alumno1=new Alumno_Ordinario (“Lucia”. this. }//fin método }// de clase Alumno_Ordinario class Ejercicio { public static void main (String [] args) { Alumno alumno1. 7. Escriba el código de otra clase llamada Objetos que use la segunda interfaz. protected double nota.curso=curso. ‘1’).nota=nota. 5.38066 10-23 J/K. 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. public Alumno_Ordinario (String nombre.0). }//método abstract public double calcularnota (). 12. double nota) { this. System.nombre=nombre.Metodología y Tecnología de la Programación ESI-UCLM public double devolver_precio(){ return precio. }//de clase Alumno class Alumno_Ordinario extends Alumno { private char curso. void imprimeresultadoB () .println ("valor de a"+ a+ "valor de aa"+ aa).out. 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. para un artículo con código C el precio es 150. Dentro de estos clientes existe un cliente especial llamado Preferente.3. } public void imprimeresultadoB () { System.3. } } 15.imprimeresultadoB(). b) Implemente las clases y la interfaz. public void imprimeresultadoA () { System. } } interface B { int b=435. Cada fondo se caracteriza por su número y el saldo mensual. 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. En el caso de ser un producto hardware. Para cada uno de ellos se debe poder consultar todos los atributos que contiene.imprimeresultadoA(). void imprimeresultadoA () { System. usando UML. 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).Metodología y Tecnología de la Programación ESI-UCLM 14. 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. si el código es B el precio es 50. número de cuenta y saldo. Además. ob1. c) Escribir un programa principal en Java donde se creen un cliente y un cliente Preferente. en los productos software hay que indicar el tipo de producto (con una cadena). 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. Se pide: a) Dibujar. 16.println ("valor de a"+ a).println ("valor de b"+ b+ "valor de aa"+ aa). ¿Cuál es el error del siguiente programa? interface A { double a=2.out. Dicho cliente se caracteriza porque posee varios fondos de inversión. el diagrama de clases indicando qué clases hay y la relación entre ellas. El número de fondos que posee el cliente Preferente y las características de cada fondo deben introducirse por teclado.32.out. b) Implementar en Java todas las clases resultantes del diagrama. c) Realice un programa principal donde cree un objeto software y otro hardware y muestre el precio y demás características del objeto.50 euros. Además. ob1. } class AA implements A. En un banco se tienen una serie de clientes caracterizados por su NIF. Nota: la interface debe tener un método abstracto. Ejercicios tema 8: Herencia Página: 5 . B { double aa=324. y en los hardware se debe indicar si es un periférico o no. los artículos sólo serán A ó B y si es un periférico el precio se incrementará en un 10%. } } class Principal { public static void main (String [] args) { AA ob1=new AA().