Programación orientada a objetos

Documentos relacionados
Curso de Java POO: Programación orientada a objetos

16. Herencia Definición de herencia. 168 A. García-Beltrán y J.M. Arranz

Derechos de Acceso: COMPOSICION

Curso de Java POO: Programación orientada a objetos

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

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

Clases Abstractas e Interfaces

Programación orientada a objetos

Aplicaciones de Escritorio

Práctica 4: Herencia. Objetivos:

Tema 3: Genericidad en Java. Tema 3: Genericidad en Java. Objetivos y Bibliografía. Modelos de Datos Genéricos

Introducción a la Programación Orientada a Objetos

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

PARA QUÉ SIRVEN LAS INTERFACES JAVA. IMPLEMENTAR UNA INTERFAZ DEL API. VENTAJAS. EJEMPLOS BÁSICOS. (CU00697B)

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

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

Agradecimientos. Nota de los autores. 1 Problemas, algoritmos y programas 1

Modulo 11. Clases y Objetos en Java

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

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

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

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

POO en Java. Relaciones de composición y Herencia. Composición: clase Círculo. Composición. Herencia: La palabra reservada extends

La Herencia: Teoría (1)

FUNDAMENTOS DE PROGRAMACIÓN. SEPTIEMBRE 2005

Programación Orientada a Objetos (POO)

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

INTERFACE COMPARATOR. DIFERENCIAS ENTRE COMPARATOR Y COMPARABLE. CLASE COLLECTIONS. EJERCICIOS RESUELTOS. (CU00918C)

Conceptos a tratar. Fundamentos de la Programación Orientada a Objetos Ampliación sobre clases y objetos

ÍNDICE DEL LIBRO Y DEL EBOOK APRENDER A PROGRAMAR EN JAVA DESDE CERO. CURSO PASO A PASO.

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

1.2. Es Java un lenguaje ideal para aprender a programar? 1.4. Cuáles son las versiones y distribuciones Java y cuál usar?

Por ejemplo, considerando la jerarquía de herencia de Figuras Geométricas de la siguiente figura, es posible hacer uso del concepto de polimorfismo.

Programación Orientada a Objetos en Java

Universidad de Cantabria

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA

Introducción a OOP LSUB, GSYC, URJC. Wednesday, January 16, 13

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Prácticas de Programación

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

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

FUNDAMENTOS DE PROGRAMACIÓN Curso: 2013/14 EXAMEN PARA ALUMNOS PRESENTADOS AL PRIMER PARCIAL PRIMERA PARTE. EJERCICIO 1 Cuestiones (1 punto)

Unidad II. Fundamentos de programación en Java. Ing. José Luis Llamas Cárdenas

PROGRAMACION ORIENTADA A OBJETOS EN C++

Prácticas de Programación

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

Programación orientada a objetos. Resumen de Temas Unidad 4: Sobrecarga

Soluciones Ejercicios Tema 3

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

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

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

Arrays. Programación. Licenciatura de Lingüística y Nuevas Tecnologías

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

En este capitulo se estudiarán los conceptos relacionados a métodos, como lo son sobrecarga, métodos estáticos.

Diseño Basado en Componentes. Curso 2008 / 09

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

fundamentos de programación (unidad 7) herencia y relaciones entre clases

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

Introducción a Java (2)

Tema 7.- Fundamentos de la Programación Orientada a Objetos

Introducción a Java LSUB. 30 de enero de 2013 GSYC

CONCEPTOS BASICOS DEL LENGUAJE JAVA

EXAMEN PROGRAMACIÓN 21 de Septiembre de 2007 INGENIERÍA INFORMÁTICA Primera parte: Cuestiones 1,5 horas

Tutorial de C# Delegados y Eventos. Por: Óscar López, M.Sc.

Conversión entre Tipos

Curso Fundamentos de Informática Lección 7. Programación Orientada a Objetos

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

class Nombre_Clase extends Nombre_SuperClase { cuerpo de la clase extendida }

Java: un rápido repaso

Programación en Java. Programación en OO

