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

Documentos relacionados
Derechos de Acceso: COMPOSICION

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

Academia de computación de IE, ICA e ISISA. Unidad didáctica Programación Orientada a Objetos

Conceptos Básicos. Programación Orientada a Objetos 2

PROGRAMACIÓN EN C#.NET Programación Orientada a Objetos en C# Ing. Bruno López Takeyas

Diseño Basado en Componentes. Curso 2008 / 09

Curso de Java POO: Programación orientada a objetos

Clases Abstractas e Interfaces

Aplicaciones de Escritorio

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

Programación orientada a objetos

Tema: Herencia en C#.

PROGRAMACION ORIENTADA A OBJETOS EN C++

La Herencia: Teoría (1)

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

Java Avanzado Facultad de Ingeniería. Escuela de computación.

UAA-DSE Programación 2 / C++ Eduardo Serna-Pérez

Construcciones del Lenguaje Java

Taller de Programación I. Tema 06: Orientación al Objeto en Java (parte 2)

PROGRAMACIÓN ORIENTADA A OBJETOS

Universidad de Cantabria

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

Programación Orientada a Objetos (POO)

Herencia en Java. Agustín J. González Diseño y Programación Orientados a Objetos

PHP5 Orientado a Objetos

- Compilar y ejecutar programas en Java - Estructura básica de una clase - El comando javac - El comando java - Introducción al IDE de desarrollo

Concurso: Cuánto sabes de JAVA?

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

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

HERENCIA Y TIPOS. Articulo. Video Audio Altavoces. Amplificador

Java Básico. Polimorfismo. Copyright

18. Interfaces Declaración de una interfaz

Elabore el diagrama de clases en UML y la codificación de un programa para resolver los siguientes problemas:

Programación orientada a objetos. Capítulo 8 Mejora de las estructuras mediante herencia

Programación orientada a Objetos (POO) La POO está compuesta por una serie de elementos que se detallan a continuación.

Modulo 11. Clases y Objetos en Java

CONTENIDOS. La herencia permite: - Adoptar automáticamente características ya implementadas. Ahorro de tiempo y esfuerzo

Programación Orientada a Objetos en C#.NET CAPÍTULO 8 DELEGADOS. Ing. Bruno López Takeyas, M.C.

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

Guía práctica de estudio 04: Clases y objetos

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Interfaces y Clases Internas. ELO329: Diseño y Programación Orientados a Objetos

RMI. Aplicaciones Distribuidas

Programación Orientada a Objetos con Java

Introducción a la Orientación a Objetos

Programación Orientada a Objetos en C#.NET CAPÍTULO 7 POLIMORFISMO. Ing. Bruno López Takeyas, M.C.

Introducción a Java. Introducción a Java. Programación I

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

Objeto Clase Atributo / Método Encapsulamiento Mensaje Herencia Polimorfismo Encadenamiento Dinámico

Prueba N o 1. Programación II

INTRODUCCIÓN AL PARADIGMA DE LA PROGRAMACIÓN ORIENTADA A OBJETOS CON JAVA

Introducción a la Programación Orientada a Objetos

Tema 3. Programación orientada a objetos en Java (Parte 1)

Soluciones Ejercicios Tema 1

Programación Orientada a Objetos en Java

Las clases están compuestas por un conjunto de miembros. (datos y funciones) también se conocen como (atributos y métodos)

UNIVERSIDAD AUTONOMA DE QUERETARO Facultad de Informática

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

Programación Orientada a Objetos en Java

Capítulo 16. Diagrama de Clases UML

UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS TECNOLÓGICOS ESCUELA DE COMPUTACION

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

Programación Orientada a Objetos en C++

Variables. Una variable no es más que un nombre simbólico que identifica una dirección de memoria: vs.

INTRODUCCIÓN...9 CAPÍTULO 1. ELEMENTOS DE UN PROGRAMA INFORMÁTICO...11

UML a Java. Paquetes Ejemplo - Paquetes. Clases - Forma Básica. Clases Forma Avanzada- Curso de Arquitecturas de Software

UNIVERSIDAD AUTÓNOMA DE CHIAPAS LICENCIATURA EN SISTEMAS COMPUTACIONALES

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

Contenidos. Técnicas de POO. Abstracción. Abstracción. Programación Orientada a Objetos Facultad de Informática

Unidad I. Introducción al Lenguaje Java. Ing. José Luis Llamas Cárdenas

Elabore el diagrama de clases en UML y la codificación de un programa para resolver los siguientes problemas:

Universidad Salesiana de Bolivia

OOP y C++ Indice. 0.1 Análisis orientado a objetos(1/4) Análisis orientado a objetos(2/4) 0.- OOP 1.- INTRODUCCIÓN.

MOO - Metodología y Programación Orientada a Objetos

Programación orientada a objetos. Resumen de Temas Unidad 6: Polimorfismo y reutilización

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

INTERACCION ENTRE OBJETOS

Tema 3b: Estructura General de un programa en Java

2.2.- Paradigmas de la POO

Clases Abstractas e Interfaces

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

