Algoritmos y Programación III 4. Colecciones, excepciones Carlos Fontela, 2006.

Slides:



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

Java nos ofrece System.out para escribir en pantalla, pero también tenemos System.in para leer. System.in es un objeto de una clase de java que se llama.
CJ02 – Técnicas avanzadas en java 1.4 y 5.0
EXCEPCIONES UNIDAD 5.
Programación Interactiva Manejo de Excepciones
Instrucciones y excepciones
Lenguaje de programación Java
ALGORITMOS DE ORDENAMIENTO
Orientación a Objetos con Java SE
Programación en Java Instructor:.
MANEJO DE EXCEPCIONES EN C++
Arquitectura CLARO-TECNOTREE CAPITULO 4: Excepciones
Capitulo 4 Excepciones.
Capitulo 3 Java util.
Genéricos en Java Jaime Ramírez, Ángel Lucas González
1.2 Sintaxis del lenguaje Java.
Aplicación del paradigma orientado a objetos
Marzo 2007 Lenguajes Visuales Clase III.
Arreglos: Vectores en JAVA
Excepciones y archivos Info 033. Exception El término Exception es la palabra corta para la frase "evento excepcional." Definition: Una excepción es un.
Manejo de excepciones en Java
JAVA 1.5 Fernando Almeida Octubre Introducción Java Specification Request (JSR) 14Java Specification Request (JSR) 14 propone introducir tipos y.
1 Herencia en Java Agustín J. González Diseño y Programación Orientados a Objetos.
Técnicas avanzadas de programación Interfaces
Colecciones.
Programación orientada a objetos
Matrices Es una estructura homogénea, compuesta por varios elementos, todos del mismo tipo y almacenados consecutivamente en memoria A cada elemento se.
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6
7. Interfaces Herencia múltiple Interfaces Comparable y Comparator
Conversión cadena a número
ESTRUCTURA DE DATOS EN JAVA
Tema 11: Excepciones Antonio J. Sierra.
Introducción a Java (2ª parte) - excepciones, colecciones, i/o, … -
El lenguaje de programación Java
Computación II Repaso de java Karina Figueroa Mora.
USO DE EXCEPCIONES EN JAVA LSC. Natalia Rodríguez Castellón.
Herramientas de polimorfismo y herencia en C++
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SCJP 6.0 SEMANA CUATRO CONTROL DE FLUJOS, EXCEPCIONES Y ASERSIONES.
Programación Orientada a Objetos Unidad 4 Excepciones Universidad de Chile Departamento de Ciencias de la Computación.
Unidad III Manejo de Excepciones en Java y C++
Técnicas avanzadas de programación Introspección
1 Manejo de Excepciones y otros Agustín J. González ELO-329.
Java.
Programación avanzada en Java Miguel Ángel Corella 26 de Septiembre de 2005.
El lenguaje de programación Java1 8. Colecciones e iteradores - interfaz Collection - clases ArrayList, LinkedList, HashSet, TreeSet - interfaz Map - clases.
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.
Programación orientada a objetos Capítulo 12 Manejo de errores.
Colecciones en JAVA José Luis Redondo García.
Unidad 2.1: INTRODUCCIÓN A LA ORIENTACIÓN A OBJETOS.
Detalles Generales sobre Java
PROGRAMACIÓN ORIENTADA A OBJETOS Unidad 1 GENERICIDAD
Introducción a la Programación Orientada a Objetos Una clase que modela los atributos y el comportamiento de una colección de objetos, define un tipo de.
Algoritmos y Programación III
Tratamiento de excepciones
Programación orientada a objetos Capítulo 4 Agrupar objetos.
Ing. Esp. Ricardo Cujar.  Lenguaje de programación orientado a objetos.  Desarrollado por Sun MicroSystems.  Independiente del Sistema Operativo gracias.
MANEJO DE EXCEPCIONES. 21/11/2005 E.T.S de Ingenieros de Telecomunicacion.2 Índice ¿Qué es una excepción? Tipos de situaciones. Manejo de excepciones.
ARRAYS Y COLECCIONES DE DATOS. ARRAYS Arrays – Matriz – Vector Elemento del lenguaje que nos permite agrupar un conjunto de valores del mismo tipo, y.
ESTRUCTURAS DE DATOS “Conceptualización de estructuras de datos” Por: Eduardo Robayo.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Arreglo.
Tratamientos Secuenciales Generalizados II Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 19 Versión
Factorías e Iterables Introducción del concepto de patrón de diseño Construcción de tipos para recorridos con for extendido Fundamentos de Programación.
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,
Excepciones Diseño y manejo de excepciones Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Práctica 5 Versión
Tratamientos secuenciales I Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 8 Versión
Tema 1: Concurrencia con Java
Arrays, Cadenas y Vectores Tipos Genéricos Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 5 Versión
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.
Colecciones Carlos Fontela, 2008.
Transcripción de la presentación:

Algoritmos y Programación III 4. Colecciones, excepciones Carlos Fontela, 2006

Página 2Algoritmos y Programación III Carlos Fontela, 2006 Temario Colecciones e iteradores Excepciones Tratamiento de problemas con un enfoque optimista Desacoplar código de tratamiento de problemas

