Las interfaces Predicate y Function Versión 1.0.2 Unidad Didáctica 17 Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos.

Slides:



Advertisements
Presentaciones similares
PROGRAMACION ORIENTADA A OBJETOS
Advertisements

Pilas y Colas Fundamentos Estructuras de Datos (Programación 2)
EC. DIFERENCIAL Def: Se llama ecuación diferencial a una relación que contiene una o varias derivadas de una función no especificada “y” con respecto.
Lenguaje de programación Java
Organización de Computadoras UNLA
Desarrollo de Aplicaciones para Internet
1.1 Concepto de Tipo de Datos Abstracto.
POO en C++: Sintaxis En el .h debe aparecer la declaración de la clase: class NombreClase { private: // atributos y métodos privados public: // atributos.
Genéricos en Java Jaime Ramírez, Ángel Lucas González
Tema 5 Grafos..
Tema 5 Grafos. Implementación (I)..
1.2 Sintaxis del lenguaje Java.
Preguntas tipo test (Tema I)
DIAGRAMAS DE CLASES Completando los diagramas de interacción, es posible identificar la especificación de las clases que participarán en la solución indicando.
Encapsulamiento y Abstracción
Abstracción de Datos La abstracción es un recurso fundamental en la programación orientada a objetos y está además fuertemente ligado a reusabilidad.
Programación Orientada a Objetos usando C++
Tema 6: Clases Antonio J. Sierra.
Técnicas avanzadas de programación Interfaces
DPTO. MATEMÁTICAS - I.E.S. PABLO SERRANO
Igor Santos Grueiro. Ahora tenemos datos y datos …
TEMA Nº 1 Conjuntos numéricos.
ESTRUCTURA DE DATOS EN JAVA
Programación Orientada a Objetos usando CONSTRUCTORES DESTRUCTORES.
Descomposición Factorial Unidad 5
Propiedades de los determinantes.
Control de errores visual basic
MATEMÁTICAS 3º DIVERSIFICACIÓN
Estructuras de Control.
Módulo 7: Programación Orientada a Objetos en Visual Basic 2005.
Razonamiento Cuantitativo
Grafos..
Tema 2: Base de datos relacionales
Metodología de Programación Ayudantía 5 lelagos.ublog.cl 2009.
Sara Isabel Osorio Alacraz Ana Isabel Vallejo Grisales
Interfaces y Clases Internas ELO329: Diseño y Programación Orientados a Objetos.
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.
Unidad 2.1: INTRODUCCIÓN A LA ORIENTACIÓN A OBJETOS.
Ecuaciones Algebraicas
Detalles Generales sobre Java
C OLEGIO DE B ACHILLERES N O.13 X OCHIMILCO, T EPEPAN C ARRASCO G ARCÍA L ORENA T ORRES H EREDIA C ARLA P ALMIRA G RUPO : 308 M ATUTINO E QUIPO : 12.
Tema: Propiedades de los determinantes
2008 Escuela de Informática y Telecomunicaciones, DuocUC Escuela de Informática y Telecomunicaciones Clase 9: Funciones, variables y arreglos en BASH Nombre.
UNIVERSIDAD DE GUADALAJARA Centro Universitario de Ciencias Económico Administrativas Departamento de Métodos Cuantitativos Ciclo 2012-A Curso Propedéutico.
“variables , sentencia if y bucles”
Colegio de Bachilleres Plantel 13 Xochimilco - Tepepan
ARREGLOS BIDIMENSIONALES MATRICES Son un espacio de almacenamiento continuo, que contiene una serie de elementos del mismo tipo de datos. Desde el punto.
Lenguaje de Programación LISP
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Tipo.
ARRAYS Y COLECCIONES DE DATOS. ARRAYS Arrays – Matriz – Vector Elemento del lenguaje que nos permite agrupar un conjunto de valores del mismo tipo, y.
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.
:: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación.
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,
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.
Tratamientos secuenciales I Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 8 Versión
1 Clase 6: control (1ª parte) iic1102 – introducción a la programació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.
Criterios de ordenación y Guava Comparator, Comparable y Ordering Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión.
Tratamientos Secuenciales Generalizados I Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 18 Versión
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.
Introducción Todos los lenguajes de programación son distintos entre si. Sin embargo, pueden ser agrupados según la forma de pensar y estructurar los.
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.
Criterios de divisibilidad
Transcripción de la presentación:

Las interfaces Predicate y Function Versión Unidad Didáctica 17 Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos

UD17: Las interfaces Predicate y Function Índice  La interfaz Predicate  Definición y ejemplos de uso  Predicados configurables  Ejercicios  La interfaz Function  Definición y ejemplos de uso  Funciones configurables  Ejercicios  Las clases de utilidad Predicates y Functions  Ejercicios

La interfaz Predicate Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos

UD17: Las interfaces Predicate y Function La interfaz Predicate Es una interfaz de la biblioteca Guava: Nos permite encapsular en objetos propiedades o condiciones relativas al tipo T. Estos objetos serán utilizados como parámetros de métodos que implementan tratamientos secuenciales genéricos. public interface Predicate { public boolean apply(T o); }

UD17: Las interfaces Predicate y Function La interfaz Predicate Para encapsular una determinada propiedad o condición, debemos definir una clase que implemente la interfaz Predicate: El método apply devuelve true si el objeto recibido como parámetro cumple la propiedad o condición que estamos representando. public class PredicadoConcreto implements Predicate { // … Atributos y constructores public boolean apply(T o) { //... }

UD17: Las interfaces Predicate y Function La interfaz Predicate Veamos un ejemplo. Supongamos que queremos representar la propiedad de los racionales consistente en que su valor sea entero: El siguiente código muestra como comprobar si un racional cumple la propiedad anterior: public class PredicadoRacionalEntero implements Predicate { public boolean apply(Racional o){ return (o.getNumerador() % o.getDenominador()) == 0; } Racional r1; //... inicializar r1 Predicate propiedad1 = new PredicadoRacionalEntero(); if (propiedad1.apply(r1)) mostrar(“El racional “ + r1 + ” cumple la propiedad.”);

UD17: Las interfaces Predicate y Function La interfaz Predicate Fíjese en que el código para comprobar si un racional cumple otra propiedad será el mismo, intercambiando la llamada al constructor de la clase PredicadoRacionalEntero por una llamada al constructor de otra clase que implemente la propiedad deseada. Racional r1; //... inicializar r1 Predicate propiedad1 = new... //...constructor de clase que implementa Predicate ; if (propiedad1.apply(r1)) mostrar(“El racional “ + r1 + ” cumple la propiedad.”);

UD17: Las interfaces Predicate y Function La interfaz Predicate En Guava, existen determinados métodos que reciben objetos de tipo Predicate como argumentos, y emplean las propiedades o condiciones encapsuladas en ellos para llevar a cabo distintas tareas sobre agregados: Veremos el uso de all y otros métodos de Guava en próximas unidades didácticas. List listaRacionales; // … inicializar la lista y añadir los racionales oportunos Predicate propiedad1 = new PredicadoRacionalEntero(); if (Iterables.all(listaRacionales,propiedad1)) { mostrar(“Todos los racionales de la lista cumplen la propiedad.”) }

UD17: Las interfaces Predicate y Function La interfaz Predicate En ocasiones, será interesante disponer de predicados configurables, esto es, que permitan representar no una única propiedad o condición, sino todo un conjunto de ellas. En estos casos, incluiremos atributos en la clase para representar los parámetros de configuración, e incluiremos un constructor que permita asignar valores a los parámetros. public class PredicadoConfigurable implements Predicate { // Atributos de configuración //... // Constructor que reciba los valores para los atributos // … public boolean apply(T o) { //... }

UD17: Las interfaces Predicate y Function La interfaz Predicate Veamos un ejemplo de predicado configurable. Supongamos que queremos representar la propiedad de los racionales consistente en que su valor sea mayor o igual a un valor entero dado: public class PredicadoRacionalMayor implements Predicate { private Integer umbral; public PredicadoRacionalMayor(Integer u) { umbral = u; } public boolean apply(Racional o) { return o.getNumerador() / o.getDenominador() >= umbral; }

UD17: Las interfaces Predicate y Function La interfaz Predicate (Ejercicios propuestos)  En cada caso, defina una clase que implemente el predicado descrito: 1)Un racional tiene un denominador igual a 1. 2)Un racional tiene un denominador igual a un entero dado. 3)Un racional es menor que un racional dado. 4)Una lista de tipo T es vacía. 5)Una lista de tipo T contiene un objeto dado. 6)Una lista de objetos comparables está ordenada de menor a mayor según el orden natural de los objetos de la lista.

