Soluciones Ejercicios Tema 1

Documentos relacionados
Programación orientada a objetos

Clases abstractas e interfaces en Java

Herencia y Polimorfismo

Herencia Java y Servicios Web I Master en Ingeniería Matemática

HERENCIA (2ª parte) En Java todas las clases derivan de otra, aunque no se diga explícitamente.

PROGRAMACIÓN ORIENTADA A OBJETOS 1/7/2009. Examen de Java. Nombre: DNI: Titulación:

Derechos de Acceso: COMPOSICION

Tema 1. Herencia y Polimorfismo

Soluciones Ejercicios Tema 3

Interfaces. Amparo López Gaona. Septiembre de Amparo López Gaona () Interfaces Septiembre de / 1

Introducción a Java. Fernando Cerezal López. 24 Noviembre 2005

Aplicaciones de Escritorio

Programación orientada a objetos. Resumen de Temas Unidad 5: Herencia

Práctica 2. Reutilización de código Elementos básicos del lenguaje Java Definición de variables, expresiones y asignaciones

Programación II Práctica 04: Objetos

Examen Teórico Convocatoria de Junio de 2012

INICIACIÓN A LA PROGRAMACIÓN LENGUAJE JAVA con BlueJ

Clases y herencia. FJP Unidad 8. Diseño de clases

Polimorfismo Java y Servicios Web I Master en Ingeniería Matemática

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

Guía práctica de estudio 07: Herencia

PROGRAMACIÓN ORIENTADA A OBJETOS 10/02/2009. Examen de Java. Nombre: DNI: Titulación:

Tema 3 Herencia en Java Parte 2. Programación Orientada a Objetos Curso 2015/2016

// Método Comunicarse, sera implementado por las clases concretas que hereden de la clase //animal

Unidad Didáctica 3. Tipos genéricos. Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos

A3F. Polimorfismo. Carlos Fontela

Entiendo los métodos de Java equals y hashcode

PROGRAMACIÓN EN JAVA. { una línea para definir, crear o ejecutar ; }

class Nombre_Clase extends Nombre_SuperClase { cuerpo de la clase extendida }

Tema 3 Herencia en Java Parte 2. Programación Orientada a Objetos Curso 2015/2016

1. Qué tipos de relación hay entre las siguientes clases?

PROGRAMACIÓN GENÉRICA

Definición. Mónica E. García García Feb 07