Introducción a Java (II) Dr. (c) Noé Alejandro Castro Sánchez

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

Introducción a la Orientación a Objetos

Tema 3: Programación orientada a objetos (I)

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

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

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

Programación Orientada a Objetos con Java

Tema 4 Genericidad en Java. Programación Orientada a Objetos Curso 2013/2014

Elementos léxicos del lenguaje de programación Java

Java en 2 horas. Rodrigo Santamaría

Experto Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles. Sesión 1: Introducción al Lenguaje Java

Polimorfismo. Métodos virtuales

b c b c b b a a c a a c b c c b b c b c d c c c b

Tema 3: Herencia en Java. Programación Orientada a Objetos Curso 2009/2010 Begoña Moros Valle

Programación Orientada a Objetos con Java. Elementos Básicos del Lenguaje Java. Creación de un objeto. Creación de un objeto. Creación de un objeto

POLIMORFISMO. import java.util.*; class Instrumento { public void tocar() { System.out.println("Instrumento.tocar()"); public String tipo() {

4. Operadores Operador asignación

MASTER EN MODELIZACIÓN MATEMÁTICA, ESTADÍSTICA Y COMPUTACIÓN Curso: Bases de datos y programación orientada a objetos Parte POO.

Tema 7: Polimorfismo. Índice

Tema 4. Excepciones en Java

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

2. Estructura de un programa en Java

PROGRAMACION ORIENTADA A OBJETOS Ingenieria Informática Final Febrero 2006/07

Metodología y Tecnología de la Programación

Java: Clases Abstractas e Interfaces

Programación Orientada a Objetos en Java

Estructura de las Aplicaciones Orientadas a Objetos Herencia de clases

Tema 9: Paquetes. Índice

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

Transcripción:

Repaso Programación orientada a objetos Curso INEM. Programación en Java Santiago Muelas Pascual smuelas@fi.upm.es! Herencia! Superclase/subclase! super! Modificador protected! Redefinicion de métodos! Modificador final (asociado a herencia)! Clase Object! Consiste en la posibilidad de que una referencia a un objeto pueda conectarse también con objetos descendientes de este! Puede tratarse cualquier subclase de animal como si fuese un objeto de la clase Animal! En otras palabras Me da igual el tipo de subclase que seas siempre que cumplas con la declaración de Animal! Tiene sentido por la existencia de la herencia class Animal { void mover() { class Perro extends Animal { class Pez extends Animal { Animal a = new Perro(); a = new Pez(); a.mover();! Sirve para generalizar, olvidándose de los detalles y buscando puntos comunes! Se usa, sobre todo, en la construcción de estructuras de datos! Escenario:! Necesitamos mantener un array de perros y gatos de una clínica veterinaria! Cómo definimos dicho array? Usamos uno o dos?! También se puede realizar de manera implícita en el paso de argumentos! public void metodoquesea (Mamifero m)! Crear un array de la clase Animal de tamaño 2! Añadir a la primera posición un objeto de la clase Rana! Añadir a la segunda posición un objeto de la clase Pez! Recorrer el array llamando al método mover de cada objeto 1

! Nos permite crear sistemas que sean fácilmente extensibles sin apenas tener que modificarlos! Nuevas subclases pueden ser añadidas sin apenas tener que modificar el código existente! OJO! No podemos tratar a un objeto de una superclase como si fuese de una subclase! Ej: Animal a;! a puede ser un objeto de la clase Perro, Pez, pero no sabemos cuál.! Qué hacemos para convertir una referencia de una superclase a una subclase?! Casting Ej Perro p = (Perro) a;! Y si nos confundimos?! Ej! Perro p = new Perro();! String s = (String) p;! Qué hacemos para detectar si el casting es el adecuado? Operador instanceof Clases Abstractas! Para comprobar si una referencia es una instancia (clase o subclase) de la clase indicada! Es una clase tan genérica, que nunca se creará una instanciación en objetos! Se produce un error de compilación si se intenta crear un objeto! Sirve sólo como superclase, y, por tanto, para definir subclases Animal h = new Animal(); if (h instanceof Animal) System.out.println( Es un animal ); Caballo h = new Caballo(); if (h instanceof Animal) System.out.println( Es un animal );! Cuando uno de los métodos no tiene implementación, estamos ante una clase abstracta! El método sin implementación será un método abstracto public abstract class Figura { public abstract abstract! Una figura con el método área es una clase abstracta típica Por qué?! Modificar la clase Animal del ejercicio anterior para que el método mover sea abstracto! No se puede calcular el área de una figura! Es necesario saber qué figura es la subclase (círculo, cuadrado, )! Y redefinir el método para calcular el área dependiendo de la figura correcta 2

Interfaces! Ya hemos dicho que no existe herencia múltiple entre clases! Por qué?! Y si necesitamos tener herencia múltiple?! Similares a las clases abstractas! En donde todos los métodos son abstractos! Define el comportamiento pero no la implementación! El qué pero no el cómo! Las clases pueden implementar una interfaz! Pero tienen que dar una definición de todos sus métodos! O ser clases abstractas! Ya que no estamos dando una implementación de todos sus métodos Interfaces public class Circulo implements Figura { double area() { Figura f = new Circulo(); // Similar a una clase abstracta! No contienen a variables de instancia! Sólo se pueden declarar constantes de tipo public! public static final! Y tienen que inicializarse! Si no se especifica public static final, el compilador lo añade automáticamente! Los métodos tienen visibilidad public! Aunque no se especifique! Escribir la interfaz Animal que contenga al método mover! Escribir las clases Pez y Caballo que implementen el método mover mostrando un mensaje de texto por la salida. E.g. nadando / corriendo! Crear un array de objetos que cumplen la interfaz Animal y añadir dos objetos de la clase Pez y Caballo! Recorrer el array llamando al método mover. double PI = 3.14; public class Circulo implements Figura { double area() { Figura f = new Circulo(); // Similar a una clase abstracta 3

Herencia de interfaces double PI = 3.14; public abstract class Circulo implements Figura { Figura f = new Circulo(); //Error! Una interfaz puede extender a otro al igual que sucedía con las clases public interface ObjetoGrafico { public void pintar(); public interface FiguraGrafica extends ObjetoGrafico { public void area(); public class CuadradoGrafico implements FiguraGrafica { public void area() { public void pintar() {! Ya hemos dicho que no existe herencia múltiple entre clases! Una clase puede implementar más de una interfaz interface Volador { void volar(); interface Corredor{ void correr(); class Pegaso implements Volador, Corredor { public void volar() { public void correr() { Clase Object interface Volador { void volar(); interface Corredor{ void correr(); class Animal{ void comer(); class Pegaso extends Animal implements Volador, Corredor { public void volar() { public void correr() { public void comer() {! Realmente todas las clases que creemos son subclases! de la clase Object! Esta clase tiene métodos habituales que están disponibles para cualquier clase que creemos! Los más habituales son:! equals! tostring! clone! hashcode! Los veremos más adelante 4

Método tostring Método equals! Devuelve un representación en un String de un objeto! Por defecto devuelve el nombre del paquete, el de la clase y una representación hexadecimal correspondiente al valor devuelto por el método hashcode String tostring() {! == devuelve verdadero si las variables contienen la misma referencia! El método equals se utiliza para comparar el contenido! Por defecto, devuelve la comparación ==! La mayoría de las clases de biblioteca tienen redefinido el método equals Método equals Método clone public boolean equals(object o) { return (o instanceof MiClase && ((MiClase) o).getmiatributo == this.miatributo);! Para realizar una copia del objeto desde donde se llama! Para implementarlo hay que implementar la interfaz Clonable! Por defecto, se copian el valor directo de las variables! Qué pasa con las referencias?! Si no se implementa la interfaz, se genera una excepción (error en ejecución como se verá más adelante) class Perro implements Cloneable{ String nombre; public Perro(String nombre) { this.nombre = nombre; public Object clone() { Perro p = new Perro(this.nombre); return p; Perro p = new Perro( Pancho ); Perro q = (Perro) p.clone(); 5