3 interfaces clases_abstractas_herencia_polimorfismo

314 views

Published on

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
314
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
0
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

3 interfaces clases_abstractas_herencia_polimorfismo

  1. 1. Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 1Maestría en Sistemas ComputacionalesMateriaTECNOLOGÍAS DE PROGRAMACIÓN3. Herencia, Polimorfismo,3. Herencia, Polimorfismo,Interfaces y Clases Abstractas.Interfaces y Clases Abstractas.semestre agosto – diciembre 2012Instituto Tecnológico de la LagunaDivisión de Estudios de Posgrado e Investigación
  2. 2. Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 2Objetivo: Descripción de conceptosrelevantes en el POO: herencia, interfaces,clases abstractas y polimorfismo.Contenido3.1 Herencia.3.2 Polimorfismo3.3 Interfaces.3.4 Clases abstractas.3.3. Interfaces, Clases Abstractas yInterfaces, Clases Abstractas yPolimorfismo.Polimorfismo.
  3. 3. 3.1 HerenciaEl concepto de Herencia nosenseña que podemos crear unanueva clase a partir de unaclase existente: se reutilizan (oheredan) sus métodos y camposy se añaden nuevos métodos ycampos para adaptar la nuevaclase a nuevas situaciones.Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 3
  4. 4. 3.1 Herencia La clase existente se denominasuperclase, clase base o clase padre. La nueva clase se denomina subclase,clase derivada o clase hija.Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 4EmpleadoEjecutivoAdministrador Secretario Programadorasuperclasesubclase
  5. 5. 3.1 Herencia Ejemplo: La clase Administrador hereda dela clase Empleado.class Administrador extends Empleado{ private double incentivo;public void setIncentivo(double incent){incentivo=incent;}}Para indicar la herencia se emplea lapalabra reservada extends.Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 5
  6. 6. 3.1 HerenciaNote que: Si se tiene un objeto Empleado no sele puede aplicar el métodosetIncentivo(). Sin embargo, si se tiene un objetoAdministrador se le pueden aplicar losmétodos getNombre() ygetFechaContrato(). Estos métodosse heredan automáticamente de lasuperclase Empleado.Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 6
  7. 7. 3.1 Herencia De igual manera, los campos nombre,sueldo y fechaContrato se heredan dela superclase. De tal forma que todoobjeto Administrador posee cuatrocampos: nombre, fechaContrato,sueldo e incentivo.Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 7
  8. 8. 3.1 Herencia Ejemplo: Nuevo método de la subclase queinvalida el método de la superclase.class Administrador extends Empleado{ private double incentivo;public void setIncentivo(double incent){incentivo=incent;}public double getSueldo(){double sueldoBase = super.getSueldo();return (sueldoBase + incentivo);}}Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 8
  9. 9. 3.1 Herencia Es importante hacer notar que lassubclases pueden añadir campos ypueden añadir o invalidar métodos dela superclase. Sin embargo, laherencia no tiene la posibilidad deañadir ni eliminar campos o métodos.Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 9
  10. 10. 3.1 Herencia Ejemplo: Creación de un constructor en lasubclase.class Administrador extends Empleado{ private double incentivo;public Administrador(String n, double s, int aa, int mm, ind dd){ super(n, s, aa, mm, dd);incentivo = 0;}public void setIncentivo(double incent){ incentivo=incent;}public double getSueldo(){ double sueldoBase = super.getSueldo();return (sueldoBase + incentivo);}}Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 10
  11. 11. 3.1 Herencia El constructor de la subclase Administradorno tiene acceso a los campos private de lasuperclase Empleado. La instrucción:super(n, s, aa, mm, dd);realiza la llamada al constructor de lasuperclase Empleado. La llamada que usa super debe ser laprimer instrucción que aparezca en elconstructor de la subclase.Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 11
  12. 12. 3.1 Herencia super es una palabra reservada especial que dirigeal compilador para que invoque al método de lasuperclase. Si el constructor de la subclase no llamaexplícitamente a un constructor de la superclase,entonces se invoca al constructor predeterminado(sin parámetros) de la superclase. Si la superclase no posee un constructorpredeterminado y el constructor de la subclase nollama explícitamente a otro constructor de lasuperclase, entonces el compilador de Java nosavisa que hubo un error.Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 12
  13. 13. 3.1 Herencia Ejemplo:public class Bicicleta{// la clase Bicicleta tiene tres campospublic int cambios;public int rodada;public int velocidad;// la clase Bicicleta tiene un constructorpublic Bicicleta(int iniciaCambios, int iniciaRodada, int iniciaVelocidad){cambios = iniciaCambios;rodada = iniciaRodada;velocidad = iniciaVelocidad;}Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 13
  14. 14. 3.1 Herencia// la clase Bicicleta tiene cuatro metodospublic void setCambios(int newValue) {cambios = newValue;}public void setRodada(int newValue) {rodada = newValue;}public void aplicaFreno(int decremento) {velocidad -= decremento;}public void aumentaVelocidad(int incremento) {velocidad += incremento;}}Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 14
  15. 15. 3.1 Herenciapublic class BiciDeMontana extends Bicicleta{// la subclase BiciDeMontana agrega un campopublic int alturaAsiento;// la subclase BiciDeMontana tiene un constructorpublic BiciDeMontana (int iniciaAlturaAsiento, int iniciaCambios,int iniciaRodada, int iniciaVelocidad){super(iniciaCambios, iniciaRodada, iniciaVelocidad) ;alturaAsiento = iniciaAlturaAsiento;}// la subclase BiciDeMontana agrega un métodopublic void setAlturaAsiento(int newValue) {alturaAsiento = newValue;}}Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 15
  16. 16. 3.2 Polimorfismo El hecho de que una variable deobjeto pueda en realidad hacerreferencia a múltiples tiposdistintos se denominapolimorfismo. La selección automática del métodocorrecto durante la ejecución sedenomina enlace dinámico.Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 16
  17. 17. 3.2 Polimorfismo Ejemplo: Creación de un nuevo Administrador ydos Empleados.Administrador jefe = new Administrador(“José López”, 50000, 1987,12, 15);jefe.setIncentivo(5000);Empleado [] personal = new Empleado[3];personal[0] = jefe;personal[1] = new Empleado (“María Pérez”, 30000, 1989, 10, 1);personal[2] = new Empleado (“Miguel Ríos”, 20000, 1990, 3, 15);Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 17
  18. 18. 3.2 PolimorfismoPara imprimir el sueldo de todos:for(Empleado e : personal)System.out.println(e.getNombre() + ” ” + e.getSueldo());Este bucle imprime:José López 55000.0María Pérez 30000.0Miguel Ríos 20000.0Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 18
  19. 19. 3.2 Polimorfismo personal[1] y personal[2] imprimen su sueldo baseporque son objetos de tipo Empleado. personal[0] es un objeto de tipo Administrador y sumétodo getSueldo añade el incentivo al sueldo base. La llamadae.getSueldo());invoca al método de la clase Empleado cuando e serefiere a un objeto de tipo Empleado. Cuando e serefiere a un objeto de tipo Administrador se invoca almétodo getSueldo de la clase Administrador. Esto espolimorfismo.Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 19
  20. 20. 3.2 Polimorfismo La llamada al método adecuado se realiza en tiempo deejecución (enlazado dinámico). En el momento de ejecución, la llamada a e.getSueldo()se resuelve de la siguiente manera:1. La máquina virtual examina la tabla de métodos en busca deltipo de e. Puede tratarse se la tabla de métodos de Empleado,Administrador, u otra subclase de Empleado.2. Entonces, la máquina virtual examina la clase en que se define,en busca de la signatura de getSueldo(). Ahora ya sabe elmétodo al que debe llamar.3. Por último, la máquina virtual llama al método.Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 20
  21. 21. Clases y métodos finales Cuando se desea evitar que alguienconstruya una subclase a partir de unade nuestras clases podemos utilizar elmodificador final en la definición de laclase. Por ejemplo, deseamos evitar que otrosconstruyan subclases de la claseEjecutivo, declaramos la clase:final class Ejecutivo extends administrador{…}Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 21
  22. 22.  Si se desea que ninguna subclasepueda invalidar un método, el métodose debe declarar usando elmodificador final:Class Empleado{ . . .public final String getNombre(){return nombre;}. . .}Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 22
  23. 23.  Todos los métodos de una clase final son finalautomáticamente. Solo hay una buena razón para hacer final unmétodo o una clase: asegurarse de que susemántica no se pueda modificar en unasubclase. Por ejemplo los métodos getTime y setTime dela clase Calendar son final. La clase Calendar sehace cargo de la responsabilidad de efectuarconversiones entre la clase Date y el estado delcalendario.Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 23
  24. 24. Conversión de referencia de unobjeto de una clase a otra. Se le llama typecasting o refundición. Este proceso consiste en forzar laconversión de un tipo a otro. Podemos transformar un número depunto flotante en un entero:double x = 3.405;int nx = (int) x;transforma el valor de la expresión xen un entero, descartando su partefraccionaria.Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 24
  25. 25. Conversión de referencia de unobjeto de una clase a otra. También podemos convertir unareferencia de objeto de una clase aotra. Por ejemplo:Administrador jefe = (Administrador) personal[0]; // correctoAdministrador jefe = (Administrador) personal[1]; // errorLina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 25
  26. 26. Conversión de referencia de unobjeto de una clase a otra. instanceof se puede utilizar paraverificar si una refundición va a teneréxito antes de intentar realizarla.if (personal[1] instaceof Administrador){Administrador jefe = (Administrador) personal[1];}Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 26
  27. 27. Conversión de referencia de unobjeto de una clase a otra. En resumen: Solo se puede refundir dentro de unajerarquía de herencia. Utilice instanceof para probar antesde hacer una refundición de unasuperclase a una subclase. Puede emplear try y catch conClassCastException para manejar elerror de refundición de clases.Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 27
  28. 28. EJEMPLO. FUENTE:http://www.javabeginner.com/learn-java/java-object-typecastingclass Vehicle{ String name;Vehicle() { name = "Vehicle"; }}class HeavyVehicle extends Vehicle{ HeavyVehicle() { name = "HeavyVehicle"; }}class Truck extends HeavyVehicle{ Truck() { name = "Truck"; }}class LightVehicle extends Vehicle{ LightVehicle() { name = "LightVehicle"; }}Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 28
  29. 29. FUENTE:http://www.javabeginner.com/learn-java/java-object-typecastingpublic class InstanceOfExample{ static boolean result;static HeavyVehicle hV = new HeavyVehicle();static Truck T = new Truck();static HeavyVehicle hv2 = null;public static void main(String[] args){ result = hV instanceof HeavyVehicle;System.out.print("hV is an HeavyVehicle: " + result + "n");result = T instanceof HeavyVehicle;System.out.print("T is an HeavyVehicle: " + result + "n");result = hV instanceof Truck;System.out.print("hV is a Truck: " + result + "n");result = hv2 instanceof HeavyVehicle;System.out.print("hv2 is an HeavyVehicle: " + result + "n");hV = T; //Sucessful Cast form child to parentT = (Truck) hV; //Sucessful Explicit Cast form parent to child}}Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 29
  30. 30. FUENTE:http://www.javabeginner.com/learn-java/java-object-typecastingSALIDA:hV is an HeavyVehicle: trueT is an HeavyVehicle: truehV is a Truck: falsehv2 is an HeavyVehicle: falseLina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 30
  31. 31. 3.3 Interfacesfuente: http://docs.oracle.com/javase/tutorial/java/IandI/createinterface.htmlUna interfaz es una formade describir lo que deberíanhacer las clases, sinespecificar cómo debenhacerlo.Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 31
  32. 32. 3.3 Interfacesfuente: http://docs.oracle.com/javase/tutorial/java/IandI/createinterface.html En Java, una interfaz es un tipo dereferencia, similar a una clase, quepuede contener solo constantes, yfirmas de métodos. Los métodos notienen cuerpo. Las interfaces no pueden serinstanciadas, sólo se puedenimplementar en las clases o serextendidas por otras interfaces.Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 32
  33. 33. 3.3 Interfacesfuente: http://docs.oracle.com/javase/tutorial/java/IandI/createinterface.html Una declaración de una interfaz consiste demodificadores de acceso, la palabra reservadainterface, el nombre de la interfaz, una lista deinterfaces padre (sí las hay) y el cuerpo de lainterfaz:public interface GroupedInterface extends Interface1, Interface2,Interface3 {// constant declarations// base of natural logarithmsdouble E = 2.718282;// method signaturesvoid doSomething (int i, double x);int doSomethingElse(String s);}Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 33
  34. 34. 3.3 Interfacesfuente: http://docs.oracle.com/javase/tutorial/java/IandI/createinterface.html El especificador de acceso public nosindica que la interfaz puede ser usadapor cualquier clase en cualquierpaquete. Si no se especifica que lainterfaz es pública, la interfaz sólo seráaccesible por las clases que estándefinidas en el mismo paquete que lainterfaz.Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 34
  35. 35. 3.3 Interfacesfuente: http://docs.oracle.com/javase/tutorial/java/IandI/createinterface.html Una interfaz puede extender de otrasinterfaces, al igual que una clase puedeextender o ser subclase de otra clase. Sin embargo, mientras que una clasesólo puede extender otra clase, unainterfaz puede extender cualquiernúmero de interfaces. La declaración deinterfaz incluye una lista separada porcomas de todas las interfaces que seextiende.Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 35
  36. 36.  El cuerpo de la interfaz contienedeclaraciones de métodos para todoslos métodos incluidos en la interfaz.Una declaración de método dentro deuna interfaz es seguido por un puntoy coma, pero sin paréntesis, porqueuna interfaz no proporcionaimplementaciones para los métodosdeclarados dentro de ella.Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 36
  37. 37.  Todos los métodos declarados en unainterfaz son implícitamente públicos, porlo que el modificador public puede seromitido. Una interfaz puede contenerdeclaraciones constantes además dedeclaraciones de métodos. Todos losvalores constantes definidos en unainterfaz son implícitamente públicos,estáticos y finales (public, static y final).Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 37
  38. 38. 3.4 Clases abstractas Un empleado es una persona, ytambién lo es un alumno.Extendiendo nuestra jerarquía declases para incluir las clases Personay Alumno tenemos:Lina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 38PersonaEmpleado Alumno
  39. 39.  Tanto los alumnos como los empleadostienen nombres, y al introducir unasuperclase común se nos permite sacarel método getNombre a un nivelsuperior en la jerarquía de herencia. Añadimos otro método: getDescripcioncon el propósito de proporcionar unabreve descripción de la persona, como:un empleado con un sueldo de $50,000.00un alumno que estudia informáticaLina Ernestina Arias Hernández Instituto Tecnológico de la Laguna 39

×