Lic. Rosemary Torrico Bascopé

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:
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
Introducción 1 Puntos Clave –La orientación a objetos representa un cambio radical en los métodos tradicionales de creación de software –Los métodos tradicionales.
La Programación Orientado a Objetos
CURSO Programación Orientada a Objetos Parte 3 POLIMORFISMO
Informática II Prof. Dr. Gustavo Patiño MJ
Herencia y Polimorfismo
UNIVERSIDAD LATINA (UNILA) ENCAPSULACION Y HERENCIA
Aplicación del paradigma orientado a objetos
Diseño y programación de
PROGRAMACION ORIENTADA A OBJETOS
Programación Orientada a Objetos en Java
HERENCIA.
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
Herencia e Interfaces.
Medio de tele-comunicación
Modificadores.
Herencia y Polimorfismo en JAVA
Polimorfismo Lenguajes de Programación II Corporación Universitaria del Caribe CECAR.
Introducción a Java II.
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.
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.
Jerarquía de Clases: Herencia, Composición y Polimorfismo
Diagramas de Clase Angela Carrillo R..
Capitulo # 4 herencia PROGRAMACION III UNIVERSIDAD
Programación Orientada a Objetos
Programación orientada a objetos
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SEMANA DOS ORIENTACION A OBJETOS.
FACULTAD DE ESTUDIOS SUPERIORES ARAGON
Metodología de Programación Ayudantía 4 lelagos.ublog.cl 2008.
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.
Informatica II1 Clases Extendidas La clase extendida hereda los campos y métodos de la clase que ha sido extendida. La clase original se conoce como superclase.
1 Herencia en Java Agustín J. González Diseño y Programación Orientados a Objetos.
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.
Unidad 2.1: INTRODUCCIÓN A LA ORIENTACIÓN A OBJETOS.
Detalles Generales sobre Java
LE, EI, Profesor Ramón Castro Liceaga UNIVERSIDAD LATINA (UNILA) LENGUAJES DE PROGRAMACIÓN PARA EL DESARROLLO DE INTERFACES.
Programación orientada a objetos
:: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación.
Herencia y Clases Abstractas
:: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación.
CONCEPTOS.
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.
:: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación.
Métodos en Java. Estructura de un programa en Java ► La relación con la vida misma la podemos ver en el siguiente comentario: Imaginemos que dos clases.
RELACIONES ENTRE CLASES M.C. YOLANDA MOYAO MARTINEZ.
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.
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.
Prof. Manuel B. Sánchez. Es un mecanismo y uno de los pilares de la POO que permite definir nuevas clases a partir de otras preexistentes. La Herencia.
Programación I Clases. Paradigma POO La programación Orientada a objetos (POO) es una forma programar, más cercana a como expresaríamos las cosas en la.
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.
Transcripción de la presentación:

Lic. Rosemary Torrico Bascopé Herencia Lic. Rosemary Torrico Bascopé

Introducción La herencia es un mecanismo de abstracción consistente en la capacidad de derivar nuevas clases a partir de otras ya existentes. La herencia se usa cuando la clase padre y la clase hija comparten código común. De esta manera no es necesario repetir ese código común, ese código se transmite.

Herencia ... Así nos centramos sólo en las características de la clase hija que se está desarrollando. La herencia permite reutilizar código. El corazón de la herencia se basa en la idea la de la reutilización de código. La relacion entre dos clases cuando existe herencia “es un”, la clase derivada es una versión más específica que la clasae original.

