Programación Orientada a Objetos en Java



Documentos relacionados
2.2.- Paradigmas de la POO

GUIA PROGRAMACIÓN ORIENTADA A OBJETOS

Universidad de Cantabria

POLIMORFISMO "una interfaz, múltiples métodos".

Curso de Java POO: Programación orientada a objetos

Programación Orientada a Objetos con Java

Introducción a la Programación Orientada a Objetos

Tema 3: Herencia en C++ Programación Orientada a Objetos Curso 2008/2009 Begoña Moros Valle

PHP y MySQL. Inicio: - Herencia - Palabra clave Final - Polimorfismo - Type Hinting - Abstracción de clases

Programación en Java. Programación en OO

Fundamentos de Programación Orientada a Objetos ( POO ) - Parte 3 Desarrollo de Software

Programación Orientada a Objetos en Java

Conceptos. ELO329: Diseño y Programación Orientados a Objetos. ELO 329: Diseño y Programación Orientados a Objetos

Clases y Objetos. Informática II Ingeniería Electrónica

Curso de Python Inicial

Curso de Doctorado: Tecnologías de Objetos

Notación UML para modelado Orientado a Objetos

Clases abstractas e interfaces

Programación orientada a objetos

Pilares de la Orientación a Objetos

Diseño orientado a los objetos

EXAMEN FINAL Metodología y Programación Orientada a Objetos. Curso Cuatrimestre de otoño. 17 de Enero de 2011

CONTENIDOS. 1. Completar el ejemplo de Herencia: Superclase Persona-Subclase Alumno

1. Qué tipos de relación hay entre las siguientes clases?

Definición de clases: Herencia, polimorfismo, ligadura dinámica

UNIVERSIDAD CATOLICA DE COLOMBIA FACULTAD DE INGENIERIA DE SISTEMAS

Tutorial de UML. Introducción: Objetivos: Audiencia: Contenidos:

Capítulo 6. Introducción a la POO

2.1. Introducción al lenguaje Java

Patrones de Diseño Orientados a Objetos 2 Parte

PROGRAMACIÓN ORIENTADA A OBJETOS Master de Computación. II MODELOS y HERRAMIENTAS UML. II.2 UML: Modelado de casos de uso

DIAGRAMA DE CLASES EN UML

Diagrama de Clases. Diagrama de Clases

Estructura de las Aplicaciones Orientadas a Objetos Herencia y Polimorfismo

Herencia. 3.- Herencia. Declaración de una clase derivada en Delphi. Jerarquía de clases

Introducción a la Programación Orientada a Objetos (POO) Introducción a la Programación Orientada a Objetos (POO)

Índice 1 Instalación de la herramienta 2 Descripción de la herramienta 2 Arranque de la aplicación 3 Proyecto 4 Diagrama de clases 5

CONCEPTOS FUNDAMENTALES DE LA ORIENTACION A OBJETOS

INDICE Uso de la composición (I). Preservación de la ocultación Utilización de miembros heredados (I). Atributos...

Relaciones entre clases: Diagramas de clases UML

DCU Diagramas de casos de uso

Diagramas de Clase en UML 1.1

Modelado Estático Avanzado (Generalizaciones) Diseño de Software Avanzado Departamento de Informática

PROGRAMACIÓN ORIENTADA A OBJETOS

2. Conceptos básicos Abstracción La abstracción como un proceso mental natural La abstracción en el desarrollo de software

Lenguajes de Programación Curso Práctica 4. Herencia. Utilización de interfaces y clases abstractas. 1. Interfaces Clases abstractas 2

El lenguaje de programación Java

POO en Java IV: Herencia (Parte 1)

CLASE 10: MÁS PATRONES. Universidad Simón Bolívar. Ing. de Software. Prof. Ivette C. Martínez

Patrones para persistencia (I) Ingeniería del Software II