INTRODUCCION A LA PROGRAMACION EN JAVA

Patrones de Diseño. Patrón de comportamiento Iterator. Técnicas de Programación - Curso 2007/08

PRÁCTICA No 4 POO Encapsulación. El alumno conocerá los principios de la encapsulación, y el uso de constructores para la inicialización de datos

Clases y Objetos en Java. ELO329: Diseño y Programación Orientados a Objetos

Estructuras de Datos y Algoritmos. Primeros ejemplos de TDA

Programación Orientada a Objetos. Resumen de Temas Unidad 3: Constructores y destructores

HOJA DE EJERCICIOS 3 HERENCIA ENTRE CLASES Y POLIMORFISMO DE MÉTODOS

Forma Básica Clase Java

Programación Orientada a Objetos

Orientación a Objetos en Java

4.1 - OBJETOS Y CLASES

Tema 1: Principios de Java

Transcripción:

INACAP Universidad Tecnológica de Chile Sede Santiago Centro Taller de Programación I Curso Java J2SE Tema 10: Herencia en Java Ing. Manuel López Ramos (versión 1)

Parte I Qué es la herencia entre clases?

Herencia entre clases La herencia entre clases consiste en una relación especial que conecta dos o más conceptos muy parecidos o similares entre sí, dentro de un problema. Permite que una clase tome todos los atributos y métodos de otra automáticamente. Con esto, la herencia evita tener que redefinir atributos y métodos similares en varias clases parecidas.

Herencia entre clases La herencia se conoce con el nombre de relación de generalización. Se indica en el diagrama de clases de UML utilizando una línea más una punta de flecha blanca. La clase que tiene la punta de flecha se conoce con el nombre de clase padre, superclase o clase base. La clase al lado opuesto de la flecha se conoce con el nombre de clase hija, subclase o clase derivada. Clase padre o superclase Clase hija o subclase

Herencia entre clases La herencia, o relación de generalización, puede clasificarse según la cantidad de clases padres que posee cierta clase, en los siguientes grupos: a) herencia simple: aquella donde una clase hija sólo tiene una clase padre directa. b) herencia múltiple: aquella donde una clase hija puede tener dos ó más clases padres.

Herencia entre clases Debido a la relación de generalización, una clase base entregará automáticamente todos sus atributos y métodos a sus clases hijas, como se puede observar en el siguiente diagrama de clases de UML. En este caso, la clase Tiburón recibirá todos los atributos y métodos (públicos y privados) de la clase base y agregará 3 atributos nuevos y 2 métodos nuevos.

Herencia entre clases La relación de generalización puede leerse utilizando la palabra "es". Las relaciones del ejemplo entonces podrían leerse como: "Un Mineral es un Objeto" "Un Animal es un Objeto" "Un Ave es un Animal" "Un SerHumano es un Animal", etc.

Herencia entre clases Las relaciones entre clases pueden efectuarse en Java, utilizando la palabra clave extends. public class Animal { public char sexo;...... public Animal() { }... } public class Tiburon extends Animal { private int numaletas;...... public Tiburon() { }... } La palabra clave extends puede leerse como "es". La relación entonces podría leerse como "Un tiburón es un Animal".

Herencia entre clases Ejercicio: desarrollar el diagrama de clases siguiente:

Parte II Acceso a atributos en herencia

Acceso a atributos En la herencia en Java, el acceso a atributos sigue reglas específicas: La clase hija puede acceder y usar cualquier atributo público de la clase padre. La clase hija no puede acceder ni usar atributos privados de la clase padre. Las reglas anteriores causan un problema, ya que no se pueden crear atributos no visibles por el programa que puedan ser usados por la clase hija -> problema del encapsulamiento en herencia. Para crear atributos privados en la clase padre que sí puedan ser utilizados por las clases hijas se define un nuevo tipo de acceso a datos, denominado como acceso protegido (protected). En el diagrama de clases de UML, el acceso protegido se simboliza con un símbolo de gato (#).

Acceso a atributos En el diagrama de clases de UML, el acceso protegido se simboliza con un símbolo de gato (#).

Acceso a atributos En el diagrama de clases de UML, el acceso protegido se simboliza con un símbolo de gato (#). public class SerVivo { protected byte edad; private String nombre; } public SerVivo() { }...

Acceso a atributos En el diagrama de clases de UML, el acceso protegido se simboliza con un símbolo de gato (#). public class SerVivo { protected byte edad; private String nombre; } public SerVivo() { }... public class Mamifero extends SerVivo { protected short numpatas; protected boolean usapelaje; private String especie; } public Mamifero() { }...

Acceso a atributos Ejercicio: implementar el diagrama de UML mostrado en la diapositiva anterior. public class SerVivo { protected byte edad; private String nombre; } public SerVivo() { }... public class Mamifero extends SerVivo { protected short numpatas; protected boolean usapelaje; private String especie; } public Mamifero() { }...

Parte III Conceptos adicionales

Conceptos adicionales La generalización entre clases presenta una serie de conceptos adicionales: a) sobrecarga de métodos (method overloading) b) sobreescritura de métodos (overriding) c) métodos y clases abstractas (abstract methods/classes) d) polimorfismo (polymorphism) e) interfaces (interfaces) f) implementación de interfaces sobre clases (interface implementation) g) uso directo de métodos de la clase padre (mediante el uso de super)

