Iterables virtuales Concepto, Metodología de desarrollo y Ejemplos Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión.

Slides:



Advertisements
Presentaciones similares
Complejidad Computacional
Advertisements

Complejidad Computacional
Tablas. Descripción general Introducción a las tablas Creación de tablas Uso de tablas.
Defina una clase TempMinEstacion que encapsule la representación de las temperaturas mínimas registradas en una estación meteorológica en un período y.
Archivos Implementar un método que lea una secuencia de números enteros de un archivo y compute la cantidad de elementos leídos.
Lección 1 Introducción a la POO
INFORMATICA I Funciones CLASE 13.
1.2 Sintaxis del lenguaje Java.
UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO
Marzo 2007 Lenguajes Visuales Clase III.
Archivos Contenido: Archivos de Texto Archivos de Acceso Aleatorio
Método 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.
POO Java Módulo 3 Elementos de programas Identificadores
Inicio Java: Algunas utilidades. Inicio Temporización En ingeniería nos encontramos con tareas que deben repetirse de forma periódica. Son tareas temporizadas.
Java Orientado a Objetos CLASES,OBJETOS Y MÉTODOS
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.
Creación de Aplicaciones
Tema 6: Clases Antonio J. Sierra.
Técnicas avanzadas de programación Interfaces
Colecciones.
Input – Scanner y Cajas de diálogo
SCJP Sun Certified Programmer for Java 6
Clase Teórica No. 4 Programación IV
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.
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. SEMANA TRES ASIGNACION.
El lenguaje de programación Java
Java. Java nació el año 1991, por un par de ingenieros de la Sun Microsystems.
Capítulo 1 “Elementos de Programación”
ESTRUCTURA DE DATOS EN JAVA
Patrones Creacionales
El lenguaje de programación Java
Programación Orientada a Objetos usando CONSTRUCTORES DESTRUCTORES.
Computación II Repaso de java Karina Figueroa Mora.
Lenguaje de programación Java UNIVERSIDAD REGIONAL DEL SURESTE.
Herramientas de polimorfismo y herencia en C++
Computación I Primer Semestre 2006 Capítulo IV Ciclos y Colecciones (con un sabor a algoritmos)
Recursividad (2 clases) 1. Nivelación Funciones Menú Vectores String
El lenguaje de programación Java1 8. Colecciones e iteradores - interfaz Collection - clases ArrayList, LinkedList, HashSet, TreeSet - interfaz Map - clases.
Patrón Iterator Santiago García Sánchez Rebeca Marcos Salcedo Mª Cristina Zapatero Gironda.
Colecciones en JAVA José Luis Redondo García.
Detalles Generales sobre Java
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.
Capítulo 2 “Subprogramas/Funciones - Arreglos”
Ing. Esp. Ricardo Cujar.  Lenguaje de programación orientado a objetos.  Desarrollado por Sun MicroSystems.  Independiente del Sistema Operativo gracias.
CICLOS EN C – PARTE 3.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Tipo.
ARREGLOS. La sintaxis para declarar e inicializar un array será: Tipo_de_variable[ ] Nombre_del_array = new Tipo_de_variable[dimensión]; También podemos.
LENGUAJE DE PROGRAMACIÓN
LE, EI, Profesor Ramón Castro Liceaga UNIVERSIDAD LATINA (UNILA) V. GESTIÓN DE TIPOS Y GENERACIÓN DE CÓDIGOS.
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.
1 Métodos. 2 Un método es un conjunto de instrucciones definidas dentro de una clase, que realizan una determinada tarea y a las que podemos invocar mediante.
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,
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.
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.
Introducción al Lenguaje C (I) Tipos básicos, arrays y punteros Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión
Tratamientos secuenciales I Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 8 Versión
UNIVERSIDAD TECNOLÓGICA DE PANAMÁ Facultad de Ingeniería de Sistemas Computacionales Programa de Lic. en Informática Educativa Computación.
ArreglosBidimensionales enjava. Sonestructurasdetamañofijoorganizadasporfilasy columnas. Estas estructuras almacenan valores del MISMO TIPO de dato. Cada.
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.
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
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.
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.
Transcripción de la presentación:

