Herencia clase Object polimorfismo y ligadura dinámica super

Slides:



Advertisements
Presentaciones similares
Curso de java básico (scjp)
Advertisements

Curso de java básico (scjp)
FUNDAMENTALS OF THE JAVA PROGRAMMING LANGUAGE
Programación Interactiva Fundamentos de Java. 2 Ejecución de un programa Para Java una clase ejecutable es aquella que es pública y tiene un método main()
Herencia en C#.
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.
Orientación a Objetos con Java SE
Conceptos más avanzados de Programación Orientada a Objetos Programación 2005 Licenciatura de Lingüística y Nuevas Tecnologías.
Algoritmos y Estructura de Datos
1.2 Sintaxis del lenguaje Java.
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.
Polimorfismo Lenguajes de Programación II Corporación Universitaria del Caribe CECAR.
Lic. Rosemary Torrico Bascopé
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.
1 Herencia en Java Agustín J. González Diseño y Programación Orientados a Objetos.
6. Herencia. Clases abstractas. Genericidad
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
El lenguaje de programación Java
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.
7. Interfaces Herencia múltiple Interfaces Comparable y Comparator
Capitulo # 4 herencia PROGRAMACION III UNIVERSIDAD
Sintaxis de C# (Declaraciones y Tipos)
Introducción a Java (2ª parte) - excepciones, colecciones, i/o, … -
Programación Orientada a Objetos
Programación Orientada a Objetos usando CONSTRUCTORES DESTRUCTORES.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Encapsulamiento.
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SEMANA DOS ORIENTACION A OBJETOS.
UNIDAD VI Recursos esenciales de Java LSC. Natalia Rodríguez Castellón.
Tema 8: Herencia Antonio J. Sierra.
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.
Clases y Objetos en Java ELO329: 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
PROGRAMACIÓN ORIENTADA A OBJETOS Unidad 1 GENERICIDAD
Algoritmos y Programación III
Programación orientada a objetos
:: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación.
Herencia y Clases Abstractas
CONCEPTOS.
Abstracción El concepto de abstracción es esencial en ciencias de la computación. Un programa es en sí mismo una abstracción, un modelo de la resolución.
Programación orientada a objetos Capítulo 9 Algo mas sobre herencias.
INSTITUTO TECNOLOGICO DE TEHUACAN Ingeniería en sistemas computacionales Curso de apoyo a la titulación CLASES DE JAVA Diciembre de 2008.
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 ”
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.
Estructuras de control selectivas Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión Práctica 3.
Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Práctica 4 Versión Diseño de tipos Igualdad, representación, código,
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Encapsulamiento.
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.
Diseño de tipos Igualdad, representación, código, copia y relación de orden Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos.
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.
Tipos genéricos Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 3.
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:

Herencia clase Object polimorfismo y ligadura dinámica super herencia y creación genericidad identificación del tipo en tiempo de ejecución clases abstractas

El lenguaje de programación Java Herencia en Java Herencia simple Object es la clase raíz (paquete java.lang) Object describe las propiedades comunes a todos los objetos Object A B C D Terminología: - C y D son subclases de B - B es la superclase de C y D El lenguaje de programación Java

El lenguaje de programación Java Herencia en Java Una subclase hereda de su superclase métodos y variables tanto de clase como de instancia. Una subclase puede añadir nuevos métodos y variables. Una subclase puede redefinir métodos heredados. Sintaxis: class nombreHija extends nombrePadre {…} Por defecto toda clase extiende la clase Object class Contador {…}  class Contador extends Object {…} El lenguaje de programación Java