Sobrecarga de métodos La sobrecarga (overloading) consiste en utilizar varias veces el mismo nombre para diferentes métodos de una misma clase. No se aplica en herencia, sino que sólo dentro de una misma clase. Los métodos sobrecargados (overloaded methods) deben tener el mismo nombre, pero diferente cantidad y/o tipos de parámetros de entrada.

Sobrecarga de métodos Ejercicio: implementar la clase de Java con sus métodos sobrecargados. Luego, pruebe los métodos llamándolos e imprimiendo los resultados.

Sobreescritura de métodos La sobreescritura (overriding) consiste en la reimplementación de un método de la clase padre en alguna de las clases hijas. "Reimplementar" significa que el método conserva su nombre, parámetros de entrada y tipo de retorno, pero que su código interno será diferente. Debe ser aplicado en herencia y en implementación de interfaces.

Sobreescritura de métodos Ejercicio: implementar la jerarquía de clases mostrada en el diagrama de UML. Nótese que el método comer(), de la clase Animal, se reimplementa (sobreescribe) en las clases hijas Gato y Jirafa.

Métodos y clases abstractas Los métodos abstractos (abstract) son aquellos métodos que sólo declaran su nombre, tipo de retorno y parámetros, pero que no presentan un bloque definido de código a ejecutar. Se utilizan para definir métodos que deberán implementarse obligatoriamente dentro de las clases hijas en una jerarquía de herencia, pero donde el diseñador no sabe a ciencia cierta cuál debería ser el código correcto para dicho método. Al extender una clase con métodos abstractos, éstos deberán definirse completamente dentro de las clases hijas.

Métodos y clases abstractas Por extensión, una clase abstracta es aquella que posee uno o varios métodos abstractos. Debido a que una clase abstracta no tiene definidos todos sus métodos, no se puede instanciar una clase abstracta directamente. Si se quiere instanciar una clase abstracta, se deberá crear una nueva clase que herede las propiedades de la clase abstracta y que implemente todos sus métodos. Esta última clase sí se podrá utilizar para crear objetos para el programa. Se define como: public abstract class <nombreclase> { <métodos_abstractos> }

Métodos y clases abstractas Ejercicio: implementar la jerarquía de clases mostrada en el diagrama de UML. Nótese que el método comer(), de la clase Animal, está declarado como abstract, al igual que la clase Animal.

Polimorfismo El polimorfismo es uno de los mecanismos más potentes que ofrece un lenguaje orientado a objetos. Consiste en que un método sobreescrito varias veces en las clases hijas aplica automáticamente la rutina correcta sobre un objeto proveniente de una de las clases hijas, cuando éste objeto se almacena bajo la identidad de una variable de la clase padre. Permite implementar rutinas con código reducido sobre una gran cantidad de objetos almacenados como objetos genéricos.

Polimorfismo Ejercicio: implementar la jerarquía de clases mostrada en el diagrama de UML. Aplique polimorfismo sobre el código de cálculo de sueldos solicitado.

Interfaces Una interfaz es una clase especial que sólo posee métodos abstractos. Es un caso especial de clase abstracta, que tampoco puede ser instanciada. Para definir una interfaz, se utiliza el siguiente modelo: public interface <nombreinterfaz> { <método_abstracto1>(); <método_abstracto2>();...... }

Aplicación de interfaces a clases de Java Una interfaz se aplica a otra clase, mediante la palabra clave implements, como se muestra a continuación: public class A implements <nombreinterfaz> {...... } A una clase de Java se le pueden aplicar una o varias interfaces, separadas por coma. Con esto se puede aplicar una forma de herencia múltiple. public class A implements <interfaz1>, <interfaz2>,... {...... }

Polimorfismo Ejercicio: implementar la jerarquía de clases mostrada en el diagrama de UML. Aplique implementación de interfaces.

Parte IV Ejercicios adicionales

Ejercicios adicionales Ejercicio 1: implementar la jerarquía de clases mostrada en el diagrama de UML. Aplique los conceptos vistos en la clase.

Ejercicios adicionales Ejercicio 2: implementar la jerarquía de clases mostrada en el diagrama de UML. Aplique los conceptos vistos en la clase.

Ejercicios adicionales Ejercicio 3: implementar la jerarquía de clases mostrada en el diagrama de UML.

Ejercicios adicionales Ejercicio 4: implementar la jerarquía de clases mostrada en el diagrama de UML.

Ejercicios adicionales Ejercicio 5: implementar la jerarquía de clases mostrada en el diagrama de UML.

Ejercicios adicionales Ejercicio 6: implementar la jerarquía de clases mostrada en el diagrama de UML.

Ejercicios adicionales Ejercicio 7: implementar la jerarquía de clases mostrada en el diagrama de UML. Nótese que aquí se solicita crear una interfaz gráfica de ventanas basada en Java Swing.