Iterables virtuales Concepto, Metodología de desarrollo y Ejemplos Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión Unidad Didáctica 14

UD14: Iterables virtuales Índice  Concepto  Metodología de implementación  Ejemplos  Secuencia Aritmética  Secuencia Primos  Secuencia Geométrica  Secuencia Aleatoria  Secuencia Fibonacci  Secuencia Captcha

UD14: Iterables virtuales Concepto El programador necesita una secuencia finita de elementos como parte de un procedimiento No es necesario un agregado para almacenarlos Cada elemento se obtiene según un cálculo (método) for( T elem : Iterable ){ UTILIZAR(elem); } X

UD14: Iterables virtuales Metodología de implementación Seguir la metodología vista en la unidad anterior usando una clase interna Iterator. En el constructor de la clase interna se hace un cálculo previo del que sería primer elemento a devolver. En el método next de la clase interna se recupera el elemento previamente calculado (aux  vActual), se calcula el que será el siguiente elemento a devolver y se devuelve (return) el anterior recuperado previamente (aux)

UD14: Iterables virtuales Metodología de implementación Los atributos de la clase Iterable (externa) son visibles desde la clase Iterator (interna) Si la clase interna Iterator necesita solamente un atributo no es necesario definir su constructor. Si se puede obviar el constructor de la clase interna, el que sería primer elemento a devolver deberá inicializar el atributo que lo recoge, llamado normalmente vActual.