Partes de un programa en Java. A. Ejemplo de un Programa en Java /* Programa Ejemplo de Java: Muestra una Ventana Archivo: Ejemplo1.

Inteligencia Artificial II. Razonamiento con ontologías

class Nombre_Clase extends Nombre_SuperClase { cuerpo de la clase extendida }

Programación Orientada a Objetos

Tema: Patrones de Diseño.

Java: Clases Abstractas e Interfaces

19. Packages o paquetes

Introducción a la programación orientada a objetos

TEMA 8: DIAGRAMA DE CLASE EN UML

ESCUELA DE INGENIERÍA DE SISTEMAS DEPARTAMENTO DE COMPUTACIÓN PROGRAMACIÓN 2 PRÁCTICA DE LABORATORIO 7 Herencia y Composición en POO

5.1. Organizar los roles

INTRODUCCIÓN A LOS SISTEMAS GESTORES DE BASE DE DATOS

Yalù Galicia Hernàndez. Yalú Galicia Hdez. (FCC/BUAP)

Excepciones. Gonzalo Méndez - Dpto. Ingeniería de Software e Inteligencia Artificial. Excepciones

Patrones de Diseño. Patrón estructural Composite. Técnicas de Programación - Curso 2008/09 (Esther Guerra Sánchez)

Índice.

Tema 2. Técnicas básicas de POO. Técnicas de Programación - Curso 2007/08

9. Objetos y clases Clases

Prácticas de Programación

Tema 1. Conceptos de Java para Estructuras de Datos: interfaces y programación genérica

Patrones Creacionales Builder. Patrones Creacionales Abstract Factory. Patrones Creacionales Singleton. Patrones Creacionales Prototype

FUNDAMENTOS DE PROGRAMACIÓN. SEPTIEMBRE 2005

Capítulos 2 y 5: Modelación con UML y Modelo Objeto

Correspondencias entre taxonomías XBRL y ontologías en OWL Unai Aguilera, Joseba Abaitua Universidad de Deusto, EmergiaTech

Introducción al UML. Domingo Hernández H. Escuela de Ingeniería de Sistemas Departamento de computación

Capítulo 10. Subtipos y Herencia.

Instructivo: Diagnóstico Interno y Externo por análisis FODA

Patrones de diseño. Patrón básico Handler. Técnicas de Programación - Curso 2008/09 (Esther Guerra Sánchez)

Java Inicial (20 horas)

Introducción. Herencia y Polimorfismo. Ejemplos (I) Ejemplos (II) Control de Acceso. Herencia

Patrones de Diseño. Patrón estructural Decorator. Técnicas de Programación - Curso 2008/09 (Esther Guerra Sánchez)

Benemérita Universidad Autónoma del Estado de Puebla

PROGRAMACIÓN ORIENTADA A OBJETOS (L40629) Sabino Miranda-Jiménez

UNIDAD 2: Abstracción del Mundo real Al Paradigma Orientado a Objetos

6.8 La Arquitectura del Sistema. [Proceso]

Diagramas del UML. A continuación se describirán los diagramas más comunes del UML y los conceptos que representan: Diagrama de Clases

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA

TEMA 7: DIAGRAMAS EN UML

Herencia e Interfaces

Ejercicio 1. Desarrollar un pequeño juego para practicar mecanografía.

Programación Orientada a Objetos en C#.NET CAPÍTULO 5 H E R E N C I A. Ing. Bruno López Takeyas, M.C.

JavaScript como Orientación a Objetos

Tema: Herencia Simple y Múltiple en C++.

En cualquier caso, tampoco es demasiado importante el significado de la "B", si es que lo tiene, lo interesante realmente es el algoritmo.

Capitulo III. Diseño del Sistema.

Modelado arquitectónico con UML

GESTIÓN DE REDES PARTE III

Lo básico de Javascript. ISIS2603 Departamento de Sistemas y Computación Universidad de los Andes

Transcripción:

Programación Orientada a Objetos en Java Curso 2006-2007 Tema 4 Herencia y Polimorfismo Gonzalo Méndez Pozo Dpto. de Ingeniería de Software e Inteligencia Artificial Universidad Complutense de Madrid Herencia Tipo especial 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, bien utilizado, facilita la modificabilidad y reutilización de los diseños y el código 1

Herencia En qué consiste? Existen dos clases, a las que llamaremos padre (superclase o clase base) e hija (subclase o clase derivada) Al igual que las herencias en la vida real, la clase hija pasa a tener lo que tiene la clase padre Atributos Métodos Un objeto de la clase hija es también un objeto de la clase padre En qué consiste? Herencia En la clase hija se definen las diferencias respecto de la clase padre Para qué se usa? Para extender la funcionalidad de la clase padre Para especializar el comportamiento de la clase padre 2

Herencia La herencia modifica el mecanismo de paso de mensajes Cuando a un objeto de una clase C se le pasa un mensaje M, se busca un método M en la clase C: Si existe un método M en la clase C, se ejecuta ese método y termina el proceso Si en la clase C no hay ningún método M, se busca éste en la superclase de C Si en la superclase de C existe un método M, se ejecuta ese método y termina el proceso Si en la superclase de C no hay ningún método M, se busca en las superclases de la superclase hasta que o bien se encuentra y se ejecuta o no se encuentra en ninguna de las superclases, de forma que el objeto no entiende ese mensaje M, dando como resultado el consiguiente error Herencia Ventajas Se ahorra código Permite reutilizar código extendiendo su funcionalidad Desventajas Se ahorra código Se introduce una fuerte dependencia en la clase hija respecto a la clase padre Puede dificultar la reutilización Un cambio en la clase padre puede tener efectos imprevistos en las clases hijas Un objeto de una clase hija puede tener un comportamiento inconsistente con lo esperado de un objeto de la clase padre Se establece una jerarquía o clasificación. Si cambia el criterio de clasificación puede acarrear muchas modificaciones 3

Herencia en Java Se indica usando la palabra reservada extends class Punto3D extends Punto2D Visibilidad: Los miembros privados de la superclase no son visibles desde la subclase Los miembros públicos de la superclase son visibles y siguen siendo públicos en la subclase Se puede acceder a los miembros de la superclase usando la palabra reservada super Si una clase se declara como final no se puede heredar de ella En java, todas las clases heredan implícitamente de la clase Object. Herencia en Java class Punto2D private int x,y; Punto2D (int x, int y) this.x=x; this.y=y; final class Punto3D extends Punto2D private int z; Punto3D (int x, int y, int z) super (x,y); this.z=z; public void pintar () public void pintar() super.pintar(); 4

Clases Abstractas En ciertos casos, una clase se diseña directamente para ser extendida por un conjunto de subclases En estos casos suele interesar no implementar alguno de sus métodos, pues no tiene ningún significado en la clase base. Es necesario declarar tanto la clase como los métodos no implementados como abstractos a través de la palabra reservada abstract Una clase abstracta es, por tanto, aquella que tiene alguno de sus métodos definido pero no implementado Clases Abstractas Podemos crear una clase Animal a partir de la cual crearemos otras clases que definan animales concretos (Casi) todos los animales emiten algún sonido, pero no hay ninguno común para todos los animales Cada subclase reimplementará el método sound() como le convenga public abstract class Animal private String nombre; public abstract void sound(); public Animal (String nombre) this.nombre= new String(nombre); 5

Interfaces A veces nos interesa que todos los métodos de una clase abstracta sean abstractos Lo usamos para obligar a que todas las subclases reimplementen esos métodos Para estos casos, Java proporciona unas clases especiales llamadas interfaces Se declaran como interface, no como class Representan el concepto de clase abstracta pura Una clase declarada como interfaz no puede tener ningún método implementado Herencia de Interfaz Para heredar de una interfaz se usa la palabra reservada implements public class MiClase implements Serializable Reglas: Una interfaz puede heredar de otra interfaz Una clase (abstracta o no) puede heredar de una interfaz Una interfaz NO puede heredar de una clase Es un mecanismo muy usado en Java 6

Más sobre Herencia en Java Sólo se puede hacer herencia de implementación (extends) de una clase No se crean problemas de referencias circulares o alternativas a un método con la misma declaración Se puede hacer herencia de interfaz (implements) de todas las interfaces que se quiera Polimorfismo Gracias a la herencia, se puede interpretar que un objeto de una subclase es también un objeto de una superclase El polimorfismo es un mecanismo que se aprovecha de la herencia (especialmente de interfaz) para manejar indistintamente objetos de las subclases como si fuesen objetos de la clase base, sin preocuparse por la clase en concreto a la que pertenecen Interesa utilizarlo cuando un comportamiento varía en función del tipo de algo 7

Polimorfismo Se declaran atributos, parámetros o variables de la clase base Se les asignan objetos de alguna de las subclases Estamos seguros de que se pueden usar todos los métodos declarados en la clase base Si necesitamos usar métodos de las subclases es necesario hacer un cast Polimorfismo La utilización del cast aumenta la posibilidad de hacer conversiones erróneas, por lo que es mejor evitarlo Se puede preguntar por la clase a la que pertenece un objeto: instanceof objeto.getclass().getname() Es una mala idea. En general, preguntar por la clase de un objeto implica un diseño malo y problemas para modificar el diseño y el código 8