Estructura de las Aplicaciones Orientadas a Objetos Herencia y Polimorfismo



Documentos relacionados
Estructura de las Aplicaciones Orientadas a Objetos Herencia de clases

Universidad de Cantabria

Fundamentos de la Programación Orientada a Objetos Definición de Clases

Curso de Java POO: Programación orientada a objetos

Programación Orientada a Objetos en Java

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

Programación Orientada a Objetos con Java

class Nombre_Clase extends Nombre_SuperClase { cuerpo de la clase extendida }

2.2.- Paradigmas de la POO

Programación Orientada a Objetos en Java

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.

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

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

Introducción a la Programación Orientada a Objetos

Java Inicial (20 horas)

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

POO en Java IV: Herencia (Parte 1)

INDICE DEL CURSO APRENDER PROGRAMACIÓN JAVA DESDE CERO. PROGRAMACIÓN ORIENTADA A OBJETOS (CU00601B)

Programación en Java. Programación en OO

15. Parámetros o argumentos

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

Programación Orientada a Objetos. Java: Excepciones

Programación orientada a objetos

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

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

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

HERENCIA. Corina Flores Villarroel. UMSS - Programa MEMI

Compiladores e Intérpretes Proyecto N 1 Sintaxis de MiniJava Segundo Cuatrimestre de 2015

Elementos del lenguaje Java

FUNDAMENTOS DE PROGRAMACIÓN. SEPTIEMBRE 2005

Programación Orientada a Objetos. Java: Excepciones

Java en 3 horas. Ampliación de Sistemas Operativos. Rodrigo Santamaría

Modulo 1 El lenguaje Java

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA

El lenguaje de programación Java

Repaso de las características más importantes de la programación Java y su adaptación a Android

Tema: Sobrecarga de Operadores.

2. Estructura de un programa en Java

INSTITUTO TECNOLOGICO de la laguna Programación Orientada a Objetos en C++

Multitarea en Java. Rafa Caballero - UCM

GUIA PROGRAMACIÓN ORIENTADA A OBJETOS

Prácticas de Programación

Pruebas de unidad con JUnit

Clases. Java: Clases y Objetos. Clases. Clases. Modificadores de clase. Definición de una clase. Cada objeto es un ejemplar de una clase

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

Java: Clases Abstractas e Interfaces

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

Clases abstractas e interfaces

Primer Parcial Septiembre 5 de 2009

9. Objetos y clases Clases

Diagramas de Clase en UML 1.1

Identificadores, palabras reservadas, tipos de datos, operadores aritméticos y el sistema estándar de salida en Java

Curso de Doctorado: Tecnologías de Objetos

Herencia e Interfaces

Curso de Python Inicial

Solución al Examen de Prácticas de Programación (Ingeniería Informática)

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

Java en 2 horas. Rodrigo Santamaría

Conceptos fundamentales de la POO. Fundamentos de la Programación Orientada a Objetos Objetos y Clases

Programación Orientada a Objetos en JAVA

Tema 2. El lenguaje de programación Java (Parte 1)

Tema: Patrones de Diseño.

Práctica 4: Herencia. Objetivos:

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

1. Generación automática de documentación (javadoc)

Práctica 3 mtp. metodoloxía e tecnoloxía da programación. Presentar detalles básicos sobre la sintaxis del lenguaje de programación Java.

CONCEPTOS FUNDAMENTALES DE LA ORIENTACION A OBJETOS

Programación de Objetos.Net C# LDP / DUOC-AV

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

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

Introducción a la programación orientada a objetos

ELO329: Diseño y Programación Orientados a Objetos 20 de Junio de Certamen Final

1. Ejemplo de clase : La clase Cuenta 2. Uso de la clase Cuenta. 3. Métodos y objetos receptores de mensajes (Importante)

Curso Introducción JAVA Pág.: 1

Introducción al desarrollo de RIA's con Adobe Flex 3.0 Dia 4

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

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

Las propiedades de la clase en java es el equivalente a las variables globales en lenguajes estructurados como el C.

LENGUAJES DE CONSULTA ORIENTADOS A OBJETOS

Contenidos. Funciones (suplemento) Funciones. Justificación del uso de Funciones

11. Algunas clases estándar de Java (II)

Tema 6. Reutilización de código. Programación Programación - Tema 6: Reutilización de código

DIAGRAMA DE CLASES EN UML

Tema: Clases y Objetos en C++.

Lo que necesitaremos para programar en Java, será un editor de texto o IDE y la JDK.

Programación Concurrente y de Tiempo Real Guión de Prácticas 3: Reutilización de Clases: Modelo de Herencia en Java

Notación UML para modelado Orientado a Objetos

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

Inteligencia Artificial II. Razonamiento con ontologías

19. Packages o paquetes

