Programación Reactiva con RxJava

1,965 views 56 slides Sep 14, 2016
Slide 1
Slide 1 of 56
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25
Slide 26
26
Slide 27
27
Slide 28
28
Slide 29
29
Slide 30
30
Slide 31
31
Slide 32
32
Slide 33
33
Slide 34
34
Slide 35
35
Slide 36
36
Slide 37
37
Slide 38
38
Slide 39
39
Slide 40
40
Slide 41
41
Slide 42
42
Slide 43
43
Slide 44
44
Slide 45
45
Slide 46
46
Slide 47
47
Slide 48
48
Slide 49
49
Slide 50
50
Slide 51
51
Slide 52
52
Slide 53
53
Slide 54
54
Slide 55
55
Slide 56
56

About This Presentation

Esta presentación nos muestra qué es la programación reactiva, en qué consiste, qué nos permite hacer y por qué está tan de moda. Además, podemos ver el uso concreto de esta programación utilizando RxJava.
Autor: Juan Pablo González de Gracia.


Slide Content

ProgramaciónReactiva
13/09/2016GoogleCampus
#paradigmarx

¿Quien soy?
[email protected]
#paradigmarx

1.Qué es programación reactiva
2.RxJava
3.Experiencia en paradigma
4.Ejemplos
ÍNDICE
#paradigmarx

Qué es programación reactiva
¿Por qué ahora?
¿Qué tiene de nuevo?
¿Es la próxima moda pasajera?
¿Ahora se programa todo así?
#paradigmarx

RxJava ¿Qué es?
Es una librería Java que implementa las ReactiveX
(extensiones reactivas )
“Se basa en el en la composición asíncrona y
programas basados en eventos , mediante el
uso de secuencias observables.”
#paradigmarx

RxJava ¿Qué ventajas nos aporta?
•Legibilidad
•Simplifica la concurrencia (evitando errores de
programación)
•Composiciónde operadores y funciones
•Permite añadir comportamiento al procesamiento
asíncrono
•Permite utilizar programación síncronao asíncrona
#paradigmarx

RxJava Simplicidad
Como gran ventaja resuelve los problemas que tenía
Java hasta ahora con el manejo de la programación
concurrente. La librería está disponible desde java 6.
Callbacks& Future<T>
#paradigmarx

RxJava Fundamentos
Para gestionar todo lo que ocurre, esta
librería utiliza principalmente el patrón
Observer
#paradigmarx

RxJava Patrón Observer
“Es un patrón de diseño que define una
dependencia del tipo uno-a-muchosentre
objetos, de manera que cuando uno de los
objetos cambia su estado, notifica este
cambio a todos los dependientes.”
#paradigmarx

RxJava Observable
Los observables son los elementos que
notifican a todos sus observerslos cambios.
Para ello es necesario que estos observerse
registren de alguna manera.
#paradigmarx

RxJava Pushvs Pull
Estamos acostumbrados a un modelo donde le
pedimos al productor un nuevo elemento cada vez que
lo necesitamos (Pull) en vez de que el productor nos
avise de cuando está disponible (Pull). En ocasiones
provoca bloquear al usuario hasta que esté disponible.
Iterable/Iterator Observable /Observer
T next() onNext(T)
throwsException onError(Throwable)
returns onCompleted()
#paradigmarx

RxJava Eventos
Un elemento observable puede producir 3
tipos de eventos :
•Evento normal
•Evento de terminación
•Evento de error
#paradigmarx

RxJava Suscripción
Cuando se realiza una subscripción , se crea un objeto
Subscriptionque nos da acceso al control sobre el flujo
de la información, permitiendo saber si hay elementos
subscritos o terminar la conexión
#paradigmarx

RxJava Subscriber
Existe un elemento Subscriberque implementa ambos
interfaces, observer(lo que nos permite consumir los
eventos del observable) y subscription(con lo que
podremos controlar el flujo desde dentro del objeto)..
#paradigmarx

RxJava Subscriber
#paradigmarx

RxJava Creación de observables
•Vacíos : Observable.emtpy()
•Error : Observable.error()
•Con valores concretos : Observable,just(values)
•Custom: Observable.create(details)
•De una lista : Observable.from()
•Rango númerico: Observable.range(from,n)
#paradigmarx

RxJava Hot vs ColdObservables
Existe 2 tipos de Observables. Se distinguen principalmente
sobre la manera en la que emiten eventos. Los “calientes”
emiten eventos independientemente de si hay alguien
escuchando, mientras que los “fríos” sólo lo hacen cuando
tienen suscriptores, generando el evento para sus suscriptores
en exclusiva.
#paradigmarx

RxJava Operadores
RxJavatiene una serie de operadores que nos permiten
realizar acciones sobre los elementos del observable,
dominarlos, encadenarlos y realizar composiciones de los
mismos será lo que nos de potencia al usar esta librería. Por
citar algunos
#paradigmarx

RxJava Transformación
Son operadores que nos van a servir para aplicar
transformaciones a los elementos de origen de manera que
emitamos objetos distintos a la salida
#paradigmarx

RxJava Map
Nos permite aplicar una transformación a un elemento de
nuestro objeto para transformarlo en otra cosa.
#paradigmarx

