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.

Slides:



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

CJ02 – Técnicas avanzadas en java 1.4 y 5.0
FACHADA COMPOSITOR MEMENTO
Curso de Java Capitulo 7: Conceptos sobre poo Profesor:
Lenguaje de programación Java
Programación II Listas
Arquitectura CLARO-TECNOTREE
Desarrollo de Aplicaciones para Internet
Capitulo 3 Java util.
1.2 Sintaxis del lenguaje Java.
Aplicación del paradigma orientado a objetos
Encapsulamiento y Abstracción
Marzo 2007 Lenguajes Visuales Clase III.
PROGRAMACIÓN EN JAVA Curso-taller inicial de programación en JAVA Facultad de Estadística e Informática TEMA II.
SISTEMAS DE LA INFORMACIÓN
JAVA 1.5 Fernando Almeida Octubre Introducción Java Specification Request (JSR) 14Java Specification Request (JSR) 14 propone introducir tipos y.
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.
Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar.
Tema 6: Clases Antonio J. Sierra.
Técnicas avanzadas de programación Interfaces
Colecciones.
Igor Santos Grueiro. Ahora tenemos datos y datos …
Diseño de Sistemas. Patrones de Diseño. Geronimo Manso.
SCJP Sun Certified Programmer for Java 6
Modelado Arquitectónico
Semana 5 Subprogramas..
Patrón Observador Un patrón de diseño es una descripción de clases y objetos comunicándose entre si adaptada para resolver un problema de diseño general.
El lenguaje de programación Java
Programación Orientada a Aspectos (POA)
Capítulo 1 “Elementos de Programación”
ESTRUCTURA DE DATOS EN JAVA
El lenguaje de programación Java
Patrones de diseño DECORATOR Mario Rodríguez Martín
Computación II Unidad X Manejo de Excepciones. Presentación de la Unidad Objetivos: –Saber manejar situaciones inesperadas dentro de un programa –Comprender.
Informática Ingeniería en Electrónica y Automática Industrial
Enterprise Java Beans. EJBs Beans gestionados por un contenedor del servidor de aplicaciones para gestionar el acceso a recursos (bases de datos, colas.
Estructuras de Control.
Patrones de Diseño Carolina Perozo Julio Padrón Anthony Accardi.
PATRON PROTOTYPE Cristina Merino Héctor Carbajo Alicia Arroyo.
Metodología de Programación Ayudantía 5 lelagos.ublog.cl 2009.
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.
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.
Colecciones en JAVA José Luis Redondo García.
Presentado por: PABLO ANDRES DIAZ SAIN HASSAM CAICEDO
TEMA 9: DIAGRAMA DE CLASE EN UML
PROGRAMACIÓN ORIENTADA A OBJETOS Unidad 1 GENERICIDAD
Patrones de diseño equipo n.1
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.
Desarrollador Profesional de Juegos Programación III Unidad I Excepciones Tipos.
Tratamientos Secuenciales Generalizados II Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 19 Versión
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.
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.
Tema 8: Programación estructurada Introducción La importancia del conocimiento de programación es mucho mayor de lo que se piensa. Aprender a programar.
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.
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
Iterables virtuales Concepto, Metodología de desarrollo y Ejemplos Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión.
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.
Tema 1: Concurrencia con Java
Diseño de tipos: clase PolinomioEntero Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Práctica 8 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:

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 Departamento de Lenguajes y Sistemas Informáticos Versión Unidad Didáctica 13

UD13: Factorías e Iterables Índice  Patrones de diseño  Factorías  Motivación  Implementación  Ejemplos  Ejercicios  Iterables  Motivación  Implementación  Ejemplos  Ejercicios  Resumiendo… 2

Patrones de diseño Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos

UD13: Factorías e Iterables Patrones de diseño I 4  En el mundo del desarrollo software existen problemas recurrentes con soluciones que siguen un mismo patrón.  Se han desarrollado técnicas para solucionar estos problemas denominándolos patrones de diseño o patrones de software.  Los patrones de software se pueden definir como:  soluciones probadas para determinados tipos de problemas que se presentan a menudo en distintos contextos pero con características similares.

UD13: Factorías e Iterables Patrones de diseño II 5  Ventajas de los patrones de software:  Probados, porque han sido usados en múltiples problemas anteriormente.  Reutilizables, porque los problemas que resuelven aparecen repetidos en las aplicaciones.  Expresivos, porque establecen un conjunto común de soluciones aceptadas por los programadores.

UD13: Factorías e Iterables Patrones de diseño III 6 También existen los antipatrones: ◦ Cortar y pegar ◦ Código spaguetti  Flujo de ejecución complicado y demasiado variable (múltiples return, sentencias de salto…). ◦ Objeto todopoderoso  Una sola clase concentra toda la funcionalidad de la aplicación. ◦ Poltergeist  Emplear objetos cuyo único propósito es pasar información a terceros. ...

UD13: Factorías e Iterables Patrones de diseño IV 7 Tipos de patrones: 1. Creacionales  Ejemplo: Factorías 2. Estructurales  Ejemplo: Adaptadores 3. De comportamiento  Ejemplo: Iteradores

Factorías Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos

UD13: Factorías e Iterables Factorías: Motivación I 9 Programador El programador necesita manejar racionales en su aplicación Interfaces Racional…otras… Clases RacionalImplRacionalImpl2…otras… Biblioteca disponible El programador debe buscar qué interfaz y qué clase necesita

UD13: Factorías e Iterables Factorías: Motivación II 10  Problemas del enfoque tradicional: 1. El programador necesita acceso total a las clases y debe escoger una. 2. Cambiar su elección implica cambiar muchas líneas de código.  La factoría permite al programador: 1. Usar el tipo de la interfaz sin preocuparse de su implementación. 2. Sustituir una implementación por otra modificando sólo el código de la factoría.

UD13: Factorías e Iterables Factorías: Implementación 11  Las factorías serán clases que contendrán uno o varios métodos estáticos que devuelvan objetos del tipo adecuado.  Generalmente habrá un método estático por cada constructor de la clase que se utiliza.  Con los constructores, se construyen los objetos que devuelve cada método de la factoría.

UD13: Factorías e Iterables Factorías: Ejemplos I 12 package utiles; public class Racionales { public static Racional create() { return new RacionalImpl(); } public static Racional create(Integer numerador) { return new RacionalImpl(numerador); } public static Racional create(Integer numerador, Integer denominador) { return new RacionalImpl(numerador,denominador); }

UD13: Factorías e Iterables Factorías: Ejemplos II 13 package utiles; public enum TipoRacional { BASICO, SIMPLIFICADO } package utiles; public class Racionales { private static TipoRacional opcion = TipoRacional.BASICO; public static void setOpcion(TipoRacional n) { opcion = n; } …

UD13: Factorías e Iterables 14 Factorías: Ejemplos III … public static Racional create() { Racional r = null; switch (opcion) { case BASICO: r = new RacionalImpl(); break; default: r = new RacionalImpl2(); } return r; } public static Racional create(Integer num) { Racional r = null; switch (opcion) { case BASICO: r = new RacionalImpl(num); break; default: r = new RacionalImpl2(num); } return r; } public static Racional create(Integer num, Integer den){ Racional r = null; switch (opcion) { case BASICO: r = new RacionalImpl(num, den); break; default: r = new RacionalImpl2(num, den); } return r; }

UD13: Factorías e Iterables Factorías: Ejercicios  Defina una clase denominada Sets que controle la creación de objetos de tipo Set:  Cree un método para los constructores del tipo HashSet sin parámetros y a partir de un objeto tipo Collection.  Defina una clase denominada Lists que controle la creación de objetos de tipo List:  En función de un atributo configurable, cada método devolverá un objeto de tipo ArrayList o LinkedList. 15

Iterables Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos

UD13: Factorías e Iterables Iterables: Motivación 17 El programador quiere recorrer todos los datos contenidos en un objeto de un tipo Agregado agregado Agregado ¿Puede usarse el for extendido? Y en caso de que se pueda… ¿Cómo sabe la sentencia for cómo extraer los datos del objeto? ¿Cómo sabe cuándo no quedan más datos que recorrer? for ( T elem : agregado) { mostrar(elem); }

UD13: Factorías e Iterables Iterables: Implementación I 18 Para que un tipo agregado pueda recorrerse mediante un for extendido, debe implementar la interfaz java.lang.Iterable. public interface Iterable { Iterator iterator(); }

UD13: Factorías e Iterables Iterables: Implementación II 19 El método iterator() de Iterable devuelve un iterador. La interfaz Iterable permite que el objeto que la implementa se convierta en una factoría de iteradores. Un iterador es un objeto especializado en hacer recorridos. Para que en Java un objeto se considere un iterador, tiene que implementar la interfaz java.util.Iterator: public interface Iterator { boolean hasNext(); T next(); void remove(); }

UD13: Factorías e Iterables Iterables: Implementación III 20  ¿Para qué sirve cada método de un iterador?  boolean hasNext();  Devuelve true si aún quedan elementos por recorrer y false en caso contrario.  T next();  Devuelve el siguiente elemento del recorrido.  Actualiza el estado del iterador para devolver el siguiente elemento de la secuencia en la próxima llamada.  void remove();  Operación opcional que elimina el último elemento devuelto por el iterador.  En FP, nuestros iteradores NO MODIFICARÁN el objeto que se recorre.  Si se invoca el método remove, se lanzará la excepción UnsupportedOperationException

UD13: Factorías e Iterables Iterables: Implementación IV 21 Agregado Iterable Supongamos que la clase Agregado implementa Iterable agregado (Agregado ) Iterator it = ag.iterator(); it (Iterator ) T o = it.next(); o (T)

UD13: Factorías e Iterables 22 for( T elem : agregado) { mostrar(elem); } for(Iterator it = agregado.iterator(); it.hasNext();) { T e = it.next(); mostrar(e); } Iterator it = agregado.iterator(); while (it.hasNext()) { mostrar(it.next()); } Iterables: Implementación V  Traducciones internas del for extendido usando iteradores:

UD13: Factorías e Iterables Iterables: Implementación VI 23  Para implementar una clase que sea Iterable, debemos seguir los pasos: 1. La clase implementará la interfaz Iterable, siendo T el tipo de los elementos que se van a recorrer. 2. Para cada tipo de recorrido que queramos permitir, implementaremos una clase interna, la cual debe implementar Iterator.

UD13: Factorías e Iterables Iterables: Implementación VII El método iterator() devolverá un nuevo objeto de la clase interna oportuna. 4. Los métodos hasNext() y next() de cada clase interna deben implementarse de acuerdo al tipo de recorrido que se esté llevando a cabo. 5. El método remove() (en FP) lanzará siempre la excepción UnsupportedOperationException.

UD13: Factorías e Iterables Iterables: Ejemplos I 25 import java.util.Iterator; import java.util.NoSuchElementException; public class ArrayIterableImpl implements Iterable { private T[] array; public ArrayIterableImpl(T[] array) { this.array = array; } public Iterator iterator() { return new IteradorArray(); } private class IteradorArray implements Iterator { private Integer pos; public IteradorArray() { pos = 0; } public boolean hasNext() { return pos < array.length; } public T next() { if (!hasNext()) { throw new NoSuchElementException(); } T actual = array[pos]; pos++; return actual; } public void remove() { throw new UnsupportedOperationException(); }

UD13: Factorías e Iterables Iterables: Ejercicios  Secuencia aritmética  Cree una clase denominada SecuenciaAritmetica que implemente Iterable.  Los objetos SecuenciaAritmetica se recorrerán mediante un iterador mostrando:  Un valor de la secuencia entre dos números dados que se recogerán como parámetros en el constructor.  El siguiente valor será el resultado de añadir la razón aritmética (también recogida en el constructor) al valor actual.  Nota: este ejercicio se explicará en la unidad didáctica sobre Iterables Virtuales. 26

UD13: Factorías e Iterables Resumiendo… I 27 Una factoría es una clase que nos permite construir objetos de uno o varios tipos, sin necesidad de conocer cuál o cuáles son las clases concretas que los implementan. En FP, implementaremos las factorías mediante clases que contienen métodos estáticos, generalmente uno por cada constructor de la clase que utilicemos.

UD13: Factorías e Iterables Resumiendo… II 28 Para que los datos contenidos por un objeto de una clase puedan ser recorridos mediante un for extendido, la clase debe implementar la interfaz Iterable. Al implementar la interfaz Iterable, la clase incorporará un método iterator() que devuelve un iterador sobre la clase. Dicho iterador determina el tipo de recorrido que se llevará a cabo. El método iterator() puede invocar a su vez al método iterator() de otro objeto, o construir un nuevo objeto de una clase interna que implemente la interfaz Iterator. Pueden existir varios tipos de recorrido para una clase. Para cada tipo de recorrido, debemos disponer de clases distintas que implementen la interfaz Iterator.