INICIACIÓN A LA PROGRAMACIÓN LENGUAJE JAVA

SOLUCION PARCIAL TASK SCHEDULER. Task Scheduler

UNIVERSIDAD NACIONAL DE INGENIERÍA CENTRO DE EXTENSIÓN Y PROYECCIÓN SOCIAL

1. Visión general de RMI

Índice ÍNDICE EJERCICIO 1: CÁLCULO FINANCIERO (5 PTOS.) EJERCICIO 2: AGENCIA DE COLOCACIONES (5 PTOS.)...4

Pontificia Universidad Católica de Chile Escuela de Ingeniería Departamento de Ciencia de la Computación

Objetos y Clases en Java. ELO-329: Diseño y Programación Orientados a Objetos

Tecnólogo Informático- Estructuras de Datos y Algoritmos- 2009

1 HILOS (THREADS) EN JAVA

Benemérita Universidad Autónoma del Estado de Puebla

Transcripción:

Estructura de las Aplicaciones Orientadas a Objetos Herencia y Polimorfismo Programación Orientada a Objetos Facultad de Informática Dep. Ingeniería del Software e Inteligencia Artificial Universidad Complutense Madrid Basado en el curso Objects First with Java - A Practical Introduction using BlueJ, David J. Barnes, Michael Kölling Conceptos Polimorfismo de métodos Tipos estáticos y dinámicos Sobreescritura Método de búsqueda dinámica Acceso protected Facultad de Informática UCM, 2007-08 Programación Orientada a Objetos 2

Recordemos la jerarquía del ejemplo DoME Facultad de Informática UCM, 2007-08 Programación Orientada a Objetos 3 Salida conflictiva Lo que queremos CD: A Swingin' Affair (64 mins)* Frank Sinatra tracks: 16 my favourite Sinatra album DVD: O Brother, Where Art Thou? (106 mins) Joel & Ethan Coen The Coen brothers best movie! Lo que tenemos title: A Swingin' Affair (64 mins)* my favourite Sinatra album title: O Brother, Where Art Thou? (106 mins) The Coen brothers best movie! Facultad de Informática UCM, 2007-08 Programación Orientada a Objetos 4

Cuál es el problema? El método print en la clase Item solo imprime los campos comunes La herencia es de sentido único: Una subclase hereda los campos de la superclase Pero la superclase no sabe nada de los campos de las subclases Facultad de Informática UCM, 2007-08 Programación Orientada a Objetos 5 Cómo solucionarlo? Una forma sería implementar print() en cada subclase Pero las subclases no tienen acceso a los campos private Y Database no podría encontrar el método print() en Item Facultad de Informática UCM, 2007-08 Programación Orientada a Objetos 6

