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.

Slides:



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

Curso de java básico (scjp)
DESARROLLO DE SOLUCIONES EMPRESARIALES MOVILES USANDO TECNOLOGIA SUN APLICACIONES MOVILES CON J2ME RMS Ing. Ronald Criollo.
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
Igor Santos Grueiro. Muchos objetos tienen CLAVE.
Abstracciones y Modelos
El proceso de desarrollo de software
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
Genéricos en Java Jaime Ramírez, Ángel Lucas González
Rosalía Laza Fidalgo Reyes Pavón Rial Curso
Encapsulamiento y Abstracción
Abstracción de Datos La abstracción es un recurso fundamental en la programación orientada a objetos y está además fuertemente ligado a reusabilidad.
Programación Orientada a Objetos en Java
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
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.
6. Herencia. Clases abstractas. Genericidad
Colecciones.
Suponiendo que además en la clase U hay: import java.util.*; class U{ static Scanner teclado = new Scanner(System.in); static public int readInt(String.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.
7. Interfaces Herencia múltiple Interfaces Comparable y Comparator
Introducción a Java (2ª parte) - excepciones, colecciones, i/o, … -
Programación Orientada a Objetos
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Encapsulamiento.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Encapsulamiento.
Herramientas de polimorfismo y herencia en C++
Herencia y tipos ● Cuanta memoria se debe asignar a un objeto cuando se asigna en la pila ● La asignación debe hacerse antes de que se conozca la cantida.
PATRON PROTOTYPE Cristina Merino Héctor Carbajo Alicia Arroyo.
Herencia clase Object polimorfismo y ligadura dinámica super
Metodología de Programación Ayudantía 5 lelagos.ublog.cl 2009.
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
Interfaces y Clases Internas
:: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación.
Ing. Esp. Ricardo Cujar.  Lenguaje de programación orientado a objetos.  Desarrollado por Sun MicroSystems.  Independiente del Sistema Operativo gracias.
HERENCIA.
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.
Tratamientos Secuenciales Generalizados II Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 19 Versión
Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos.
Unidad 6 Polimorfismo.
Estructuras de control selectivas Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión Práctica 3.
:: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación.
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 Asociación.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Encapsulamiento.
Reutilización de código Elementos básicos del lenguaje Java Definición de variables, expresiones y asignaciones Fundamentos de Programación Departamento.
Implementación de Iterables Construcción de Iterables virtuales o basados en otros iterables Fundamentos de Programación Departamento de Lenguajes y Sistemas.
Las interfaces Predicate y Function Versión Unidad Didáctica 17 Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos.
This y static. This Normalmente, dentro del cuerpo de un método de un objeto se puede referir directamente a las variables miembros del objeto. Sin embargo,
:: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación.
RELACIONES ENTRE CLASES M.C. YOLANDA MOYAO MARTINEZ.
Excepciones Diseño y manejo de excepciones Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Práctica 5 Versión
Tipos SortedSet, Map y SortedMap Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión Unidad Didáctica 16.
Herencia y Clases Abstractas Reutilización de código y código genérico ELO329: Diseño y Programación Orientados a Objetos.
Introducción al Lenguaje C (II) Cadenas de caracteres, archivos de cabecera, lectura y escritura Fundamentos de Programación Departamento de Lenguajes.
Tratamientos secuenciales I Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 8 Versión
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.
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.
Criterios de ordenación y Guava Comparator, Comparable y Ordering Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión.
Tratamientos Secuenciales Generalizados I Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 18 Versión
Tipos genéricos Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 3.
Arrays, Cadenas y Vectores Tipos Genéricos Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 5 Versión
Introducción a la Programación Orientada a Objetos (POO) Conceptos de clase, objeto e interfaz. Atributos y métodos Fundamentos de Programación Departamento.
Paso de parámetros Diseño de programas iterativos Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 7 Versión.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
Transcripción de la presentación:

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 Versión Unidad Didáctica 4

UD4: Diseño de tipos Índice  Diseño de Tipos  Igualdad, representación y código hash  Clonación  Orden natural

UD4: Diseño de tipos Elección de propiedades: Simples: sus valores no dependen de otras Derivadas: dependen del resto de propiedades Elección del conjunto de métodos del tipo Establecer criterios para las siguientes propiedades: Criterio de igualdad Representación como cadena Código como entero (Código Hash) Orden natural Clonación o copia Diseño de tipos - Guía

UD4: Diseño de tipos Tipos  El tipo Object  Interfaz Cloneable  Interfaz Copiable  Interfaz Comparable

UD4: Diseño de tipos El tipo Object... boolean equals(Object o); int hashCode(); String toString();...  equals: se utiliza para comparar si dos objetos son iguales.  hashCode: devuelve el código hash del objeto. Dos objetos iguales tendrán el mismo código hash.  toString: devuelve una cadena de texto que representa al objeto.  La clase Object es la raíz de la jerarquía de clases en Java y obligatoria de ser extendida por cualquier nueva clase. Algunos de sus métodos públicos son:

UD4: Diseño de tipos Tipos – El tipo Object  equals:  Simetría: si un objeto es igual a otro, el segundo también es igual al primero.  Transitividad: si un objeto es igual a otro, y este segundo es igual a un tercero, el primero también será igual al tercero.  equals/toString:  Si dos objetos son iguales, sus representaciones en forma de cadena también lo serán.  equals/hashCode:  Si dos objetos son iguales, sus códigos hash tienen que coincidir.

UD4: Diseño de tipos package java.lang; public interface Cloneable { } Tipos – Copia  Esta interfaz no añade métodos pero habilita que los objetos puedan invocar el método clone de Object.  Si una clase no la implementa se lanzará la excepción CloneNotSupportedException cuando se solicite dicho método.

UD4: Diseño de tipos Tipos – Copia  Esta interfaz, de diseño propio, es paramétrica y hace referencia a un tipo genérico T que será instanciado en cada caso.  Permite que los objetos puedan invocar el método clone de Object desde el código de cualquier clase de Java devolviendo un objeto del tipo T.  Propiedad clone/equals:  Si un objeto se obtiene a partir de otro haciendo uso del método clone, ambos objetos serán iguales pero no idénticos. public interface Copiable extends Cloneable { T clone(); }

UD4: Diseño de tipos referencia 5 centro radio (Circulo) 0 0 x y (Punto) referencia 5 centro radio (Circulo) Objeto original Objeto clonado Tipos – Copia: Copia superficial o clonación por defecto  clone: si el objeto tiene atributos de tipo objeto se realiza una copia de sus referencias, no se crean nuevos objetos.  Ejemplo: clonación superficial de objetos de tipo Circulo

UD4: Diseño de tipos Objeto originalObjeto copiado referencia 5 centro radio (Circulo) 0 0 x y (Punto) referencia 5 centro radio (Circulo) 0 0 x y (Punto) Tipos – Copia: Copia en profundidad  copia: si el objeto tiene atributos de tipo objeto se realiza una copia de dichos atributos en nuevos objetos. Es necesario generar el código en cada caso.  Ejemplo: copia en profundidad de objetos de tipo Circulo

UD4: Diseño de tipos package java.lang; public interface Comparable { int compareTo(T o); } Tipos – El tipo Comparable  compareTo establece un orden natural para los objetos.  Debe coincidir en criterio con el método equals.  Valor entero devuelto:  Negativo si this es menor que o, es decir, está antes en el orden.  Cero si this es igual a o, es decir, el método equals devuelve true entre ellos.  Positivo si this es mayor que o, es decir, está después en el orden.

UD4: Diseño de tipos Tipos – El tipo Comparable. Propiedades  compareTo:  Simetría: si el resultado de comparar un objeto con otro es cero, el resultado coincide a la inversa.  Transitividad: si el signo de comparar un objeto con otro coincide con el signo de comparar el segundo con un tercero, entonces también coincide con el signo de comparar el primero con el tercero.  equals/compareTo:  Si dos objetos son iguales, el resultado de su comparación será igual a cero, y viceversa.

UD4: Diseño de tipos interface Punto Copiable Comparable extends Diseño de tipos  A la hora de diseñar un nuevo tipo de datos debemos decidir qué tipo de copia permite y qué orden natural e igualdad tendrán los objetos de dicho tipo.  Supongamos que los puntos sean iguales cuando coincidan sus dos coordenadas, sean copiables en forma superficial y su orden sea de menor a mayor por su coordenada X y a igualdad de ésta por su coordenada Y.

UD4: Diseño de tipos Aplicación: el tipo Punto  Interface Punto public interface Punto extends Copiable, Comparable { Double getXl(); Double getYl(); void setX(Double x); void setY(Double y); }

UD4: Diseño de tipos Aplicación: el tipo Punto  PuntoImpl: equals public class PuntoImpl implements Punto{... public boolean equals (Object o){ boolean res = false; if(o instanceof Punto){ Punto p = (Punto) o; res = getX().equals(p.getX()) && getY().equals(p.getY()); } return res; }...

UD4: Diseño de tipos Aplicación: el tipo Punto  PuntoImpl: toString y hashCode... public String toString(){ String s; s=“(“ + getX()+”,"+getY() + “)”; return s; } public int hashCode(){ return getX(). hashCode() * 31 + getY().hashCode(); }

UD4: Diseño de tipos Aplicación: el tipo Punto  Ejemplo de uso... Punto p1 = new PuntoImpl(6.0,4.0); Punto p2 = new PuntoImpl(6.0,4.0); if(p1.equals(p2) && p1!=p2){ mostrar(p1 + " y " + p2 + " son iguales pero no idénticos"); }...

UD4: Diseño de tipos Aplicación: el tipo Punto public class PuntoImpl implements Punto {... public Punto clone(){ Punto copia=null; try{ copia=(Punto)super.clone(); } catch(CloneNotSupportedException e){e.printStackTrace();} return copia; }... Punto p1 = new PuntoImpl(2,8); Punto p2 = p1.clone(); mostrar(p1 + " " + p2); p2.setX(7); mostrar(p1 + " " + p2);...

UD4: Diseño de tipos Aplicación: el tipo Punto public class PuntoImpl implements Punto {... public int compareTo(Punto p){ int cmp = getX().compareTo(p.getX()); if(cmp == 0){ cmp = getY().compareTo(p.getY()); } return cmp; } … }... Punto p1 = new PuntoImpl(6,4); Punto p2 = new PuntoImpl(6,4); if(p1.compareTo(p2)==0){ mostrar(p1 + " y " + p2 + " son iguales"); }else{ if(p1.compareTo(p2) < 0){ mostrar(p1 + " está antes en el orden que " + p2); }else{ mostrar(p1 + " está después en el orden que " + p2); }