Post on 22-Dec-2015
description
Herencia y PolimorfismoHerencia y Polimorfismo
Ing. Rolando Steep Quezada MartínezIng. Rolando Steep Quezada Martínez
rqm@upnorte.edu.perqm@upnorte.edu.pe
Programación Básica en Java y Programación Orientada a Objetos Programación Básica en Java y Programación Orientada a Objetos
Copyright © 2007, Universidad Privada del Norte S.A.C. – Ing. Rolando Steep Quezada Martínez8-2
HerenciaHerencia
• Consiste en crear una clase nueva, como un tipo de una clase existente. La clase nueva toma la forma de una clase existente y le agrega código (sin modificar la clase existente).
• Reuso de código.
• El compilador es el que hace la mayor parte del trabajo.
• Es una parte integral de Java.
Copyright © 2007, Universidad Privada del Norte S.A.C. – Ing. Rolando Steep Quezada Martínez8-3
Herencia en JavaHerencia en Java
Copyright © 2007, Universidad Privada del Norte S.A.C. – Ing. Rolando Steep Quezada Martínez8-4
Herencia y PolimorfismoHerencia y Polimorfismo
• Lo más interesante de la herencia es la relación entre la clase derivada y la clase base: “la clase derivada es un tipo de la clase base” (es-un o es-como-un). Java soporta esta relación.
• Upcasting es la conversión de una referencia a un objeto de la clase derivada, en una referencia a un objeto de la clase base.
• El upcasting es seguro: la clase derivada es un super conjunto de la clase base, podría contener más métodos que la clase base, pero seguro contiene los métodos de la clase base.
Copyright © 2007, Universidad Privada del Norte S.A.C. – Ing. Rolando Steep Quezada Martínez8-5
Copyright © 2007, Universidad Privada del Norte S.A.C. – Ing. Rolando Steep Quezada Martínez8-6
Práctica 5Práctica 5
Objetivos
– Crear jerarquías de clases para facilitar la reutilización de código.
– Identificar el escenario para la aplicación del polimorfismo.
Copyright © 2007, Universidad Privada del Norte S.A.C. – Ing. Rolando Steep Quezada Martínez8-7
Copyright © 2007, Universidad Privada del Norte S.A.C. – Ing. Rolando Steep Quezada Martínez8-8
Clase AbstractaClase Abstracta
• Una clase abstracta define una interfaz común para los diversos miembros de una jerarquía de clases.
• La clase abstracta contiene métodos que se definirán en las subclases.
• Todas las clases de la jerarquías pueden usar la misma interfaz gracias al polimorfismo
Copyright © 2007, Universidad Privada del Norte S.A.C. – Ing. Rolando Steep Quezada Martínez8-9
Clases Abstractas en JavaClases Abstractas en Java
Copyright © 2007, Universidad Privada del Norte S.A.C. – Ing. Rolando Steep Quezada Martínez8-10
InterfaceInterface
• Es una clase totalmente Abstracta:
– Todos su métodos son abstractos (public abstract)– Todos sus variables son constantes (public static final)
• En JAVA, una interface es una colección de definiciones de métodos sin cuerpo y de declaraciones de constantes de tipo primitivo, agrupadas bajo un nombre.
• Una interface es un tipo de dato nuevo.
• Una interface establece qué debe hacer la clase que la implementa, sin especificar el cómo.
• Las interfaces definen un tipo de dato, por lo tanto es posible declarar variables con el nombre de la interface.
Copyright © 2007, Universidad Privada del Norte S.A.C. – Ing. Rolando Steep Quezada Martínez8-11
Interfaces en JavaInterfaces en Java
Copyright © 2007, Universidad Privada del Norte S.A.C. – Ing. Rolando Steep Quezada Martínez8-12
Clase InternaClase Interna
• Una clase interne (inner class) es una clase anidada, definida en el cuerpo de otra clase o en el cuerpo de un método.
• Respetan las relaciones entre dos clases.
• Existen 4 tipos:
Definidos en la Clase• Static (estáticas)• Member (miembro)
Definidos en un método
• Local (local)• Anonymous (anónimas)
Copyright © 2007, Universidad Privada del Norte S.A.C. – Ing. Rolando Steep Quezada Martínez8-13
Clase Interna. MiembroClase Interna. Miembro
• Son declaradas dentro del cuerpo de otra clase
• El anidamiento esta permitido
• Pueden acceder a las variables de su clase contenedora y de alguna clase incluida.
• Las clases interna no pueden contener declaraciones estáticas.
Copyright © 2007, Universidad Privada del Norte S.A.C. – Ing. Rolando Steep Quezada Martínez8-14
Clase Interna. Estática (anidada)Clase Interna. Estática (anidada)
• Las clases internas pueden declararse static, comúnmente denominadas clases anidadas.
• Las clases anidadas no tienen acceso a la referencia implícita.
Copyright © 2007, Universidad Privada del Norte S.A.C. – Ing. Rolando Steep Quezada Martínez8-15
Clase Interna. LocalClase Interna. Local
• Esta declarada dentro del bloque de código de un método.
• Todos los parámetros finales (constantes) declarados en el bloque son accesibles por los métodos de la clase interna.
Copyright © 2007, Universidad Privada del Norte S.A.C. – Ing. Rolando Steep Quezada Martínez8-16
Clase Interna. AnónimaClase Interna. Anónima
• Son clases internas que no tiene un nombre definido.
• No pueden ser instanciadas.
• Se definen en un método de la clase externa.
Copyright © 2007, Universidad Privada del Norte S.A.C. – Ing. Rolando Steep Quezada Martínez8-17
Práctica 6Práctica 6
Objetivos
– Hacer uso de abstracciones para la construcción de aplicaciones extensibles.
Copyright © 2007, Universidad Privada del Norte S.A.C. – Ing. Rolando Steep Quezada Martínez8-18
Copyright © 2007, Universidad Privada del Norte S.A.C. – Ing. Rolando Steep Quezada Martínez8-19
Enumerated Types (enums) Enumerated Types (enums)
• Enums son Comparable y Serializables. Las constantes de Enum deberían ser nombradas de manera similar que las constantes. Enums son básicamente un nuevo tipo de Clase.
• Ya que es una clase puede contener métodos
Copyright © 2007, Universidad Privada del Norte S.A.C. – Ing. Rolando Steep Quezada Martínez8-20
Práctica 7Práctica 7
Objetivo
– Hacer uso del tipo Enum para la definición de constantes.
Copyright © 2007, Universidad Privada del Norte S.A.C. – Ing. Rolando Steep Quezada Martínez8-21
Copyright © 2007, Universidad Privada del Norte S.A.C. – Ing. Rolando Steep Quezada Martínez8-22
ResumenResumen
• La herencia permite extender la funcionalidad de una clase sin modificarla siquiera.
• El polimorfismo es la capacidad de los objetos de suplantar a todos sus subtipos.
• Un método polimórfico es aquel que trabaja con la clase base de una jerarquía o con una interface.
• Las clases adquieren nuevas capacidades al implementar una interface.
• Las interfaces resuelven el problema de la herencia múltiple en Java.
• Una interfaz es una clase completamente abstracta.• Los tipos enumerados son un tipo especial de clase que
ofrecen mayor control sobre valores de selección constantes.