Implementación Los lenguajes orientados a objetos proporcionan mecanismos para implementar la herencia: Sintáxis en Java: class clase_hija extends clase_padre { //contenido de la clase }

Herencia … La clase hija automáticamente hereda los métodos y atributos de la clase padre, pueden usarse como si hubieran sido declarados localmente en dicha clase.

Herencia … La herencia actúa en una dirección de la clase padre a la clase hija. Esto implica que los metodos o atributos de la clase hija no se pueden utilizar en la clase padre.

Herencia … Desde el punto de vista general la herencia puede ser simple o múltiple. En Java sólo es posible herencia simple. Los métodos y atributos que se heredan se controlan por mecanismos visibilidad. Private no se hereda Public si se hereda, …todos atributos y métodos deberían ser públicos…perder ventajas de encapsulamiento

Mecanismos de visibilidad Para conseguir que el comportamiento para clases foráneas sea privado pero par las clases derivadas sea público usaremos protected. Asi los atributos y métodos de la superclase etiquetados como protected son accesibles para las subclases

Algunas consideraciones Los constructores no se heredan, aunque tengan visibilidad pública. Los constructores se utilizan para incializar atributos, puede interesarnos que los atributos de la clase padre que se heredan, se incialicen cuando creemos un objeto de la clase hija.

Habrá alguna manera de incializar los atributos de la clase padre sin crear un objeto de la clase padre? En java es posible conseguirlo con la referencia super (lista de parametros); Donde lista de parametros especifica los parámetros del constructor de la super clase. En una jerarquía de herencia de varios niveles, super() siempre se refiere a la superclase inmediatamente superior. En realidad super ejecuta el cosntructor de la clase padre, pero sin crear un ejemplar de dicha clase.

Emascaramiento y sobreescritura Enmascaramiento Cuando una variable (atributo), se hereda y en la clase hija declaramos una nueva variable con el mismo identificador, la nueva variable es la que se utiliza. La variable de la clase padre sigue existiendo y es posible acceder a ella através del prefijo super

Sobreescritura y Sobrecarga La misma firma que un método heredado Cuando definimos un método con la misma firma(tipo de retorno,nombre y parámetros) que otro que se hereda, se dice que el nuevo método sobre escribe el método heredado. Sobrecarga El mismo identificador pero distinta firma La sobrecarga no esta asociado a la herencia.

Sobreescritura y sobrecarga Si pretendemos sobreescribir un método heredado con distinta firma (añadiendo un parámetro más) no tenemos sobreescritura sino sobrecarga. La finalidad de la sobre escritura es que podamos utilizar una sola firma para diferentes clases relacionadas por herencia. El nombre y el uso del método es el mismo para todas las clases pero el comportamiento esta totalmente adaptado a cada necesidad.

class ClaseX { protected int n=25; public void imprimir() System.out.println(“En la claseX, n= ”+n); } class ClaseY extends ClaseX protected int m=10; public void imprimir(); System.out.println(“En la claseY, m= ”+m); class Herencia { public static void main() ClaseX x= new ClaseX(); ClaseY y= new ClaseY(); x.imprimir(); y.imprimir(); }

Enlazamiento dinámico La sobreescritura implica determinar cuál es la versión del método a utilizar del método sobreescrito en tiempo de ejecución. En este caso, el compilador se asegura, por un lado de que el método existe, por otro verifica los tipos de los argumentos y del valor del retorno. Para obtener el enlazamiento dinámico, se mantiene para cada objeto una tabla con sus métodos y se decide en tiempo de ejecución la versión a ejecutar de cualquier método sobre escrito.

Algunas consideraciones Cuando se desarrolla una jerarquía de clases en que algún comportamiento está presente en todas ellas pero se materializa de forma distinta para cada una. Por ejemplo, pensemos en una estructura de clases para manipular figuras geométricas. Podríamos pensar en tener una clase genérica, que podría llamarse FiguraGeometrica y una serie de clases que extienden a la anterior que podrían ser Circulo, Poligono, etc.

Figuras geométricas

Algunas consideraciones Podría haber un método dibujar dado que sobre todas las figuras puede llevarse a cabo esta acción, pero las operaciones concretas para llevarla a cabo dependen del tipo de figura en concreto (de su clase). La acción dibujar no tiene sentido para la clase genérica FiguraGeometrica, porque esta clase representa una abstracción del conjunto de figuras posibles.

Clases Abstractas Es una clase que declara la existencia de métodos pero no la implementación de dichos métodos. Una clase abstracta puede contener métodos no abstractos pero al menos uno de los métodos debe ser declarado abstracto.  Para declarar una clase o un método como abstractos, se utiliza la palabra reservada abstract.  abstract class FiguraGeometrica {     . . .     abstract void dibujar();     . . . }

Implementacion de la subclase Circulo, que implementa el método abstracto class Circulo extends FiguraGeometrica { . . . void dibujar() { // código para dibujar Circulo . . . } }

Implementación de métodos abstractos La clase derivada se declara e implementa de forma normal, como cualquier otra. Sin embargo si no declara e implementan los métodos abstractos de la clase base (en el ejemplo el método dibujar) el compilador genera un error indicando que no se han implementado todos los métodos abstractos.

Referencias y objetos abstractos Se pueden crear referencias a clases abstractas como cualquier otra. FiguraGeometrica figura; Una clase abstracta no se puede instanciar, es decir, no se pueden crear objetos de una clase abstracta. El compilador producirá un error si se intenta: FiguraGeometrica figura = new FiguraGeometrica(); Una clase abstracta no tiene completa su implementación (algo abstracto no puede materializarse)

Referencias y objetos abstractos Utilizando el up-casting se puede escribir: FiguraGeometrica figura = new Circulo(. . .); figura.dibujar(); La invocación al método dibujarse resolverá en tiempo de ejecución y la JVM llamará al método de la clase adecuada. En nuestro ejemplo se llamará al método dibujar de la clase Circulo.

Up-casting Operación en que un objeto de una clase derivada se asigna a una referencia cuyo tipo es alguna de las superclases. class Empleado {     String nombre;     int numEmpleado , sueldo; …. } class Ejecutivo extends Empleado {     int presupuesto; Empleado emp = new Ejecutivo("Máximo Perez" , 2000); Cuando se realiza este tipo de operaciones, hay que tener cuidado porque para la referencia emp no existen los miembros de la clase Ejecutivo, aunque la referencia apunte a un objeto de este tipo.

Interfaces En Java una interface es una clase abstracta pura, es dcir una clase donde todos los métodos son abstractos (no se implementa ninguno). Permite al diseñador de clases establecer la forma de una clase (nombres de métodos, listas de argumentos y tipos de retorno, pero no bloques de código). Una interface puede también contener datos miembro, pero estos son siempre static y final. Una interface sirve para establecer un 'protocolo' entre clases. 

Declaración y uso Para crear una interface, se utiliza la palabra clave interface en lugar de class. La interface puede definirse public o sin modificador de acceso, y tiene el mismo significado que para las clases. Todos los métodos que declara una interface son siempre public.  interface nombre_interface  {     tipo_retorno nombre_metodo ( lista_argumentos ) ;     . . .  }

Ejemplo de declarcion de una Interface interface InstrumentoMusical {     void tocar();     void afinar();     String tipoInstrumento(); }

Una clase que implementa la Interface class InstrumentoViento extends Object implements InstrumentoMusical {     void tocar() { . . . };     void afinar() { . . .};     String tipoInstrumento() {} } class Guitarra extends InstrumentoViento {     String tipoInstrumento() {         return "Guitarra";     } }    La clase InstrumentoViento implementa la interface, declarando los métodos y escribiendo el código correspondiente. Una clase derivada puede también redefinir si es necesario alguno de los métodos de la interface. 

Referencias a Interfaces Es posible crear referencias a interfaces, pero las interfaces no pueden ser instanciadas. Una referencia a una interface puede ser asignada a cualquier objeto que implemente la interface. Por ejemplo: InstrumentoMusical instrumento = new Guitarra(); instrumento.play(); System.out.prinln(instrumento.tipoInstrumento()); InstrumentoMusical i2 = new InstrumentoMusical();//error.No se puede instanciar

Extensión de interfaces Las interfaces pueden extender otras interfaces y, a diferencia de las clases, una interface puede extender más de una interface. La sintaxis es: interface nombre_interface  extends nombre_interface  , . . . {     tipo_retorno nombre_metodo ( lista_argumentos ) ;     . . .  }