Herencia. Introducción La idea básica es poder crear clases basadas en clases ya existentes. Cuando heredamos de una clase existente, estamos re-usando.

Slides:



Advertisements
Presentaciones similares
Curso de java básico (scjp)
Advertisements

FUNDAMENTALS OF THE JAVA PROGRAMMING LANGUAGE
Curso de Java Capitulo 7: Continuación Poo Profesor:
Curso de Java Capitulo 7: Conceptos sobre poo Profesor:
Definición de Clases y Variables de referencia.
POLIMORFISMO UNIDAD 4.
Herencia en C#.
Fundamentos de la programación orientada a objetos
Lenguaje de programación Java
Clases Extendidas La clase extendida hereda los campos y métodos de la clase de la cual extiende. La clase original se conoce como superclase y la clase.
Herencia simple y multiple
Arquitectura CLARO-TECNOTREE
Conceptos más avanzados de Programación Orientada a Objetos Programación 2005 Licenciatura de Lingüística y Nuevas Tecnologías.
UNIVERSIDAD LATINA (UNILA) ENCAPSULACION Y HERENCIA
Aplicación del paradigma orientado a objetos
Diseño y programación de
PROGRAMACION ORIENTADA A OBJETOS
Encapsulamiento y Abstracción
Abstracción de Datos La abstracción es un recurso fundamental en la programación orientada a objetos y está además fuertemente ligado a reusabilidad.
Programación Orientada a Objetos en Java
HERENCIA.
Herencia e Interfaces.
Medio de tele-comunicación
Herencia y Polimorfismo en JAVA
Polimorfismo Lenguajes de Programación II Corporación Universitaria del Caribe CECAR.
Introducción a Java II.
Lic. Rosemary Torrico Bascopé
Abstracción de los datos y Orientación a Objeto Clase 13.
Clases y objetos La unidad fundamental de programación OO son las clases. Conjunto de métodos y semántica Qué se va a hacer POO Clase: que define la implementación.
Tema 6: Clases Antonio J. Sierra.
Tema 10: Interfaces Antonio J. Sierra.
1 Herencia en Java Agustín J. González Diseño y Programación Orientados a Objetos.
1 Interfaces Agustín J. González ELO Introducción En C++ se permite la herencia múltiple; es decir, es posible derivar una clase de dos o más clases.
UNIDAD 2 CLASES Y OBJETOS. CLASE Elementos cabecera y cuerpo de la clase. Cabecera: aporta información fundamental sobre la clase en sí y constituye de.
Diagramas de Clase Angela Carrillo R..
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SEMANA DOS ORIENTACION A OBJETOS.
Herramientas de polimorfismo y herencia en C++
UNIDAD VI Recursos esenciales de Java LSC. Natalia Rodríguez Castellón.
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6
Metodología de Programación Ayudantía 5 lelagos.ublog.cl 2009.
Interfaces y Clases Internas ELO329: Diseño y Programación Orientados a Objetos.
Interfaces ELO329: Diseño y Programación Orientados a Objetos.
1 Herencia en Java Agustín J. González Diseño y Programación Orientados a Objetos.
1 Interfaces y Clases Internas ELO-329: Diseño y programación orientados a objetos Agustín J. González.
1 Interfaces y Clases Internas ELO-329: Diseño y programación orientados a objetos Agustín J. González.
Unidad 2.1: INTRODUCCIÓN A LA ORIENTACIÓN A OBJETOS.
Funciones y Clases Amigas (Friend)‏ Miembros Estáticos (Static)
Detalles Generales sobre Java
Programación orientada a objetos
Polimorfismo y Métodos Virtuales Agustín J. González ELO329.
Interfaces y Clases Internas
:: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación.
Herencia y Clases Abstractas
Universidad Tecnológica de Izúcar de Matamoros Programa Educativo: Tecnologías de la Información Asignatura: Base de datos para aplicaciones Tema: Base.
Programación orientada a objetos Capítulo 9 Algo mas sobre herencias.
Tipo de relación entre clases Es uno de los aspectos que distinguen el paradigma de orientación a objetos frente a otros paradigmas. Mecanismo que,
Clases “ Es una Abstracción de un elemento del mundo real ”
Herencias Conceptos básicos i
Programación orientada a objetos La programación orientada a objetos o POO (OOP según sus siglas en inglés) es un paradigma de programación que usa objetos.
Programación Orientada a Objetos Unidad 5. Los objetos son entidades que combinan estado Contiene toda la información denominados atributos REPASO Cada.
Estructuras de control selectivas Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión Práctica 3.
:: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación.
Reutilización de código Elementos básicos del lenguaje Java Definición de variables, expresiones y asignaciones Fundamentos de Programación Departamento.
:: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación.
Herencia y Clases Abstractas Reutilización de código y código genérico ELO329: Diseño y Programación Orientados a Objetos.
Programación en Java Introducción a Java. Reseña histórica Surge en 1991 por Sun Microsystems Desarrollado para electrodomésticos Se buscaba un código.
Prof. Manuel B. Sánchez.  El origen del término polimorfismo es simple: proviene de las palabras griegas poly (muchos) y morphos (forma) multiforme.
Concepto de Tipo y Subtipo Diseño e Implementación Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 10 Versión.
Programación en Java Introducción a Java. Reseña histórica Surge en 1991 por Sun Microsystems Desarrollado para electrodomésticos Se buscaba un código.
Herencia y Clases Abstractas
Transcripción de la presentación:

