Implementación de Iterables Construcción de Iterables virtuales o basados en otros iterables Fundamentos de Programación Departamento de Lenguajes y Sistemas.

Slides:



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

Orientación a Objetos con Java SE
Archivos Implementar un método que lea una secuencia de números enteros de un archivo y compute la cantidad de elementos leídos.
Curso de Java Estructura del Lenguaje
1.2 Sintaxis del lenguaje Java.
UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO
Marzo 2007 Lenguajes Visuales Clase III.
Programación II Colas Igor Santos Grueiro.
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.
L ISTAS E NLAZADAS No son mas que un conjunto o lista de objetos que a diferencia de los vectores, estas poseen la capacidad de crecer o decrecer. Por.
Inicio Java: Algunas utilidades. Inicio Temporización En ingeniería nos encontramos con tareas que deben repetirse de forma periódica. Son tareas temporizadas.
Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar.
Técnicas avanzadas de programación Interfaces
Colecciones.
Programación orientada a objetos
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.
ÁRBOLES BINARIOS DE BÚSQUEDA
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SEMANA TRES ASIGNACION.
JAVA J.A.C..
Repaso/resumen 1.lectura/escritura y asignación 2.funciones 3.selección de instrucciones (if-else) 4.repetición de instrucciones (while) 5.recursión 6.operadores/instrucciones.
Capítulo 5 - b: Hilos. 4.2 Silberschatz, Galvin and Gagne ©2005 Operating System Concepts – 7 th edition, Jan 23, 2005 Ejemplo de hilos: un applet Un.
El lenguaje de programación Java
Curso Programación en Java
El lenguaje de programación C - Identificadores y variables – Isidro González Caballero ( Introducción.
Computación II Repaso de java Karina Figueroa Mora.
La sintaxis de un lenguaje define los elementos de dicho lenguaje y cómo se combinan para formar un programa. Los elementos típicos de cualquier lenguaje.
Programación avanzada en Java Miguel Ángel Corella 22 de Septiembre de 2005.
Resumen Fundamentos de Programación/ Programación I
1 1.Rutear public class c2ruteofunciones{ static double a, b, c; public static void p22(double b,double h) { double c; a=6; c = b + h; StdOut.printf("En.
El lenguaje de programación Java1 8. Colecciones e iteradores - interfaz Collection - clases ArrayList, LinkedList, HashSet, TreeSet - interfaz Map - clases.
ELO3291 Estructuras fundamentales de la programación en Java ELO-329: Diseño y programación orientados a objetos Agustín J. González.
Colecciones en JAVA José Luis Redondo García.
Presentado por: PABLO ANDRES DIAZ SAIN HASSAM CAICEDO
1 Ingeniería del Software Colecciones de objetos  Descripción general  Patrón iterador  Iteradores en Java: enumeration  Patrón diccionario  Diccionarios.
/** * Write a description of class General here. */ public class General { // instance variables - replace the example below with your own private int.
Entrada y Salida ES.leerChar (); ES.leerEntero (); ES.leerEnteroLargo (); ES.leerFloat (); ES.leerDouble (); System.out.print System.out.println.
Ing. Esp. Ricardo Cujar.  Lenguaje de programación orientado a objetos.  Desarrollado por Sun MicroSystems.  Independiente del Sistema Operativo gracias.
Listas. Utilización de un TAD Lista. Interfaz del TAD LISTA public interface Lista { void crearNodo (); /*Crea un nuevo nodo en el TadLista*/ int devolverClave.
Algoritmos y Programación III 4. Colecciones, excepciones Carlos Fontela, 2006.
Ing. Esp. Ricardo Cujar. Permite la ejecución de una sentencia, dada una determinada condición. If(condición){ sentencia(s) a ejecutar en caso de que.
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.
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.
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,
LICETH CAJAS 3RO ASI 26/10/2010. Es un lenguaje de programación diseñado para crear una amplia gama de aplicaciones que se ejecutan en.NET Framework,
Reutilización de código Elementos básicos del lenguaje Java Definición de variables, expresiones y asignaciones Fundamentos de Programación Departamento.
Las interfaces Predicate y Function Versión Unidad Didáctica 17 Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos.
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.
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.
Introducción al Lenguaje C (II) Cadenas de caracteres, archivos de cabecera, lectura y escritura Fundamentos de Programación Departamento de Lenguajes.
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.
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.
Iterables virtuales Concepto, Metodología de desarrollo y Ejemplos Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos 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
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.
2012-BM5A. Unos tips antes de empezar: C# es Case Sensitive (sensible a mayúsculas) Pepe ≠ pepe ≠ pEpE Las asignaciones se hacen con “=” y las comparaciones.
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.
Funciones y paso de parámetros Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión Unidad Didáctica 24.
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.
Programación Avanzada
Programación Gráfica 5. Introducción a C++..
Transcripción de la presentación:

Implementación de Iterables Construcción de Iterables virtuales o basados en otros iterables Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión Unidad Didáctica 15

UD15: Implementación de iterables Índice  Implementación de Iterables virtuales  Secuencia áurea  Implementación de Iterables basados en otros  Vector multirrecorrido  Iterable cadena bidireccional  Cadena Partida  Ejercicios propuestos de Iterables virtuales  Secuencia dígitos de un entero  Secuencia de caracteres encriptados  Secuencia de caracteres desencriptados

UD15: Implementación de iterables Iterables: Secuencia Áurea // Esta secuencia está formada por los cocientes de dos // números de Fibonacci consecutivos public class SecuenciaAurea implements Iterable { private Integer numGenerados; public SecuenciaAurea(Integer numGenerados) { if (numGenerados <= 0){ throw new IllegalArgumentException("El valor debe ser mayor que 0"); } this.numGenerados = numGenerados; } public Iterator iterator() { return new IteradorSecuenciaAurea(numGenerados); }

UD15: Implementación de iterables Iterables: Secuencia Áurea private class IteradorSecuenciaAurea implements Iterator { private long vActual, vAnterior; private Integer numGenerados; public IteradorSecuenciaAurea(Integer numGenerados) { vActual = 1; vAnterior = 1; this.numGenerados = numGenerados; } public boolean hasNext() { return numGenerados > 0; }

UD15: Implementación de iterables Iterables: Secuencia Áurea public Double next() { if (!hasNext()) { throw new NoSuchElementException(); } Double aureo = new Double(vActual) / new Double(vAnterior); Long i = vActual; vActual = vAnterior + vActual; vAnterior = i; numGenerados--; return aureo; } public void remove() { throw new UnsupportedOperationException(); } } // Fin clase interna } // Fin clase

UD15: Implementación de iterables Iterables: Cadena bidireccional public class CadenaBidireccional implements Iterable { private boolean direccionInversa; private String cadenaAIterar; public CadenaBidireccional(String cad) { if (cad == null){ throw new IllegalArgumentException(); } cadenaAIterar = cad; } public void setDireccionInversa(boolean inversa) { direccionInversa = inversa; } public Iterator iterator() { if (direccionInversa) { return new IteradorCadenaInverso(); } else { return new IteradorCadenaNormal(); }

UD15: Implementación de iterables Iterables: Cadena bidireccional private class IteradorCadenaNormal implements Iterator { private Integer posActual; public IteradorCadenaNormal() { posActual = 0; } public boolean hasNext() { return posActual < cadenaAIterar.length(); } public Character next() { if (!hasNext()) { throw new NoSuchElementException(); } Character res = cadenaAIterar.charAt(posActual); posActual++; return res; } public void remove() { throw new UnsupportedOperationException(); }

UD15: Implementación de iterables private class IteradorCadenaInverso implements Iterator { private Integer posActual; public IteradorCadenaInverso() { posActual = cadenaAIterar.length()-1; } public boolean hasNext() { return posActual>=0; } public Character next() { if (!hasNext()){ throw new NoSuchElementException(); } Character res = cadenaAIterar.charAt(posActual); posActual--; return res; } public void remove() { throw new UnsupportedOperationException(); } } // Fin clase interna } // Fin clase Iterables: Cadena bidireccional

Iterables: VectorMultiRecorrido public class VectorMultiRecorrido extends Vector implements Iterable { private static final long serialVersionUID = 1L; private TiposRecorridoVector tipoRecorrido; public VectorMultiRecorrido(TiposRecorridoVector tipo) { tipoRecorrido = tipo; } public void setRecorrido(TiposRecorridoVector tipo) { tipoRecorrido = tipo; } public enum TiposRecorridoVector { normal,inverso,pares,aleatorio }

UD15: Implementación de iterables Iterables: VectorMultiRecorrido public Iterator iterator() { Iterator itor = null; switch (tipoRecorrido){ case normal: itor = super.iterator(); break; case inverso: itor = new IteradorVectorInverso(); break; case pares: itor = new IteradorVectorPosicionesPares(); break; case aleatorio: Vector aux = new Vector (this); Collections.shuffle(aux); itor = aux.iterator(); break; } return itor; }

UD15: Implementación de iterables Iterables: VectorMultiRecorrido private class IteradorVectorInverso implements Iterator { private Integer pos; public IteradorVectorInverso() { pos = size() - 1; } public boolean hasNext() { return pos >= 0; } public T next() { if (!hasNext()) { throw new NoSuchElementException(); } T actual = get(pos); pos--; return actual; } public void remove() { throw new UnsupportedOperationException(); }

UD15: Implementación de iterables Iterables: VectorMultiRecorrido private class IteradorVectorPosicionesPares implements Iterator { private Integer pos; public IteradorVectorPosicionesPares() { pos = 0; } public boolean hasNext() { return pos < size(); } public T next() { if (!hasNext()) { throw new NoSuchElementException(); } T actual = get(pos); pos = pos + 2; return actual; } public void remove() { throw new UnsupportedOperationException(); } }/ / Fin clase interna }/ / Fin clase

UD15: Implementación de iterables Iterables: Test public static void main(String[] args) { SecuenciaAurea sa = new SecuenciaAurea(10); mostrar(sa); CadenaBidireccional ca = new CadenaBidireccional("abcde"); mostrar(ca); ca.setDireccionInversa(true); mostrar(ca); VectorMultiRecorrido l = new VectorMultiRecorrido (TiposRecorridoVector.normal); l.add(3); l.add(6); l.add(9); l.add(12); mostrar(l); l.setRecorrido(TiposRecorridoVector.aleatorio); mostrar(l); l.setRecorrido(TiposRecorridoVector.inverso); mostrar(l); l.setRecorrido(TiposRecorridoVector.pares); mostrar(l); }

UD15: Implementación de iterables Iterables: Test ejecución Secuencia áurea 1.0,2.0,1.5, ,1.6,1.625, , , , Cadenas Directa: a,b,c,d,e Inversa : e,d,c,b,a Vector Directa: 3,6,9,12 Aleatorio: 9,3,12,6 Inversa : 12,9,6,3 Pares: 3,9

UD15: Implementación de iterables Iterables: Cadena Partida public class CadenaPartida implements Iterable { private Vector v = new Vector (); public CadenaPartida(String cad, Character separador) { if (cad == null){ throw new IllegalArgumentException(); } String delim = "" + separador; StringTokenizer st = new StringTokenizer(cad,delim); while(st.hasMoreTokens()) v.add(st.nextToken()); } public CadenaPartida(String cad, String separador) { if (cad == null) { throw new IllegalArgumentException(); } StringTokenizer st = new StringTokenizer(cad,separador); while(st.hasMoreTokens()) v.add(st.nextToken()); } public Iterator iterator() { return v.iterator(); }

UD15: Implementación de iterables Iterables: Cadena Partida 2 public class CadenaPartida2 implements Iterable { private String cadenaAPartir; private Character separador; public CadenaPartida2(String cad, Character separador) { if (cad == null ){ throw new IllegalArgumentException(); } cadenaAPartir = cad; this.separador = separador; } public Iterator iterator() { return new IteradorCadenaPartida(); }

UD15: Implementación de iterables Iterables: Cadena Partida 2 private class IteradorCadenaPartida implements Iterator { private Integer posActual,posSiguiente; private String res = null; public IteradorCadenaPartida() { posActual = 0; while (posActual<cadenaAPartir.length() && cadenaAPartir.charAt(posActual) == separador) { posActual++; } if (posActual != cadenaAPartir.length()) { posSiguiente = cadenaAPartir.indexOf(separador,posActual); if (posSiguiente == -1){ posSiguiente = cadenaAPartir.length(); } res = cadenaAPartir.substring(posActual,posSiguiente); } public boolean hasNext() { return res != null; }

UD15: Implementación de iterables Iterables: Cadena Partida 2 public String next() { String s = res; if (!hasNext()) { throw new NoSuchElementException(); } posActual = posSiguiente + 1; while(posActual<cadenaAPartir.length() && cadenaAPartir.charAt(posActual) == separador){ posActual++; } if (posActual >= cadenaAPartir.length()) res = null; else { posSiguiente = cadenaAPartir.indexOf(separador,posActual); if (posSiguiente == -1) { posSiguiente = cadenaAPartir.length(); } res = cadenaAPartir.substring(posActual,posSiguiente); } return s; } public void remove() { throw new UnsupportedOperationException();} } } / / Fin clase interna }/ / Fin clase

UD15: Implementación de iterables Test: Cadena Partida import agregados.CadenaPartida; import agregados.CadenaPartida2; public class TestCadenaPartida extends Test { public static void main(String[] args) { CadenaPartida cp = new CadenaPartida(" aa bb cc c dd ",' '); mostrar(cp); CadenaPartida cp2_b = new CadenaPartida(" a,a b,b c,c c d,d ",", "); mostrar(cp2_b); CadenaPartida2 cp2 = new CadenaPartida2(" aa bb cc c dd ",' '); mostrar(cp2); } Salida de las cadenas partidas aa|bb|cc|c|dd| a|a|b|b|c|c|c|d|d| aa|bb|cc|c|dd|

UD15: Implementación de iterables Índice  Implementación de Iterables virtuales  Secuencia áurea  Implementación de Iterables basados en otros  Vector multirrecorrido  Iterable cadena bidireccional  Cadena Partida  Ejercicios propuestos de Iterables virtuales  Secuencia dígitos de un entero  Secuencia de caracteres encriptados  Secuencia de caracteres desencriptados

UD15: Implementación de iterables Iterables: Secuencia dígitos de un entero package secuencias; import java.util.Iterator; import java.util.NoSuchElementException; // Devuelve la secuencias de dígitos que forman un número entero comenzando // por el último y hasta el primero. public class SecuenciaDigitos implements Iterable { private Long valor; public SecuenciaDigitos(Long v) { if (v <= 0){ throw new IllegalArgumentException("El valor debe ser mayor que 0"); } valor = v; } public Iterator iterator() { return new IteradorSecuenciaDigitos(); }

UD15: Implementación de iterables Iterables: Secuencia dígitos de un entero private class IteradorSecuenciaDigitos implements Iterator { private long v; public IteradorSecuenciaDigitos() { v = valor; } public boolean hasNext() { return v != 0; } public Integer next(){ Integer digito; if (!hasNext()) { throw new NoSuchElementException(); } digito = (int) v % 10; v = v / 10; return digito; } public void remove() { throw new UnsupportedOperationException(); } } // Fin clase interna } // Fin clase

UD15: Implementación de iterables Iterables: Secuencia caracteres encriptados 1. Cree una clase que nos permita iterar por un objeto String pero devolviéndonos los caracteres correspondientes de una tabla de encriptación. Por ejemplo la siguiente correspondencia: "* abcdefghijklmnñopqrstuvwxyz"; "*qwertyuiopasdfghjklñzxcvbnm "; Observe que al espacio en blanco le corresponde la q y a la z el espacio en blanco. Los caracteres no contemplados los pasará a *. 2. Cree una clase que nos permita iterar por un objeto encriptado de la forma anterior devolviendo los caracteres desencriptados.

UD15: Implementación de iterables Iterables: Secuencia caracteres encriptados public class SecuenciaCaracteresEncriptada implements I Iterable { private String cadena; private static final String s1 = "* abcdefghijklmnñopqrstuvwxyz"; private static final String s2 = "*qwertyuiopasdfghjklñzxcvbnm "; public SecuenciaCaracteresEncriptada(String s) { cadena = s; } public SecuenciaCaracteresEncriptada(Iterable s) { cadena = null; for(Character c:s) { cadena = cadena.concat(c.toString()); } public Iterator iterator() { return new IteradorCaracteresEncriptados(); }

UD15: Implementación de iterables Iterables: Secuencia caracteres encriptados private class IteradorCaracteresEncriptados implements Iterator { private Integer i; public IteradorCaracteresEncriptados() { i = 0; } public boolean hasNext() { return i < cadena.length(); } public Character next() { if (!hasNext()) throw new NoSuchElementException(); char c = cadena.charAt(i++); int p1= s1.indexOf(c); if (p1 == -1) p1 = 0; return s2.charAt(p1); } public void remove(){ throw new UnsupportedOperationException(); } } // Fin clase interna } // Fin clase

UD15: Implementación de iterables Iterables: Secuencia caracteres desencriptados public class SecuenciaCaracteresDesencriptada implements Iterable { private Iterable itec; private static final String s1 = "* abcdefghijklmnñopqrstuvwxyz"; private static final String s2 = "*qwertyuiopasdfghjklñzxcvbnm "; public SecuenciaCaracteresDesencriptada(Iterable s) { itec = s; } public SecuenciaCaracteresDesencriptada(String s){ itec = new CadenaBidireccional(s); } public Iterator iterator(){ return new IteradorCaracteresDesencriptados(); }

UD15: Implementación de iterables Iterables: Secuencia caracteres desencriptados private class IteradorCaracteresDesencriptados implements Iterator { private Iterator itoc; public IteradorCaracteresDesencriptados() { itoc = itec.iterator(); } public boolean hasNext(){ return i < cadena.length(); } public Character next() { if (!hasNext()) throw new NoSuchElementException(); char c = itoc.next(); int p1 = s2.indexOf(c); if (p1 == -1) p1 = 0; return s1.charAt(p1); } public void remove() { throw new UnsupportedOperationException(); } } /* Fin clase interna */ } // Fin clase