RxJava Scan
Aplica una función a cada dato emitido y emite ese valor
secuencialmente
#paradigmarx

RxJava Reduce
Aplica una función a cada dato emitido y emite el resultado
#paradigmarx

RxJava Buffer
Permite almacenar un grupo de resultado y emitirlo como
grupo
#paradigmarx

RxJava FlatMap
Transforma cada elemento del observable en otra sucesión de
observable, se suscribe y los une en único observable
#paradigmarx

RxJava GroupBy
Divide el observable inicial en un conjunto de observables en
base a un criterio.
#paradigmarx

RxJava Cache
Almacena todos los resultados y los repite siempre igual.
Hay que tener cuidado con la memoria si estamos
manejando Observables infinitos
#paradigmarx

RxJava Filtrado
Permiten descartar ciertos elementos y emitir sólo un
subconjunto de los elementos iniciales.
#paradigmarx

RxJava Filter
Realiza un filtrado sobre los eventos de origen
#paradigmarx

RxJava Distinct
Elimina los duplicados
#paradigmarx

RxJava Otros
•First
•Last
•Take, TakeLast,TakeUntil, TakeWhile
•Skip, SkipLast, SkipUntil, SkipWhile
#paradigmarx

RxJava Combinacionde Observables
Es muy habitual trabajar con un conjunto de observables
que queramos combinar de alguna manera. Para ello
RxJavanos ofrece operadores que permiten combinarlos
para emitir un resultado.
#paradigmarx

RxJava Merge/Concat
Estos operadores se suscriben los observables que le
pasemos como parámetro y unifica los eventos en un
único streamde salida.
#paradigmarx

RxJava Switch
Muestra los eventos del último observable que ha
producido eventos. Cuando aparece un elemento en un
observable posterior, se borra la suscripción actual.
#paradigmarx

RxJava Zip
Combina elementos de distintos observables y los fusiona
en un único elemento
Es importante que estén lo más sincronizados posible.
#paradigmarx

RxJava CombineLatest/Amb
Permite realizar combinaciones con elementos sin que
estén sincronizados
#paradigmarx

RxJava Temporales
Permiten alterar el tiempo en la generación de eventos.
#paradigmarx

RxJava Timer
Crea un observable para que emita un evento determinado
en un tiempo predefinido.
#paradigmarx

RxJava Delay
Retrasa la emisión de eventos por un determinado tiempo
#paradigmarx

RxJava Interval
Emite una secuencia de números infinitos separados por
un intervalo definido
#paradigmarx

RxJava Repeat
Crea un Observable que repite un evento múltiples veces.
#paradigmarx

RxJava Retry
Permite reconectar cuando se produce un error
#paradigmarx

RxJava Single
Emite un único evento o da error
#paradigmarx

RxJava Timeout
Copia el Observable en la salida salvo que se produzca un
hueco mayor entre eventos al que se pasa por parámetro
#paradigmarx

RxJava Try/catch
RxJavanos permite varias formas de utilizar el try catch.
Quizás una de las más legibles sea OnErrorResumeNext
#paradigmarx

RxJava ¿Qué operador usar?
Para los principiantes existe un árbol de decisión que nos
ayuda a saber cual es el que deberíamos usar.
Podéis consultarlo en
http://reactivex.io/documentation/operators.html
#paradigmarx

RxJava Sideeffects
Podemos añadir comportamiento a lo que pasa cuando
suceden ciertos eventos. RxJavanos da muchos eventos a los
que suscribirnos, pero no se pueden alterar :
•doOnCompleted() )
•doOnEach()
•doOnError()
•doOnNext()
•doOnRequest()
•doOnSubscribe()
•doOnTerminate()
•doOnUnsubscribe() )
#paradigmarx

RxJava Concurrencia
Normalmente la concurrencia la va a decidir el que nos
consume.
Por ejemplo indicando suscribeOn(scheduler) o
ObserverOn(Scheduler)
#paradigmarx

RxJava Lazyvs Eager
Cuando utilizamos RxJavaestamos aprovechando las ventajas
de una ejecución perezosa. La ejecución se pospone al último
momento posible, esto es cuando un usuario se suscribe.
Esto ayuda a no bloquear recursos innecesariamente
Cuando creemos Observables utilizaremos Defer, utiliza una
factoriade observable y lo hacer de forma perezosa
#paradigmarx

RxJava Bloqueante a No bloqueante
Con RxJavapasar de no bloqueante a bloqueante es muy
sencillo utilizando el operador toBlocking(). Lo contrario, es
más complicado porque implica un rediseño del algoritmo,
aunque RxJavada funciones para ello.
#paradigmarx

Paradigma + RxJava
Consumo bajo de recursos
Gran rendimiento
Buen compañero con Vert.x
Mejora de legibilidad separando la operación
de la orquestación
#paradigmarx

Ejemplos
#paradigmarx

#paradigmarx

#paradigmarx

#paradigmarx
http://developer.couchbase.com/documentation/server/4.1/sdks/java-2.2/documents-atomic.html

#paradigmarx

#paradigmarx
Muchas gracias
Buscamos talento : [email protected]
Tags