Herencia

Introducción La idea básica es poder crear clases basadas en clases ya existentes. Cuando heredamos de una clase existente, estamos re-usando código (métodos y campos). Podemos agregar métodos y variables para adaptar la clase a la nueva situación. Java también permite consultar por la estructura de una clase (cuáles son sus métodos y variables). A esto se le llama reflexión.

Introducción (cont.) La herencia la identificamos cuando encontramos la relación es-un entre la nueva clase y la ya existente. Un estudiante es una persona. La clase ya existente se le llama superclase, clase base, o clase padre. A la nueva clase se le llama subclase, clase derivada, o clase hija.

Sobremontado de métodos (overriding) En la clase derivada podemos sobremontar (override) métodos, lo cual corresponde a redefinir el método en la clase derivada. Si aún deseamos acceder la método de la clase base, lo podemos hacer utilizando la palabra super como referencia a los atributos del padre. Notar que también usamos esta palabra reservada para invocar constructores de la clase base.

Ejemplo: Los gerentes también son empleados Supongamos que los gerentes reciben bonos por su desempeño. Luego su salario será aquel en su calidad de empleado más los bonos que le correspondan. Jerarquía de clases:

Polimorfismo Hay varias formas de polimorfismo: – Cuando invocamos el mismo nombre de método sobre instancias de distinta clase – cuando creamos múltiples constructores – cuando vía subtipo asignamos una instancia de una subclase a una referencia a la clase base. Cuando creamos una clase derivada, gracias a la relación es-un podemos utilizar instancias de la clase derivada donde se esperaba una instancia de la clase base. También se conoce como principio de subtitución.

Polimorfismo: Ejemplo Sea: class Employee {..... } class Manager extends Employee {.... } – Employee e; e=new Employee(...); // instancia e=new Manager(..); // OK. Subtitución En el primer caso a través de e tenemos acceso a todo lo correspondiente a un Employee. En el segundo caso tenemos acceso a todo lo correspondiente a Employee, pero con la implementación de Manager. Al revés no es válido porque toda referencia a Manager debe disponer de todos los campos.

Ligado Dinámico Es importante entender qué método es usado al invocar a un nombre que se puede referir a instancias de distinta clase. Al momento de la compilación el compilador intenta resolver el método que corresponde según su nombre y parámetro. Si la superclase y la clase base tienen definido el mismo método ¿Cuál se llama?. Si el método en la clase declarada para la variable no es privado, static, o final, se invocará en forma dinámica. Esto es, se invocará el método definido según el objeto referenciado por el nombre y no según la declaración del nombre. Por ello, si una clase derivada redefine el mismo método, éste será invocado para sus instancias. El ligado dinámico se resuelve a tiempo de ejecución.

Ligado Dinámico (cont.) Gracias el Ligado dinámico es posible hacer programas fácilmente extensibles. Creamos una clase derivada y redefinimos los comportamientos que deseamos. No se requiere recompilar las clases existentes. Esto es usado intensamente cuando usamos clases predefinidas en el lenguaje. Si deseamos impedir que una de nuestras clases se use como base, la declaramos como final. Final class Manager extends Employee {... } Si un método es final, ninguna subclase puede sobre-montarlo (redefinirlo). El ligado dinámico es más lento que el estático.