UD14: Iterables virtuales Ejemplos: Secuencia Aritmética  Será una clase que permita obtener números reales según un incremento dado  El objetivo es poder operar del siguiente modo: mostrar(“Una secuencia aritmética”); Iterable sa = new SecuenciaAritmetica(1,21,4); for(Double n : sa) { mostrarConRepeticiones(‘z’, (int) n); // muestra una línea en pantalla con el primer parámetro // repetido tantas veces como indica el segundo (n veces) } Una secuencia aritmética z zzzzz zzzzzzzzz zzzzzzzzzzzzz zzzzzzzzzzzzzzzzz zzzzzzzzzzzzzzzzzzzzz

UD14: Iterables virtuales Ejemplos: Secuencia Aritmética import java.util.Iterator; import java.util.NoSuchElementException; public class SecuenciaAritmetica implements Iterable { private Double vInicial, cota, salto; public SecuenciaAritmetica(Double primero, Double limite, Double incremento){ if(incremento 0 && primero>limite)) { throw new IllegalArgumentException("Parámetros no válidos"); } vInicial = primero; cota = limite; salto = incremento; } public Iterator iterator(){ return new IteradorSecuenciaAritmetica( ); } … Continúa…

UD14: Iterables virtuales Ejemplos: Secuencia Aritmética // Comienza la clase interna Iterator private class IteradorSecuenciaAritmetica implements Iterator { private Double vActual = vInicial; public Double next() { if (!hasNext()) throw new NoSuchElementException( ); Double aux = vActual; vActual = vActual + salto; return aux; } public boolean hasNext() { return vActual<=cota; } public void remove() { throw new UnsupportedOperationException( ); } } /* Fin de la clase interna Iterator*/ } // Fin de la clase externa Iterable

UD14: Iterables virtuales Ejemplos: Secuencia Primos  Será una clase que permita obtener todos los números primos entre 1 y n (ambos inclusive)  El objetivo es poder operar del siguiente modo: mostrar(“¿Una secuencia de primos?”); Integer[ ] valores = {10,9,8,7,6,5,4,3,2,1,0}; Iterable sp = new SecuenciaPrimos(10); for(Long x : sp) mostrar(valores[ (int) x]); ¿Una secuencia de primos?

UD14: Iterables virtuales Ejemplos: Secuencia Primos import java.util.Iterator; import java.util.NoSuchElementException; public class SecuenciaPrimos implements Iterable { private long cota; public SecuenciaPrimos(long limite){ if(limite<=0) throw new IllegalArgumentException("El valor final debe ser mayor que 0"); cota = limite; } public Iterator iterator( ) { return new IteradorSecuenciaPrimos( ); } private class IteradorSecuenciaPrimos implements Iterator { private Long vActual = 1; … Continúa…

UD14: Iterables virtuales Ejemplos: Secuencia Primos public boolean hasNext() { return vActual <= cota; } public Long next(){ if (!hasNext()){ throw new NoSuchElementException(); } long aux = vActual; vActual++; while(!Enteros.esPrimo(vActual)) vActual++; return aux; } public void remove( ) { throw new UnsupportedOperationException( ); } } /*Fin de la clase interna (Iterator)*/ } // Fin de la clase externa (Iterable)

UD14: Iterables virtuales Ejemplos: Secuencia Geométrica  Será una clase que permita obtener números reales según una razón dada  El objetivo es poder operar del siguiente modo: mostrar(“Una secuencia geométrica”); Iterable sa = new SecuenciaGeometrica(1,100,5); for(Double n : sa) mostrarConRepeticiones(‘v’, (int) n); Una secuencia geométrica v vvvvv vvvvvvvvvvvvvvvvvvvvvvvvv

UD14: Iterables virtuales Ejemplos: Secuencia Geométrica … // imports public class SecuenciaGeometrica implements Iterable { private Double vInicial, vFinal, razon; public SecuenciaGeometrica(Double vInicial, Double vFinal, Double razon){ if(razon<=1) throw new IllegalArgumentException("La razón debe ser mayor que 1"); if(vInicial>0 && vFinal 0) throw new IllegalArgumentException("Los valores inicial y final deben tener el mismo signo"); if(vInicial==0 || vFinal==0) throw new IllegalArgumentException("Los valores inicial y final deben ser distintos de 0"); if(vInicial<0 && vInicial<vFinal) throw new IllegalArgumentException("El valor inicial debe ser mayor que el valor final para números negativos"); if(vInicial>0 && vInicial>vFinal) throw new IllegalArgumentException("El valor inicial debe ser menor que el valor final para números positivos"); ths.vInicial=vInicial; this.vFinal=vFinal; this.razon=razon; } public Iterator iterator( ) { return new IteradorSecuenciaGeometrica( ); } … Continúa…

UD14: Iterables virtuales Ejemplos: Secuencia Geométrica private class IteradorSecuenciaGeometrica implements Iterator { vActual = vInicial; public Double next() { if (!hasNext()) throw new NoSuchElementException(); Double aux = vActual; vActual = vActual * razon; return aux; } public boolean hasNext( ) { return vFinal>=vInicial ? vActual =vFinal; } public void remove( ) { throw new UnsupportedOperationException( ); } } /*Fin de la clase interna (Iterator)*/ } // Fin de la clase externa (Iterable)

UD14: Iterables virtuales Ejemplos: Secuencia Aleatoria  Será una clase que permita obtener un conjunto finito de números enteros  El objetivo es poder operar del siguiente modo: mostrar(“Una secuencia aleatoria“); Iterable sa = new SecuenciaAleatoria(1,9,6); for(Integer n : sa) mostrarConRepeticiones(n, n); Una secuencia aleatoria