Ejemplo Object Contador ContadorColoreado public class ContadorColoreado extends Contador { //nueva variable de instancia private String color ; public ContadorColoreado(){ super(); setColor(“transparente”); } public ContadorColoreado(int v, int s, String c) { super(v,s); setColor(c); ... Llamada al constructor del padre Object Contador ContadorColoreado El lenguaje de programación Java

El lenguaje de programación Java Acceso protegido Una subclase no puede acceder a los campos privados de la superclase Para permitir que un método de la subclase pueda acceder a un campo de la superclase, éste tiene que declararse como protected Protected: miembros visibles a las subclases y al resto de clases del paquete Resumen de modificadores de acceso: private –visible sólo en la clase public –visible a todas las clases protected –visible en el paquete y las subclases Sin modificador –visible en el paquete El lenguaje de programación Java

Conversión de tipos Java es un lenguaje fuertemente tipado, es decir, en tiempo de compilación se comprueba la compatibilidad de tipos Conversión implícita: (automática) tipos primitivos a uno que soporte un rango mayor de valores float saldo = 300; //podemos asignarle un entero int codigo = 3.7; //ERROR conversión de referencias: todo objeto contiene una instancia de sus superclases cast-up siempre válido Rectangulo r; Cuadrado c = new Cuadrado(); r = c; Rectangulo Cuadrado

Conversión de tipos Conversión explícita: tipos primitivos perdiendo información long l = 200; int i = (int)l; conversión de referencias asignar a un objeto de una subclase uno de la superclase cast-down o narrowing No siempre válido El error se puede producir: en tiempo de ejecución (ClassCastException) en tiempo de compilación si no es ni siquiera una subclase.

Conversión explícita de referencias Puede dar un error en ejecución: Figura [] figuras = new Figura [30]; … Rectangulo r = (Rectangulo)figuras[i]; Daría error en compilación: Cuenta c = (Cuenta)figuras[i]; El lenguaje de programación Java

El lenguaje de programación Java Redefinición Un método de la subclase con la misma signatura y valor de retorno que un método de la superclase lo está REDEFINIENDO. Para evitar la redefinición de un método se utiliza el modificador final. Puede cambiar el valor de acceso siempre que lo relaje, es decir, puede pasar de protected a public pero no a private. Los atributos no se pueden redefinir, sólo se OCULTAN (el campo de la superclase todavía existe pero no se puede acceder) El lenguaje de programación Java

El lenguaje de programación Java public class Poligono{ private Punto [] vertices; private int numVertices; … public float perimetro(){ //{} double peri=0; Punto anterior=vertices[0]; Punto actual; int ultimo=numVertices-1; for (int i=1; i<=ultimo; i++){ actual=vertices[i]; peri+=anterior.distancia(actual); anterior=actual; } //distancia del ultimo con el primero return peri+=vertices[ultimo].distancia(vertices[0]); public class Rectangulo{ //{} private double lado1; privare double lado2; public float perimetro(){ return 2*lado1+2*lado2; Ejemplo redefinición Añade atributos Redefine métodos El lenguaje de programación Java

Polimorfismo y ligadura dinámica Polimorfismo: una entidad puede hacer referencia a objetos de diferentes tipos en tiempo de ejecución. Ligadura dinámica: en tiempo de ejecución se elegirá la versión mas adecuada según el tipo del objeto receptor. Sea la jerarquía: Poligono p; /* Puede referenciar a un objeto Poligono o Rectangulo */ Object Poligono Rectangulo Rectangulo r = new Rectangulo(); p=r; float peri = p.perimetro(); perimetro+ {} {} perimetro++ {} El lenguaje de programación Java

El lenguaje de programación Java super Palabra clave disponible en todos los métodos no-static Se invoca a la versión del método de la primera superclase que lo contenga Ejemplo: public class Punto{ … //(x,y) public void borrar(){} } public class Pixel extends Punto{ … public void borrar(){ super.borrar(); //borra el Punto color = null; El lenguaje de programación Java

El lenguaje de programación Java Ejemplo super Uno class Uno { public int test(){return 1;} public int result1(){return this.test();} } class Dos extends Uno{ public int test(){return 2;} class Tres extends Dos{ public int result2(){return this.result1();} public int result3(){return super.test();} class Cuatro extends Tres{ public int test(){return 4;} Dos Tres Cuatro El lenguaje de programación Java

El lenguaje de programación Java Herencia. ‘super’ public class PruebaSuperThis{ public static void main (String args[]){ Uno ob1 = new Uno(); Dos ob2 = new Dos(); Tres ob3 = new Tres(); Cuatro ob4 = new Cuatro(); System.out.println("ob1.test = "+ ob1.test()); System.out.println("ob1.result1 = " + ob1.result1()); System.out.println("ob2.test = " + ob2.test()); System.out.println("ob2.result1 = " + ob2.result1()); System.out.println("ob3.test = " + ob3.test()); System.out.println("ob4.result1 = " + ob4.result1()); System.out.println("ob3.result2 = " + ob3.result2()); System.out.println("ob4.result2 = " + ob4.result2()); System.out.println("ob3.result3 = " + ob3.result3()); System.out.println("ob4.result3 = " + ob4.result3()); } 1 1 2 2 2 4 2 4 2 2 El lenguaje de programación Java

El lenguaje de programación Java Herencia. Clase Object Todas las clases heredan directa o indirectamente de la clase Object, raíz de la jerarquía. Toda clase tiene disponibles sus métodos: public boolean equals(Object obj)  igualdad de valores public String toString()  Devuelve la representación del obj en un String public int hashCode()  código de almacenamiento en una Hashtable protected Object clone()  devuelve una copia del objeto public final Class getClass()  clase que representa el tipo del objeto protected void finalize()  relacionado con liberar memoria Hay que redefinir equals, toString, hashCode y clone para adaptarlos. El lenguaje de programación Java

Copia y clonación de objetos Puede ser útil para hacer una copia local de un objeto Constructor de copia: Construye un nuevo objeto como una copia del que se le pasa Cuenta(Cuenta otra){ codigo = otra.codigo; saldo = otra.saldo; titular = otra.titular; } No se usa mucho dentro de las bibliotecas de clases de Java. Existe en la clase String y las colecciones. La forma preferida de obtener la copia de un objeto es utilizar el método clone. El lenguaje de programación Java

Clonación de objetos: Object.clone Devuelve un nuevo objeto cuyo estado inicial es una copia del estado actual del objeto sobre el que se invoca a clone Factores a tener en cuenta: La clase que proporciona el método clone debe implementar el interfaz Cloneable Definir el método clone como public (en la clase Object es protected, por lo que no se puede hacer el clone de un Object) Puede ser necesario cambiar la implementación por defecto del método para hacer un clone en profundidad Se puede utilizar la excepción CloneNotSupportedException para indicar que no se debería haber llamado al método clone. El lenguaje de programación Java

Clonación de objetos buffer tope 2 2 9 7 3 2 buffer tope objPila1 public class MiClase implements Cloneable { public Object clone() throws CloneNotSupportedException{ return super.clone(); } ... La implementación por defecto hace un clone superficial: objPila2=(Pila)objPila1.clone(); buffer tope 2 2 9 7 3 2 buffer tope objPila1 objPila2 El lenguaje de programación Java

El lenguaje de programación Java Clone en profundidad Redefinir clone para que haga una copia del array public class Pila implements Cloneable{ ... public Object clone(){ try{ Pila nuevaPila = (Pila)super.clone(); nuevaPila.buffer = (int[])buffer.clone(); return nuevaPila; }catch (CloneNotSupportedException e){...} } buffer tope 2 2 9 7 3 2 9 7 3 2 buffer tope objPila1 objPila2 El lenguaje de programación Java

El lenguaje de programación Java Igualdad en Java Igualdad de referencias (identidad): objPila1 == objPila2 --> false objPila1 != objPila2 --> true Método equals Disponible para todo objeto public boolean equals(Object obj) Comportamiento por defecto: this==obj Utilizado para implementar la igualdad de objetos. El lenguaje de programación Java

El lenguaje de programación Java Clases envolventes Si definimos un array de Object ¿cómo metemos enteros? java.lang contiene una clase por cada uno de los tipos básicos: Tipo básico Clase envolvente byte Byte short Short int Integer long Long float Float double Double boolean Boolean char Character El lenguaje de programación Java

Ejemplo: clases envolventes Object [] tabla = new Object [10]; … for (int i=0; i<10; i++){ tabla[i]=new Integer(i); } También existen constructores a partir de cadenas de caracteres Integer i = new Integer(“345”); El lenguaje de programación Java

El lenguaje de programación Java Clases envolventes Conversión de tipos: Tipo A String De String boolean String.valueOf(boolean) new Boolean(String).booleanValue() int String.valueOf(int) Integer.parseInt(String) long String.valueOf(long) Long.parseLong(String) float String.valueOf(float) Float.parseFloat(String) double String.valueOf(double) Double.parseDouble(String) Métodos de clase para crear números a partir de cadenas de caracteres (lanza NumberFormatException) Métodos de instancia para devolver el valor contenidos en el envoltorio No existen métodos para modificar el contenido del envoltorio El lenguaje de programación Java

El lenguaje de programación Java Genericidad en Java No existe un mecanismo de genericidad en el lenguaje al estilo de Eiffel: Array[G] Se puede definir una estructura de datos de tipo Object, puesto que todo tipo es compatible con la raíz Inserción: Puedo insertar cualquier tipo de objetos El control lo debe implementar el programador Extracción: Recupero elementos de tipo Object Hace falta hacer una conversión explícita El lenguaje de programación Java

El lenguaje de programación Java Ejemplo: Clase Pila public class Pila{ Object [] contenido; ... public void push (Object obj){...} public Object pop(){...} } public class TestPila{ public static void main(String [] args){ Pila p = new Pila(); Cuenta cta = new Cuenta(“Titular”,600.0); Cuenta cta2; Rectangulo r1 = new Rectangulo (10,20); Rectangulo r2 = new Rectangulo (10,20); p.push(r1); p.push(cta); p.push(r2); //OK! r compatible con Object cta2 =(Cuenta) p.pop(); // Error tej ClassCastException cta2= p.pop(); //Error tc tipos incompatibles int d=(p.pop()).getDiagonal(); //Error tc //no existe el método getDiagonal en la clase Object El lenguaje de programación Java

Ejemplo: diagonal máxima Figura [] figuras = new Figura[10]; … float actual, maxDiagonal=0; for (int i=0; i<10; i++){ actual = figuras[i].diagonal(); if (actual>maxDiagonal) maxDiagonal=actual; } ¿Qué pasa si no es un rectángulo? Tendríamos que preguntar por el tipo El lenguaje de programación Java

Identificación del tipo en tiempo de ejecución if (figuras[i] instanceof Rectangulo) … java.lang contiene la clase Class: Conocer el nombre de la clase de un objeto: String getName() Crear una instancia de esa clase que tenga constructor por defecto: Object newInstance() Saber si un objeto es instancia de la clase o de una subclase: boolean isInstance(Object) if figuras[i].getClass().getName().equals(“Rectangulo”)… El lenguaje de programación Java

instanceof vs. equivalencia de Class instanceof o isInstance “¿Eres de esta clase o de una clase derivada de ésta?” comparando los objetos Class “¿Eres exactamente de esta clase?” Ejemplo: Sea Rectangulo una subclase de la clase Figura Rectangulo r = new Rectangulo(); (r instanceof Figura)  true (r.getClass().equals(Figura.class))  false El lenguaje de programación Java

El lenguaje de programación Java Clases abstractas Se fija un conjunto de métodos y atributos que permitan modelar un cierto concepto, que será refinado mediante la herencia. Métodos abstractos: sólo cuentan con la declaración y no poseen cuerpo de definición la implementación es específica de cada subclase Toda clase que contenga algún método abstracto (heredado o no) es abstracta. Puede tener también métodos efectivos. Tiene que derivarse obligatoriamente NO se puede hacer un new de una clase abstracta. SI deben definir los constructores. El lenguaje de programación Java

Ejemplos Clases abstractas en Java: Number y Dictionary public abstract class Figura { public abstract void dibujar(); public abstract void rotar(); ... } public class Rectangulo extends Figura { public void dibujar(){ //código especifico para dibujar rectángulos Clases abstractas en Java: Number y Dictionary