“Casteo”: Cambio de tipo forzado ¿Cómo podemos acceder a los métodos definido en una clase derivada pero no en la base? Se debe hacer un cambio de tipo forzado. Por ejemplo: – Employee e= new Manager(..); – Con e no podemos acceder a los métodos presentes sólo en Manager. – Si queremos hacerlo, usamos: – Manager m = (Manager) e; – Con m sí podemos invocar los métodos de Manager

“Casteo”: Cambio de tipo forzado (cont.) ¿Cómo sabemos que e aloja una instancia de Manger? Lo podemos preguntar con el operador instance of. – if (e instance of Manager) { – m = (Manager) e; –..... – }

Clases abstractas Llevando la idea de herencia a un extremo podemos pensar en buenas clases para representar un grupo pero que no tienen instancias propias. – Por ejemplo Forma como clase base de Triangulo, Circulo, Cuadrado. Forma puede indicar todo el comportamiento válido para una forma pero no puede instanciarse por si mismo.

Clases abstractas (cont.) En ente caso Forma debe declararse como clase abstracta por tener al menos un método declarado pero no implementado. – public abstract class Forma { –... – public abstract double area(); –.. – } ver PersonTest.javaPersonTest.java

Clase Object: Nivel máximo de la jerarquía de clases Toda clase en Java hereda en su jerarquía máxima de la clase Object.Object Ésta no requiere ser indicada en forma explícita. Esto permite que podamos agrupar en forma genérica elementos de cualquier clase, por ejemplo en un arreglo de Object. En esta clase hay métodos como equals() y toString() que en la mayoría de los casos conviene sobremontar.

Programación genérica/diseño de patrones Las facilidades que ofrece el diseño orientado a objetos y la programación orientada a objetos permiten ofrecer soluciones a casos genéricos. La idea es poder crear código útil para cualquier clase específica. Por ejemplo podemos definir una clase con métodos utilitarios como: static int find (Object [ ] a, Object key) { int i; for (i=0; i < a.length; i++) if (a[i].equals(key) return i; // encontrado return -1; // no exitoso }

Interfaces Las interfaces son una manera de describir qué debería hacer una clase sin especificar el cómo. Son como las clases Abstractas, pero llevadas a su maxima expresion (No existe implementacion de metodos)

Interfaces(Cont) Una interfaz es la descripción de algún servicio que posteriormente alguna clase puede implementar. Por ejemplo si un alumno sabe alemán, tenemos idea de lo que él es capaz. Además de ser persona (herencia) el cumple la interfaz “interprete de alemán”. También podríamos decir que él es un “interprete de alemán” (nuevamente herencia). En Java cada clase puede tener sólo una clase base (herencia no múltiple), por ello Interfaces son usadas para abordar casos como el ejemplo previo. Instancia de la clase que implementa una Interfaz pueden ser usados donde se espera una instancia de la interfaz. Es similar a instancias de una subclase

Interfaces (Cont) No se permite crear objetos instancias de un Interfaz. Por la misma razón que no se puede crear instancias de clases abstractas. New InterfazX(); Todos los métodos se una Interfaz son públicos. No es necesario indicarlo. Pueden incluir constantes. En este caso son public static y final. Aspectos Sintácticos: Definición de una interfaz: public interface Comparable { int compareTo (Object other); } Implementación de una interfaz: class Employee implements Comparable {.... public int compareTo(Object other) {....// implementación }

La clase Class La máquina virtual Java mantiene información sobre la estructura de cada clase. Ésta puede ser consultada en tiempo de ejecución. – Employee e = new Employee(...); –... – Class cl=e.getClass(); La instancia de Class nos sirve para consultar datos sobre la clase, por ejemplo su nombre. – System.out.println(e.getClass().getName()+” “ +e.getName()); // genera por ejemplo: – Employee Harry Hacker

La Clase Class (Cont) Ver la clase Class. Nos permite obtener toda la información de una clase, su clase base, sus constructores, sus campos datos, métodos, etc.Class Esta funcionalidad normalmente es requerida por constructores de herramientas más que por desarrolladores de aplicaciones.