La interfaz Function Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos

UD17: Las interfaces Predicate y Function La interfaz Function Es otra interfaz de la biblioteca Guava: Nos permite encapsular en objetos funciones de F → T. Es decir, funciones que permiten obtener un objeto de tipo T a partir de un objeto de tipo F. Estos objetos serán utilizados como parámetros de métodos que implementan tratamientos secuenciales genéricos. public interface Function { public T apply(F o); }

UD17: Las interfaces Predicate y Function La interfaz Function Para encapsular una determinada función, debemos definir una clase que implemente la interfaz Function: El método apply devuelve el objeto resultado de aplicar la función al objeto recibido como argumento. public class FuncionConcreta implements Function { // … Atributos y constructores public T apply(F o) { //... }

UD17: Las interfaces Predicate y Function La interfaz Function Veamos un ejemplo. Supongamos que queremos representar la función que a partir de un racional nos devuelve su valor de tipo Double: El siguiente código muestra como aplicar la función a un racional: public class FuncionRacionalValor implements Function { public Double apply(Racional o) { return 1.0 * o.getNumerador()/ o.getDenominador(); } Racional r1; //... inicializar r1 Function funcion1=new FuncionRacionalValor(); Double resultado = funcion1.apply(r1); mostrar(“El resultado de aplicar la función al racional es: “,resultado);

UD17: Las interfaces Predicate y Function La interfaz Function Fíjese en que el código para aplicar al racional otra función será el mismo, intercambiando la llamada al constructor de la clase FuncionRacionalValor por una llamada al constructor de otra clase que implemente la función deseada. Racional r1; //... inicializar r1 Function funcion1 = new... // constructor de la clase que implementa la función deseada Double resultado = funcion1.apply(r1); mostrar(“El resultado de aplicar la función al racional es: “, resultado);

UD17: Las interfaces Predicate y Function La interfaz Function En Guava, existen determinados métodos que reciben objetos de tipo Function como argumentos, y emplean la función encapsulada en ellos para llevar a cabo distintas tareas sobre agregados: Veremos el uso de transform y otros métodos de Guava en próximas unidades didácticas. List listaRacionales; // … inicializar la lista y añadir los racionales oportunos Function funcion1 = new FuncionRacionalValor(); Iterable listaValores = Iterables.transform(listaRacionales, funcion1); mostrar(“La lista de valores de los racionales es: “, listaValores);

UD17: Las interfaces Predicate y Function La interfaz Function En ocasiones, será interesante disponer de funciones configurables, esto es, que permitan representar no una única función, sino todo un conjunto de ellas. En estos casos, incluiremos atributos en la clase para representar los parámetros de configuración, e incluiremos un constructor que permita asignar valores a los parámetros. public class FuncionConfigurable implements Function { // Atributos de configuración //... // Constructor que reciba los valores para los atributos // … public T apply(F o) { //... }

UD17: Las interfaces Predicate y Function La interfaz Function Veamos un ejemplo de función configurable. Supongamos que queremos representar la función que, a partir de un racional, devuelve el racional resultante de multiplicarlo por un entero dado: public class FuncionRacionalMultiplica implements Function { private Integer factor; public FuncionRacionalMultiplica(Integer f) { factor = f; } public Racional apply(Racional o) { return new RacionalImpl(o.getNumerador() * factor, o.getDenominador()); }

UD17: Las interfaces Predicate y Function La interfaz Function (Ejercicios propuestos)  En cada caso, defina una clase que implemente la función descrita: 1)Dado un racional, devuelve el numerador. 2)Dado un racional, devuelve el máximo común divisor del numerador y el denominador. Utilice el método Enteros.mcd(a,b). 3)Dado un racional, devuelve el mínimo común múltiplo del denominador y de un número entero dado. Utilice el método Enteros.mcm(a,b). 4)Dada una lista de tipo T, devuelve el número de elementos de la lista. 5)Dada una lista de tipo T, devuelve el elemento que está en la primera posición de la lista, o null si la lista está vacía. 6)Dada una lista de tipo T, devuelve otra lista con los primeros n elementos de la lista. Si la lista tiene menos de n elementos, devuelve una lista con todos los elementos de la primera.