Página 3Algoritmos y Programación III Carlos Fontela, 2006 Colecciones Agrupan objetos. Cada elemento tiene un significado similar. El valor depende de la posición. Se puede operar sobre: Un elemento en particular. Algunos elementos elegidos mediante un filtro. La colección como conjunto. Se definen recorridos. Tienen diferentes interfaces, funcionalidades y eficiencias.

Página 4Algoritmos y Programación III Carlos Fontela, 2006 Colecciones (II) Arreglos vectores, matrices, multidimensionales Listas encadenadas lineales, dobles, circulares, multilistas Árboles binarios, generales

Página 5Algoritmos y Programación III Carlos Fontela, 2006 Arreglos primitivos en Java Única colección como tipo primitivo. Tamaño se define en tiempo de ejecución. Una vez definido, no puede variar. Seguros: Chequeo de rangos. Tipo de los elementos definido estáticamente. Muy veloces Salvo por chequeo de rangos. Biblioteca de funciones pobre en comparación.

Página 6Algoritmos y Programación III Carlos Fontela, 2006 Interfaces de apoyo public interface Comparable { public int compareTo (Object o); } public interface Comparator { public int compare (Object o1, Object o2); public boolean equals (Object o1, Object o2); }

Página 7Algoritmos y Programación III Carlos Fontela, 2006 Clase Arrays Clase utilitaria. Sus métodos son “de clase” o “estáticos”. equals(v1,v2) sort(v) sort (v, Comparator c) binarySearch(v, x) binarySearch(v, x, Comparator c) otros...

Página 8Algoritmos y Programación III Carlos Fontela, 2006 Arrays.sort e interfaces (I) Arrays.sort(v1) Funciona bien si el tipo base de v1 Es primitivo Implementa Comparable Usa el compareTo definido Si no, arroja una excepción. Para otros tipos base: Arrays.sort(v1,c) Hay que implementar un Comparator

Página 9Algoritmos y Programación III Carlos Fontela, 2006 Arrays.sort e interfaces (II) Para ordenar Fraccion(es): public class ComparadorFracciones implements java.util.Comparator { public int compare(Object o1, Object o2) { Fraccion f1 = (Fraccion)o1; Fraccion f2 = (Fraccion)o2; if (f1.igual(f2)) return 0; else if (f1.mayor(f2)) return 1; else return -1; } } // luego... Comparator comp = new ComparadorFracciones(); Arrays.sort(vecFracciones, comp); Ídem para binarySearch

Página 10Algoritmos y Programación III Carlos Fontela, 2006 Colecciones de java.util (I) Las más comunes de Java 1.4:

Página 11Algoritmos y Programación III Carlos Fontela, 2006 Colecciones de java.util (II) Tienen elementos de tipo Object. No se sabe qué hay dentro. No admiten elementos primitivos. Pero hay clases envolventes: Integer, Boolean, Double, Character, etc. Colecciones heredadas: Vector, Hashtable, Stack, BitSet, Properties, etc.

Página 12Algoritmos y Programación III Carlos Fontela, 2006 Clase Collections Es la Arrays de las colecciones. (una clase utilitaria de métodos estáticos) Algunos métodos: void sort(Collection c, Comparator comp) int binarySearch(Collection c, Object x, Comparator comp) Object max(Collection c, Comparator comp) Object min(Collection c, Comparator comp) void reverse() Collection unmodifiableCollection(Collection c)

Página 13Algoritmos y Programación III Carlos Fontela, 2006 Iteradores (I) Para definir recorridos. Interfaz: Tomar el primer elemento. Tomar el elemento siguiente. Testear si se termina la colección. Un ejemplo: List v = new ArrayList(); for(int i = 0; i < 10; i++) v.add(new Integer(i)); Iterator it = v.iterator();// pido un iterador para v while(it.hasNext())// recorro la colección System.out.println((Integer)it.next());

Página 14Algoritmos y Programación III Carlos Fontela, 2006 Iteradores (II) Toda clase que implemente Collection puede generar un Iterator con el método iterator Nótese que Iterator es una interfaz Pero está implementada para las colecciones definidas en java.util.

Página 15Algoritmos y Programación III Carlos Fontela, 2006 Iteradores (III) Llevan la abstracción a los recorridos de colecciones. Facilitan cambios de implementación. No se necesita trabajar con el número de elementos. Convierten a las colecciones en simples secuencias.

Página 16Algoritmos y Programación III Carlos Fontela, 2006 Iteradores antiguos Clase Enumeration Collections.enumeration(c) hasMoreElements() nextElement() Ejemplo Enumeration it = Collections.enumeration(v); while(it.hasMoreElements()) System.out.println((Integer)it.nextElement()); Se usan todavía