UD14: Iterables virtuales Ejemplos: Secuencia Aleatoria import java.util.Iterator; import java.util.NoSuchElementException; public class SecuenciaAleatoriaNaturales implements Iterable { private Integer menor, mayor, cantidad; public SecuenciaAleatoriaNaturales(Integer cantidad) { if(cantidad =mayor || menor<0) { throw new IllegalArgumentException("Parámetros no válidos"); this.menor = menor; this.mayor = mayor; this.cantidad = cantidad; } public Iterator iterator() { return new IteradorSecuenciaAleatoriaNaturales ( ); } private class IteradorSecuenciaAleatoriaNaturales implements Iterator { private Integer rango, contador; … Continúa…

UD14: Iterables virtuales Ejemplos: Secuencia Aleatoria public IteradorSecuenciaAleatoriaNaturales( ) { rango = mayor-menor; vActual = menor+Math.random()*rango; contador = 1; } public Integer next() { if (!hasNext()) throw new NoSuchElementException(); Integer aux=vActual; vActual = menor+Math.random()*rango; contador++; return aux; } public boolean hasNext() { return contador<=cantidad; } public void remove() { throw new UnsupportedOperationException( ); } } /*Fin de la clase Iterator (interna)*/ } // Fin de la clase Iterable (externa)

UD14: Iterables virtuales  Será una clase iterable que permita obtener un subconjunto finito de los n primeros números de Fibonacci  El objetivo es poder operar del siguiente modo: mostrar(“¿Una secuencia Fibonacci?”); Integer[ ] valores = {10,11,12,13,14,15}; Iterable sp = new SecuenciaFibonacci(5); for(Long x : sp) mostrar(valores[ (int) x]); Ejemplos: Secuencia Fibonacci ¿Una secuencia Fibonacci?

UD14: Iterables virtuales Ejemplos: Secuencia Fibonacci public class SecuenciaFibonacci implements Iterable { private Long cota; public SecuenciaFibonacci(Long limite){ if(limite<0) throw new IllegalArgumentException("El valor final debe ser mayor que 0"); cota = limite; } public Iterator iterator( ) { return new IteradorSecuenciaFibonacci( ); } … Continúa…

UD14: Iterables virtuales Ejemplos: Secuencia Fibonacci private class IteradorSecuenciaFibonacci implements Iterator { private long vActual, vSiguiente,; public IteradorSecuenciaFibonacci( ) { vActual = 0; vSiguiente = 1; } public Long next(){ if (!hasNext()) throw new NoSuchElementException(); Long aux = vActual; vActual = vSiguiente; vSiguiente = aux + vActual; return aux; } public boolean hasNext() { return vActual <= cota; } public void remove() { throw new UnsupportedOperationException( ); } } /*Fin de la clase Iterator*/ } // Fin de la clase Iterable

UD14: Iterables virtuales Ejemplos: Secuencia Captcha  Será una clase que permita obtener un conjunto finito de cadenas de tamaño dado  El objetivo es poder operar del siguiente modo: mostrar(“Una secuencia Captcha“); Iterable sc = new SecuenciaCaptcha(4,6); for(String s: sc) mostrar(s); Una secuencia Captcha ghav lmpj uytd qwri kxzu iebf

UD14: Iterables virtuales Ejemplos: Secuencia Captcha import java.util.Iterator; import java.util.NoSuchElementException; public class SecuenciaCaptcha implements Iterable { private Integer numChars, numCaptchas; public SecuenciaCaptcha(Integer longitud, Integer items) { if(longitud 10 || items 100) throw new IllegalArgumentException("Parámetros no válidos"); numChars = longitud; numCapchas = items; } public Iterator iterator( ) { return new IteradorSecuenciaCaptcha( ); } private class IteradorSecuenciaCaptcha implements Iterator { private Integer contador; private String vAct; Continúa…

UD14: Iterables virtuales Ejemplos: Secuencia Captcha public IteradorSecuenciaCaptcha( ) { contador = 0; vActual = crearCaptcha( ); } public String next() { if (!hasNext()) throw new NoSuchElementException(); String aux=vActual; vActual = crearCaptcha( ); return aux; } public boolean hasNext( ) { return contador<=numCaptchas; } public void remove( ) { throw new UnsupportedOperationException( ); } private String crearCaptcha( ) { … } } /*FIN de la clase Iterator*/ } // FIN de la clase Iterable private String crearCaptcha( ) { String res = "" ; for (int i = 0; i<numChars; i++) { char c = (char) (Math.random()*26 + ‘a’); res+=c; } contador++; return res; }

UD14: Iterables virtuales Clase de utilidad: Factoría Iterables2 public class Iterables2 {... public static Iterable from(String nombreFichero) {…}... } public static void main(String[ ] args) { Iterable lineas = Iterables2.from(“Informaticos.txt“); for(String s: lineas) mostrar(s); } A. Turing C. Shannon D. Engelbart B.W. Kernighan D. M. Ritchie J. Gosling