La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

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.

Presentaciones similares


Presentación del tema: "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."— Transcripción de la presentación:

1 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

2 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

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

4 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); }

5 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) { //... }

6 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.”);

7 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.”);

8 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.”) }

9 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) { //... }

10 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; }

11 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.

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

13 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); }

14 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) { //... }

15 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);

16 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);

17 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);

18 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) { //... }

19 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()); }

20 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.

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

22 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.

23 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.

24 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.

25 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.


Descargar ppt "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."

Presentaciones similares


Anuncios Google