Página 17Algoritmos y Programación III Carlos Fontela, 2006 Definiendo iteradores (I) public class Matriz2D extends AbstractCollection { int cantFilas; int cantCol; Object [ ] [ ] m2; public Matriz2D(int filas, int columnas) { m2 = new Object[filas][columnas]; cantFilas = filas; cantCol = columnas; } public Iterator iterator() { return new IteradorMatriz2D(this); } public int size() { return (cantFilas*cantCol); } public Object get (int i, int j) { return m2[i][j]; } // otros métodos... }

Página 18Algoritmos y Programación III Carlos Fontela, 2006 Definiendo iteradores (II) public class IteradorMatriz2D implements Iterator { int filaActual; int colActual; Matriz2D m2; public IteradorMatriz2D (Matriz2D m) { filaActual = 0; colActual = 0; m2 = m;} public Object next() { if (!hasNext()) throw new NoSuchElementException(); Object o = m2.get(filaActual,colActual); if (colActual < cantCol-1) colActual++; else {filaActual++; colActual = 0;} return o; } public boolean hasNext() { return !((filaActual == cantFilas-1) && (colActual == cantCol-1)); } }

Página 19Algoritmos y Programación III Carlos Fontela, 2006 Otras soluciones Tipos genéricos Ada Clases parametrizadas C++ También hay iteradores, más ricos Genericidad restringida Eiffel Java 5

Lanzamiento de excepciones public class eDivisionPorCero extends Exception { } public static void dividir (double x, double y ) throws eDivisionPorCero { if (y == 0) throw new eDivisionPorCero(); else return x/y; }

Captura de excepciones Manejador (puede haber varios): try { c = dividir(a,b); } catch (eDivisionPorCero e) { // hago algo... } finally { // hago algo... }

Clases de excepciones Deben heredar de Exception o una derivada. Pueden tener atributos y métodos: Para usar en la captura. En general no se usan. Las jerarquías influyen en la captura: Se captura cualquier clase derivada. Ojo con el orden de captura.

Excepciones seguras (I) Cláusula throws es obligatoria public static void dividir (double x, double y ) throws eDivisionPorCero { if (y == 0) throw new eDivisionPorCero(); else return x/y; } A lo sumo se puede declarar un ancestro En redefiniciones, mantener y no agregar Para mantener el polimorfismo: muy molesto

Excepciones seguras (II) Obligación de capturar (I) public double suma (double[ ] x, double[ ] y) { double s = 0; try { for (int i = 0; i < 10; i++) s += dividir(x[i],y[i]); }catch (eDivisionPorCero e) { System.err.println(“División por cero”); return 0; } return s; } El chequeo se hace en tiempo de compilación

Excepciones seguras (III) Obligación de capturar (II) public double suma (double[ ] x, double[ ] y) throws eDivisionPorCero { double s = 0; for (int i = 0; i < 10; i++) s += dividir(x[i],y[i]); return s; } Obligación de capturar (III) public double suma (double[ ] x, double[ ] y) { double s = 0; try { for (int i = 0; i < 10; i++) s += dividir(x[i],y[i]); }catch (eDivisionPorCero e) { } return s; }

Jerarquías de excepciones

Aserciones Buenas para depuración assert (b == 0): "la variable b no debe valer cero"; Respuesta: Exception in thread "main" java.lang.AssertionError: la variable b no debe valer cero at PruebaAserciones.main(PruebaAserciones.java:3) Y buenas como documentación

Página 28Algoritmos y Programación III Carlos Fontela, 2006 Comprobación de estados Enfrentar problemas en tiempo de ejecución: double r = x / y; ¡y puede ser 0! Matriz a = b.inversa(); ¡b puede ser no invertible! ¿Cómo enfrentamos los problemas?

Página 29Algoritmos y Programación III Carlos Fontela, 2006 Enfoques conservadores (I) if (y != 0) double r = x / y; else System.out.println (“Valor de y inválido”); Estoy suponiendo que el resultado no era importante. Y que el mensaje tiene sentido para el usuario final. boolean error; double r; if (y != 0) {r = x / y; error = false; } else error = true; Supongo que el programador cliente sabrá qué hacer con “error”.

Página 30Algoritmos y Programación III Carlos Fontela, 2006 Enfoques conservadores (II) while (y == 0) { System.out.println(“Valor y inválido, ingrese otro”); leer(y); } double r = x / y; Supongo que el usuario final sabe de qué le estoy hablando. do { } while (y != 0); // espera que el estado cambie double r = x / y; Supongo que otro hilo vendrá en mi ayuda.

Página 31Algoritmos y Programación III Carlos Fontela, 2006 Enfoques conservadores (III) Los más simples son ingenuos Los parámetros de error: Envían el problema a un contexto que tal vez no los pueda resolver. Son tediosos de verificar y en general no se verifican. Acoplan mucho el código “bueno” con el de tratamiento de problemas.

Página 32Algoritmos y Programación III Carlos Fontela, 2006 Enfoques optimistas El conservador dice: “Compruebo primero y luego actúo”. El optimista: “Pruebo actuar y resuelvo en el caso de hallar problemas”. ¿Cómo encaro el enfoque optimista? Excepciones.

Página 33Algoritmos y Programación III Carlos Fontela, 2006 Qué sigue Modelo de datos Clonación Recolección de basura Reflexión y RTTI Paramos con la programación Desarrollo orientado a objetos Pruebas Documentación Arquitecturas

Muchas Gracias. Carlos Fontela, 2006