La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Tratamientos Secuenciales Generalizados I Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 18 Versión 1.0.0.

Presentaciones similares


Presentación del tema: "Tratamientos Secuenciales Generalizados I Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 18 Versión 1.0.0."— Transcripción de la presentación:

1 Tratamientos Secuenciales Generalizados I Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 18 Versión 1.0.0

2 UD18: Tratamientos Secuenciales Generalizados I Índice 1. Objetivo: generalización de código: librerías de código 2. Metodología: resolución mediante llamadas a librerías 3. Estudio de los métodos correspondientes a los Tratamientos Secuenciales mediante las librerías de Guava Clase Iterables: 1. paraTodo: all 2. existe: any 3. filtrado: filter 4. búsqueda: find

3 UD18: Tratamientos Secuenciales Generalizados I Objetivo Elevamos el nivel de abstracción programando de la forma más general posible de manera que nuestro código será:  más reutilizable  más sencillo de programar  y sobre todo: MÁS SEGURO Cada tratamiento secuencial visto se puede generalizar y ser válido para cualquier problema. De esta forma podemos crearnos librerías de código. Una vez hecho esto, las respuestas a nuestros problemas serán simples llamadas a dichas librerías.

4 UD18: Tratamientos Secuenciales Generalizados I Metodología Por ejemplo, sabemos ya cómo hacer una sumatorio:  p.e.: suma los elementos pares de una lista  ¿cómo hacemos una versión más general? (condición de filtrado del problema) (cálculo de lo que sumo para cada elemento) (elemento que se recorre)

5 UD18: Tratamientos Secuenciales Generalizados I Metodología Versión generalizada para un sumatorio: IDEAS: 1. Uso de tipos genéricos 2. Encapsulación 3. Herencia 4. Uso de Iterables y for extendido

6 UD18: Tratamientos Secuenciales Generalizados I Metodología IDEAS: 1. Trabajamos con tipos genéricos 2. Mediante la encapsulación suministramos como dato del problema: 1. Condición de filtrado: suministramos objeto de tipo Predicate 2. Calculo del problema: suministramos objeto de tipo Function 3. Mediante la herencia hacemos que el método valga para List, Set, etc, es decir: para cualquier Iterable 4. Ocultamos los detalles del recorrido dentro del objeto a recorrer y de esta forma podemos abstraernos del cómo se recorre (uso de Iterable y for extendido)

7 UD18: Tratamientos Secuenciales Generalizados I Metodología uso de tipos genéricosherencia encapsulación uso Iterable (for extendido)

8 UD18: Tratamientos Secuenciales Generalizados I Metodología El método anterior lo programamos en una clase como un método static (por ejemplo en una clase auxiliar IterablesAlumno) y cuando tengamos que resolver un problema en el que intervenga una suma simplemente haremos una llamada: IterablesAlumno.sumatorio(--, --, --) Ejemplo: ¿cuánto vale la suma de los valores pares de una lista de enteros? Se resuelve con una simple llamada:  código más rápido de programar  código más seguro (muy difícil cometer errores)

9 UD18: Tratamientos Secuenciales Generalizados I Metodología Hace falta tener programados previamente el Predicado y la Función. (Generalmente estarán ya hechos si hemos trabajado previamente en el problema)

10 UD18: Tratamientos Secuenciales Generalizados I Metodología 1º) Dado un conjunto de puntos, calcular la distancia media al origen de todos aquellos puntos que se encuentren en el primer cuadrante (de la forma nueva) (como lo hacíamos antes) (en este código programado usando un for y sin usar llamadas a librerías de código hay un fallo: ¿sabrías decir cuál es?)

11 UD18: Tratamientos Secuenciales Generalizados I Metodología Hace falta tener programados previamente el Predicado y la Función

12 UD18: Tratamientos Secuenciales Generalizados I Tratamientos Secuenciales con Guava Metodología de programación: nos basaremos en llamadas a funcionalidades previamente establecidas, i.e., uso de librerías. 1. Librerías programadas por nosotros como el sumatorio 2. Uso de librerías ya establecidas: Las librerías de Guava son una serie de librerías de Java creadas por Google para trabajar con problemas de Colecciones, de concurrencia, etc. http://code.google.com/p/guava-libraries/ http://code.google.com/p/guava-libraries/

13 UD18: Tratamientos Secuenciales Generalizados I Tratamientos Secuenciales con Guava código generado por nosotros código de la API de Java código de las librerías de Guava

14 UD18: Tratamientos Secuenciales Generalizados I Tratamientos Secuenciales con Guava Aquí se puede leer la documentación (javadocs)

15 UD18: Tratamientos Secuenciales Generalizados I Tratamientos Secuenciales con Guava paraTodo: ¿todo elemento verifica la propiedad? En la clase Iterables ( com.google.common.collect ) encontramos método all: dado un Iterable y un predicado, devuelve true si todo elemento del Iterable cumple dicho predicado. Iterables.all(--,--)

16 UD18: Tratamientos Secuenciales Generalizados I Tratamientos Secuenciales: Iterables paraTodo: (Ejemplo) Dado un conjunto de puntos, ¿todos los puntos se encuentran en el primer cuadrante? (en este código programado usando un for y sin usar llamadas a librerías de código hay un fallo: ¿sabrías decir cuál es?)

17 UD18: Tratamientos Secuenciales Generalizados I Tratamientos Secuenciales con Guava

18 UD18: Tratamientos Secuenciales Generalizados I Tratamientos Secuenciales con Guava existe: ¿existe algún elemento que verifica la propiedad? En la clase Iterables ( com.google.common.collect ) encontramos método any: dado un Iterable y un predicado, devuelve true si al menos un elemento del Iterable cumple dicho predicado. Iterables.any(--,--)

19 UD18: Tratamientos Secuenciales Generalizados I Tratamientos Secuenciales con Guava existe: (Ejemplo) Dado un conjunto de puntos, ¿hay alguno en alguna de las bisectrices?

20 UD18: Tratamientos Secuenciales Generalizados I Tratamientos Secuenciales con Guava Nota: este predicado ya ha sido utilizado antes (como ya está hecho no hace falta repetirlo)

21 UD18: Tratamientos Secuenciales Generalizados I Tratamientos Secuenciales con Guava filtrado: generar un nuevo Iterable con aquellos elementos que verifiquen una propiedad En la clase Iterables ( com.google.common.collect ) encontramos método filter: devuelve aquellos elementos del Iterable de entrada que cumplen la propiedad que encapsula el predicado Iterables.filter(--,--)

22 UD18: Tratamientos Secuenciales Generalizados I Tratamientos Secuenciales con Guava filtrado: (Ejemplo) Dado un conjunto de puntos, devolver todos aquellos puntos que se encuentren en las bisectrices. Nota: este predicado ya ha sido utilizado antes

23 UD18: Tratamientos Secuenciales Generalizados I Tratamientos Secuenciales con Guava búsqueda: busca elementos que verifican una determinada propiedad método find: devuelve el primer elemento que verifica la propiedad. En caso de no existir se eleva la excepción: NoSuchelementException Iterables.find(--,--) (segunda versión: da un valor por defecto y si no existe el elemento devuelve dicho valor)

24 UD18: Tratamientos Secuenciales Generalizados I Tratamientos Secuenciales con Guava búsqueda: (Ejemplo) Dado un conjunto de puntos, encontrar el primer punto en orden de aparición que esté en la bisectriz Nota: este predicado ya ha sido utilizado antes


Descargar ppt "Tratamientos Secuenciales Generalizados I Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 18 Versión 1.0.0."

Presentaciones similares


Anuncios Google