Las clases Predicates y Functions Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos

UD17: Las interfaces Predicate y Function La clase Predicates  La clase Predicates de Guava contiene métodos que permiten obtener predicados a partir de la transformación o combinación de otros predicados:  Predicates.not(p1): devuelve un predicado que será cierto en los casos en que el predicado p1 sea falso, y viceversa.  Predicates.and(p1,p2,...): devuelve un predicado que será cierto sólo en los casos en que todos los predicados pasados como argumentos sean ciertos.  Predicates.or(p1,p2,...): devuelve un predicado que será cierto en los casos en que alguno de los predicados pasados como argumentos sean ciertos.

UD17: Las interfaces Predicate y Function La clase Predicates  También contiene métodos que permiten obtener predicados directamente sin partir de ninguno previo:  Predicates.alwaysFalse() y Predicates.alwaysTrue(): devuelven predicados que siempre son falsos o verdaderos, respectivamente.  Predicates.isNull() y Predicates.notNull(): devuelven predicados que son ciertos si se aplican a objetos que sean o no sean null, respectivamente.  Predicates.in(c): devuelve un predicado que es cierto si el objeto sobre el que se aplica es miembro de la colección que se pasa como parámetro.

UD17: Las interfaces Predicate y Function La clase Functions  La clase Functions de Guava permite obtener nuevas funciones, directamente o a partir de otras funciones previas:  Functions.constant(o): devuelve la función constante f(x)=o, que siempre devuelve o, sea cual sea el objeto sobre el que se aplica.  Functions.identity(): devuelve la función identidad f(x)=x, que devuelve el mismo objeto sobre el que se aplica.  Functions.toStringFunction(): devuelve la función f(x)=x.toString(), que devuelve la representación como cadena del objeto sobre el que se aplica.  Functions.compose(f,g): devuelve la función composición h(x)=f(g(x)), que devuelve el resultado de aplicarle la función f al resultado de aplicarle la función g al objeto de entrada.

UD17: Las interfaces Predicate y Function Predicates y Functions (Ejercicios propuestos)  Utilizando los predicados y funciones implementados en los ejercicios anteriores, y los métodos de las clases Predicates y Functions, obtenga: 1)Un predicado que sea cierto para aquellos racionales menores a 3/4 y cuyo numerador sea igual a 1. 2)Un predicado que sea cierto para los racionales cuyo valor sea entero, o estén contenidos en una lista l. 3)Una función que dado un racional devuelva el mismo racional. 4)Una función que dado un racional devuelva la representación como cadena del triple del racional. 5)Una función que a partir de una lista l devuelva el numerador del primer racional de la lista. Suponga que la lista tendrá como mínimo un elemento.