Tipos estáticos y dinámicos De qué tipo es c1? Car c1 = new Car(); De qué tipo es v1? Vehicle v1 = new Car(); Facultad de Informática UCM, 2007-08 Programación Orientada a Objetos 7 Tipos estáticos y dinámicos El tipo declarado de una variable es su tipo estático El tipo del objeto al que se refiere una variable es su tipo dinámico El compilador comprueba si se producen violaciones de tipos estáticos for(item item : items) { item.print(); // Error en compilación Facultad de Informática UCM, 2007-08 Programación Orientada a Objetos 8

La solución: sobreescritura (overriding) método print tanto en la superclase como en las subclases Satisface tanto la comprobación de tipos estática como dinámica Facultad de Informática UCM, 2007-08 Programación Orientada a Objetos 9 Sobreescritura La superclase y las subclases definen métodos con la misma signatura Mismo nombre y tipo de parámetros y valor de retorno Cada uno tiene acceso a los campos de su clase La superclase satisface la comprobación de tipos estática El método de la subclase se llama durante la ejecución: sobreescribe la versión de la superclase Qué pasa con la versión de la superclase? Facultad de Informática UCM, 2007-08 Programación Orientada a Objetos 10

Búsqueda dinámica del método (1) Si no se aplica ni herencia ni polimorfismo Se seleccionará el método obvio Facultad de Informática UCM, 2007-08 Programación Orientada a Objetos 11 Búsqueda dinámica del método (2) Herencia sin sobreescritura. Se va subiendo por la jerarquía de herencia hasta encontrar el método llamado Facultad de Informática UCM, 2007-08 Programación Orientada a Objetos 12

Búsqueda dinámica del método (3) Polimorfismo y sobreescritura. Se utiliza la primera versión que se encuentre en la jerarquía Facultad de Informática UCM, 2007-08 Programación Orientada a Objetos 13 Búsqueda dinámica del método En resumen: Se accede una variable Se encuentra el objeto referenciado por la variable Se encuentra la clase del objeto Se busca el método correspondiente en la clase Si no se encuentra, se busca en la superclase Esto se repite hasta encontrar el método correspondiente Si se llega al final de la jerarquía sin encontrarlo, se producirá una excepción Facultad de Informática UCM, 2007-08 Programación Orientada a Objetos 14

Llamada a métodos sobreescritos Los métodos sobreescritos quedan ocultos pero podría ser útil llamarlos Se puede llamar al método sobreescrito (de la superclase) con super: super.method(...) Compárese con el uso de super en los constructores public class CD {... public void print() { super.print();... System.out.println(" " + artist); System.out.println(" tracks: " + numberoftracks); Facultad de Informática UCM, 2007-08 Programación Orientada a Objetos 15 Métodos polimórficos Una variable polimórfica puede referirse a una variedad de tipos de objetos Las llamadas a métodos en Java son polimórficas El método llamado depende del tipo de objeto dinámico Según el procedimiento que se ha visto Facultad de Informática UCM, 2007-08 Programación Orientada a Objetos 16

Los métodos de la clase java.lang.object Los métodos de la clase Object son heredados por todas las clases Luego pueden ser sobreescritos Como ejemplo, véase el método tostring() Devuelve una cadena que representa el objeto Por defecto: nombreclase@hashcode getclass().getname() + '@' + Integer.toHexString(hashCode()) Al sobreescribirlo se puede hacer que devuelva una cadena formada a partir de valores de atributos del objeto Facultad de Informática UCM, 2007-08 Programación Orientada a Objetos 17 Reescribiendo el método tostring() public class Item {... public String tostring() { String line1 = title + " (" + playingtime + " mins)"); if(gotit) { return line1 + "*\n" + " " + comment + "\n"); else { return line1 + "\n" + " " + comment + "\n");... Facultad de Informática UCM, 2007-08 Programación Orientada a Objetos 18

Reescribiendo el método tostring() Mejor redefinir tostring() que definir métodos print para una clase, y cuando se quiera imprimir: System.out.println(item.toString()); Las llamadas a print/println indicando un objeto implican la llamada al método tostring: System.out.println(item); Cómo estará declarado el método print() en la clase PrintWriter? Facultad de Informática UCM, 2007-08 Programación Orientada a Objetos 19 Acceso protegido (protected) El acceso private en la superclase puede ser demasiado restrictivo para una subclase Para permitir a las subclases el acceso a campos y métodos de la superclase se utiliza protected Es más restrictivo que el acceso public No obstante, en general sigue siendo recomendable el acceso private Y usar métodos de lectura (get) y modificación (set) Facultad de Informática UCM, 2007-08 Programación Orientada a Objetos 20

Niveles de acceso Facultad de Informática UCM, 2007-08 Programación Orientada a Objetos 21 Control de acceso a miembros de una clase private Acceso sólo dentro de la clase public Acceso desde cualquier lugar protected Acceso en las subclases (en cualquier paquete) y desde las clases del propio paquete NOTA: Si la subclase está declarada en otro paquete, entonces sólo puede acceder al miembro protected si se trata de una variable del tipo de la propia subclase Si no se indica nada, entonces la visibilidad es dentro del paquete Facultad de Informática UCM, 2007-08 Programación Orientada a Objetos 22

Control de acceso a miembros de una clase El acceso se controla a nivel de clase, no de objeto Por ejemplo: class Valor { private int v; boolean esigual(valor otrovalor) { if (this.v == otrovalor.v) return true; return false; Facultad de Informática UCM, 2007-08 Programación Orientada a Objetos 23 Control de acceso a miembros de una clase Ejemplo de uso de protected package EjemploProtected; public class Valor { protected int v; package EjemploProtected; class Otra { void metodo (Valor unvalor) { // legal unvalor.v = 0; // legal package OtroPaquete; import EjemploProtected.Valor; class Ilegal extends Valor{ void metodo(valor uno, Ilegal dos) { uno.v = 1; // ilegal!!! (v de Valor, en otro paquete) dos.v = 2; // legal (v de Ilegal, de la propia clase) Facultad de Informática UCM, 2007-08 Programación Orientada a Objetos 24

Control de acceso a miembros de una clase Resumen de niveles de acceso private Clase Subclase Paquete Resto protected (*) public paquete Cuando utilizar... código private se puede cambiar sin afectar el código cliente cambios en cosas public pueden afectar al código cliente protected significa que hay control sobre el código a tocar en caso de cambios Facultad de Informática UCM, 2007-08 Programación Orientada a Objetos 25 Resumen El tipo declarado de una variable es su tipo estático El compilador comprueba los tipos estáticos El tipo de un objeto es su tipo dinámico Los tipos dinámicos se usan en tiempo de ejecución Los métodos se pueden sobreescribir en las subclases La búsqueda de un método empieza en su tipo dinámico El acceso protected se utiliza para la herencia Facultad de Informática UCM, 2007-08 Programación Orientada a Objetos 26