Soluciones Ejercicios Tema 7. Cambio de Signo Pila (3/3) if (!p.esvacia()) { d i l cambiasignopila(p); this.apilar(new Integer(-dato));

Examen Teórico. Convocatoria de Febrero de 2015

Qué es Java? Un lenguaje de programación Un entorno de desarrollo Un entorno de aplicación Un entorno de despliegue Es similar en sintaxis de C + +.

Implementar rehashing en TablaHash. Soluciones Ejercicios Tema 13. Implementar toarray en TablaHash. Radares de Tráfico (I)

EJERCICIO Y EJEMPLO RESUELTO: USO DE LA INTERFACE COMPARABLE Y MÉTODO COMPARETO DE JAVA. COMPARAR OBJETOS (CU00913C)

Estructuras de control selectivas

Tema 4- Representación Enlazada

TEMA 5. Agenda. Herencia

Clases Abstractas e Interfaces

Tema 3: Genericidad en Java. Tema 3: Genericidad en Java. Objetivos y Bibliografía. Modelos de Datos Genéricos

Examen Teórico. Convocatoria de Julio de 2015

INTERFACE ITERATOR DEL API JAVA. MÉTODO REMOVE PARA BORRAR OBJETOS EN COLECCIONES. EJERCICIOS Y EJEMPLO RESUELTO. (CU00919C)

Diseño de tipos Igualdad, representación, código, copia y relación de orden

Fundamentos de Programación

Herencia. public class Persona { private String nombre; private char sexo; public Persona() { nombre = new String(); sexo = ' '; }

Java interface y extensibilidad

PARA QUÉ SIRVEN LAS INTERFACES JAVA. IMPLEMENTAR UNA INTERFAZ DEL API. VENTAJAS. EJEMPLOS BÁSICOS. (CU00697B)

Construcciones del Lenguaje Java

Java en 2 horas. Rodrigo Santamaría

Curso de Java POO: Programación orientada a objetos

18. Interfaces Declaración de una interfaz

Práctica 10a. Práctica 10a. José M. Ordax

Herencia. Hay clases que comparten gran parte de sus características.

Unidad IV. Este tipo de codificación nos es permitido gracias a la sobrecarga, la cual se aplica a métodos y constructores.

6. Herencia. Clases abstractas. Genericidad. Clase Object Polimorfismo y ligadura dinámica super Herencia y creación Clases abstractas Genericidad

INTERFACE COMPARATOR. DIFERENCIAS ENTRE COMPARATOR Y COMPARABLE. CLASE COLLECTIONS. EJERCICIOS RESUELTOS. (CU00918C)

Ejemplo práctico: sistema de nómina utilizando polimorfismo

Curso de Java orientado a Android Parte 2

Curso de Java POO: Programación orientada a objetos

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas

! Qué es la POO?! Un paradigma de programación. ! No hay paradigmas mejores ni peores! Todos tienen sus ventajas e inconvenientes

Ejecución de hebras. En realidad, todas las aplicaciones escritas en Java son aplicaciones multihebra (recuerde el recolector de basura).

INTERFACES SET Y SORTEDSET DEL API DE JAVA. CLASES HASHSET Y TREESET. EJEMPLO. DIFERENCIAS ENTRE ELLAS. (CU00924C)

Práctica 11e. Práctica 11e. José M. Ordax

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Código: Salida. Circulo>>(1,2,2.45) Punto >>(1,1)

Tema 6 Patrones de Diseño. Programación Orientada a Objetos Curso 2010/2011

TECNICAS DE PROGRAMACION Universidad Católica Los Angeles de Chimbote MODIFICADORES DE ACCESO A LOS MIEMBROS DE UNA CLASE

HERENCIA. Problema: Reparar el el coche. Jesús (Valencia) Luis, Mecánico (Valencia) Antonio, Servicio Técnico Ferrari (Madrid)

Taller de Programación I. Tema 10: Herencia en Java

PRÁCTICA 4: DISEÑO DE TIPOS Versión: 1.0.1

3.4 Clases y Objetos 05/04/2004. Conceptos Generales. Modificadores de la Clase. Estructura de una Clase. Variables Miembros

Conceptos más avanzados de Programación Orientada a Objetos

Test : Conteste exclusivamente en una HOJA DE LECTURA ÓPTICA, no olvidando marcar que su tipo de examen es A.

Depto. Ingeniería de Sistemas Telemáticos Universidad Politécnica de Madrid ETSI Telecomunicación Fundamentos de Programación 15 de diciembre de 2011

Transcripción:

BonoMetro (I) 1 Soluciones Ejercicios Tema 1 Germán Moltó Martínez gmolto@dsic.upv.es Estructuras de Datos y Algoritmos Escuela Técnica Superior de Ingeniería Informática Universidad Politécnica de Valencia public class BonoMetro private int saldo; private final static int SALDO_INICIAL = 10; public BonoMetro(int ( saldo) this.saldo = saldo; 2 public BonoMetro() this(saldo_inicial); public int getsaldo() return this.saldo; public void setsaldo(int saldo)this.saldo = saldo; public String tostring()return "BonoMetro de " + this.saldo + " viajes."; public void fichar() if (saldo > 0) saldo--; else System.err.println("BonoMetro agotado"); BonoMetro (II) public class MaquinaExpendedora public static void actualiza(bonometro b) b.setsaldo(10); Solución Ejercicio de Clases: Persona (1/3) public class Persona private int edad; private String nif; private int altura; private final static int DEFAULT_EDAD EDAD = 25; private final static String DEFAULT_NIF="11111111A"; private final static int DEFAULT_ ALTURA = 175; 3 public Persona(int edad, String nif, int altura) this.edad dd = edad; dd this.nif = nif; this.altura = altura;

Solución Ejercicio de Clases: Persona (2/3) public Persona() this (DEFAULT_EDAD, EDAD DEFAULT_NIF, DEFAULT_ALTURA); ALTURA); public int getedad()return edad; public String getnif() return nif; public int getaltura()return altura; Solución Ejercicio de Clases: Persona (3/3) public class TestPersona public static void main(string args[]) Persona p1 = new Persona(); System.out.println( println("persona 1: " + p1); public void setedad(int edad)this.edad = edad; public void setnif(string i nif)this.nif = nif; public void setaltura(int altura)this.altura = altura; public String tostring() return "Mi NIF es " + nif + " tengo " + edad + " anyos y mido " + altura + " cm "; Persona p2 = new Persona(30, "58765786M",190); System.out.println("Persona 2: " + p2); Solución Ejercicio: Yogures (I) public class Yogur private double calorias; 7 public Yogur() calorias = 120.5; public double getcalorias() return calorias; Solución Ejercicio: Yogures (II) public class YogurDesnatado extends Yogur public YogurDesnatado() super(); 8 public double getcalorias() return super.getcalorias() / 2;

Solución Ejercicio: Yogures (III) Solución alternativa: public class YogurDesnatado extends Yogur public YogurDesnatado() super(); //No es necesaria, se hace automáticamente. this.calorias = this.calorias / 2; Esta solución requiere que el atributo calorias en la clase Yogur sea protected. 9 Solución Ejercicio: Yogures (IV) public class TestYogures public static void main(string args[]) Yogur y = new Yogur(); YogurDesnatado yd = new YogurDesnatado(); System.out.println( println("calorias: " + y.getcalorias()); System.out.println("Calorias Desnatado: " + yd.getcalorias()); 10 Solución Ejercicio Herencia: Felino Solución 1: Aprovechar la definición del atributo loquehablo y del método hbl habla. public class Gato extends Felino public Gato() loquehablo = Miau ; Solución 2: Redefinir la implementación del método habla public class Gato extends Felino public String habla() return Miau ; 11 Solución Ejercicio Herencia: Personas (I) public class Persona public Persona() p () public void hablar() public void hablar() System.out.println("Estoy hablando"); public void comer() System.out.println("Yummy Yummy!"); 12

Solución Ejercicio Herencia: Personas (II) public class Ingeniero extends Persona public void razonar() System.out.println("Observo, reflexiono, concluyo."); public void trabajarengrupo() System.out.println("Colaboro con otras personas"); Solución Ejercicio Herencia: Personas (III) public class IngenieroInformatico extends Ingeniero public void crearprograma() hablar(); comer(); razonar(); trabajarengrupo(); Nótese que es posible invocar cualquier de los métodos definidos sobre un objeto de tipo IngenieroInformatico ya que se reciben por herencia. 13 14 Solución Ejercicio: Diseño de Constructores public class Base public int bpublico; int bprotegido; private int bprivado; public Base(int bpublico, int bprotegido, int bprivado) this.bpublico = bpublico; this.bprotegido = bprotegido; this.bprivado = bprivado; public class Derivada extends Base public int dpublico; private int dprivado; public Derivada(int bpublico, int bprotegido, int bprivado, int dpublico, int dprivado) super(bpublico, bprotegido, bprivado); this.dpublico = dpublico; this.dprivado = dprivado; 15 Ejercicio Interfaces: Arrancar (I) public interface Vehiculo void arrancar(); public class Coche implements Vehiculo public void arrancar()system.out.println( Brruumm! ); public class Moto implements Vehiculo public void arrancar()system.out.println( Ratatata! ); 16

Ejercicio Interfaces: Arrancar (II) public abstract class Vehiculo public abstract void arrancar(); public class Coche extends Vehiculo public void arrancar()system.out.println( Brruumm! ); Ejercicio Interfaces: Arrancar (IV) public class Arrancador public void arrancavehiculos(vehiculo[] vvehiculos) for (int i = 0; i < vvehiculos.length ; i++) v[i].arrancar(); public class Moto extends Vehiculo public void arrancar()system.out.println( Ratatata! ); 17 18 Solución Ejercicio: Clase Cilindro (I) 1. Modificador de visibilidad adecuado: protected, visible para la clase, las derivadas y las pertenecientes al mismo paquete. 2. Implementación incorrecta b). Se pretende acceder al atributo privado tipo definido en Circulo. 3. Implementaciones que favorecen la reutilización: 19 public double area()return 2 * super.area() + super.perimetro() * altura; public double volumen()return super.area() * altura; Solución Ejercicio: Clase Cilindro (II) 4. Redefinición de la clase Cilindro: public class Cilindro private double altura; private Circulo base; 20 public Cilindro(double radiobase, double altura) base = new Circulo(radioBase); this.altura = altura; public double area() return 2 * base.area() + base.perimetro() * altura; public double volumen() return base.area() * altura;

Solución Ejercicio: losanimales adoptaanimal(new Armadillo()); NO provoca error de compilación ya que hay una conversión de tipos por ampliación, de Armadillo a Animal. Object o = new Armadillo(); NO da error de compilación. El polimorfismo lo permite. Armadillo a1 = new Animal(); SI da error de compilación. Armadillo NO es subclase de Animal. Armadillo a2 = new Muflon(); SI da error de compilación. Armadillo y Muflon no tienen relación de herencia. Resultado de ejecución: Grunt \n MOO \n Groar! Solución: Conversor de Divisas (I) public interface ConversorDivisa double convierte(double cantidad); public class EuroDolarConversorDivisa implements ConversorDivisa public double convierte(double cantidad) return cantidad * 1.50; public String tostring() return "Conversor de Euros a Dolares"; 22 Solución: Conversos de Divisas (II) 1. Una interfaz debe ser pública. 2. Lo lógico es que el método convierte reciba un tipo primitivo en lugar de un tipo objeto. 3. El método convierte es público en la interfaz (por definición) i ió y no se puede reducir su visibilidad (a private) en la clase que lo implementa. 4. El método convierte recibe un double. Al poner un float se está creando un método nuevo sin ninguna relación con el que queremos implementar (ya que su lista de argumentos es diferente). 5. El perfil del método tostring devuelve un String. 6. Falta la e del nombre del método. 7. Una clase implementa una interfaz (no la extiende). 23 Solución La Lavadora Hay que respetar el número de argumentos de los constructores: public class Lavadora extends ElectroDomestico 24 public Lavadora() super(tiposcorriente.tipo_220v, 4500.0);

Solución Actores y Películas: Errores (I) public class Persona private String nombre; public Persona(String nombre) this.nombre = nombre; public String tostring()return this.nombre; public class Actor extends Persona private String pelicula; public Actor(String nombre, String pelicula) super(nombre); this.pelicula = pelicula; public String getpelicula() return this.pelicula; public String tostring() Nombre: + super.tostring() + Película: + this.pelicula; 25 Solución Actores y Películas: Errores (I) public class Peliculas public static void mostrarreparto(actor lista[], String pelicula) for (int i = 0; i < lista.length; i++) if (lista[i].getpelicula().equals(pelicula)) System.out.println(lista[i].toString()); Ojo con los límites del vector y para obtener su longitud. Se debe utilizar equals para comparar el contenido de dos String. El operador == compara únicamente las referencias. 26