Programación Funcional en Java
Descripción
Este curso ofrece una inmersión práctica en los principios y técnicas de la programación funcional aplicada en Java. Aprenderás conceptos clave como lambdas, interfaces funcionales, Streams, inmutabilidad y concurrencia, mientras desarrollas habilidades para escribir código más limpio, modular y eficiente. A través de ejemplos, ejercicios prácticos y casos reales, descubrirás cómo aprovechar el paradigma funcional para resolver problemas complejos y optimizar aplicaciones modernas. Ideal para desarrolladores con conocimientos básicos de Java que buscan expandir sus habilidades hacia un enfoque funcional.
Este curso será impartido con clases en vivo y en linea, las clases serán grabadas y el acceso al contenido y material será perpetuo para cada asistente.
Clases en vivo y en linea
Las clases serán grabadas con acceso perpetuo.
Puntos Clave
-
Comprensión de conceptos fundamentales: Introducción a la programación funcional: funciones puras, inmutabilidad y efectos secundarios controlados. Diferencias entre paradigmas funcional, imperativo y orientado a objetos.
-
Uso de lambdas e interfaces funcionales: Creación y aplicación de expresiones lambda. Uso práctico de interfaces funcionales como Function, Predicate, Consumer, y Supplier.
-
Dominio del API de Streams en Java: Operaciones intermedias y terminales: filter(), map(), reduce(), collect(). Manipulación eficiente de grandes colecciones de datos con Streams paralelos.
-
Trabajo con datos inmutables: Implementación de objetos inmutables y su integración con colecciones. Uso de clases como Optional y estructuras de datos inmutables.
-
Concurrencia funcional y asincronía: Introducción a modelos funcionales de concurrencia con CompletableFuture y Streams paralelos. Gestión eficiente de tareas asíncronas con enfoque funcional.
-
Patrones avanzados y mejores prácticas: Uso de patrones funcionales como Functor y Monad en Java. Migración de proyectos imperativos a funcionales, con ejemplos prácticos. Escribir código modular, legible y mantenible aplicando un enfoque funcional.
-
Resolución de problemas reales: Casos prácticos que integran los conceptos aprendidos para solucionar problemas complejos. Ejercicios que simulan escenarios del mundo real.
Este curso está diseñado para ayudarte a aprovechar al máximo el paradigma funcional en proyectos modernos y optimizar tus habilidades como desarrollador Java.
Temario
Programación Funcional en Java
Introducción a la Programación Funcional en Java
-
Conceptos básicos de la programación funcional
- ¿Qué es la programación funcional?
- Comparación con la programación imperativa y orientada a objetos.
- Principios clave: Inmutabilidad, funciones puras, efectos secundarios.
-
Lambdas en Java
- Sintaxis básica de lambdas.
- Funciones anónimas vs lambdas.
- Uso de lambdas con colecciones.
-
Interfaces funcionales
- Funcionalidad de Function, Predicate, Consumer, Supplier.
- Definición y uso de interfaces funcionales personalizadas.
Funciones de Orden Superior y Composición
-
Funciones de orden superior
- Qué son las funciones de orden superior.
- Uso de funciones como parámetros y valores de retorno.
- Ejemplos prácticos con lambdas.
-
Composición de funciones
- Composición de funciones y su uso práctico.
- Métodos andThen() y compose() en las interfaces funcionales.
-
La interfaz Stream en Java
- Qué son los Streams y cómo funcionan.
- Operaciones intermedias y terminales.
- Flujos paralelos y optimización.
Inmutabilidad, Manejo de Datos y Vavr
-
Inmutabilidad en Java
- Ventajas y desventajas de la inmutabilidad.
- Cómo hacer objetos inmutables en Java.
- Uso de clases inmutables con colecciones y Streams.
-
Tipos de datos inmutables en Java
- Clases inmutables (String, LocalDate, Optional).
- Colecciones inmutables (List, Set, Map).
- Técnicas para trabajar con datos inmutables en la práctica.
-
Introducción a Vavr
- ¿Qué es Vavr y por qué utilizarlo?
- Estructuras de datos inmutables: List, Map, Set.
- Uso de tipos funcionales como Option, Either, y Try.
-
Patrones funcionales comunes
- Patrones como Functor, Monads, Applicative.
- Uso de Optional y Either en lugar de nulls.
-
Patrones funcionales con Vavr
- Manejo avanzado de errores con Try.
- Operaciones con Option y Either para evitar nulls y manejar estados.
- Uso de tuplas y colecciones inmutables en Vavr.
-
Integración de Vavr con Streams y APIs existentes
- Transformar estructuras de datos tradicionales a Vavr.
- Operaciones avanzadas combinando Streams y estructuras de Vavr.
Trabajando con Streams y Colecciones
-
Operaciones intermedias en Streams
- Filtros, mapas, reducciones, y otros.
- Uso de filter(), map(), flatMap(), reduce(), collect(), etc.
-
Operaciones terminales en Streams
- Terminación de Streams: forEach(), count(), min(), max(), anyMatch(), allMatch().
- Implementación de operaciones terminales personalizadas.
-
Colecciones inmutables y Streams combinados
- Uso de colecciones inmutables junto con Streams.
- Manipulación de colecciones grandes de manera eficiente.
Concurrencia y Paridad en la Programación Funcional
-
Paralelismo con Streams
- ¿Cuándo usar flujos paralelos?
- Ventajas y desventajas del paralelismo con Streams.
-
Modelos de concurrencia funcional
- Concurrencia funcional en Java.
- Uso de CompletableFuture, ExecutorService y técnicas funcionales para concurrencia.
-
Uso de Future y Optional para gestionar valores nulos y errores
- Manejo de resultados de tareas asincrónicas.
- Uso combinado de Optional con Streams y funciones.
Casos de Estudio y Buenas Prácticas
-
Aplicación de la Programación Funcional en proyectos reales
- Casos de uso comunes de la programación funcional.
- Cómo reestructurar un proyecto Java tradicional para aplicar principios funcionales.
- Ejemplos prácticos de proyectos con funcionalidades basadas en programación funcional.
-
Buenas prácticas y estilo funcional en Java
- Consejos para escribir código más legible y modular usando programación funcional.
- Patrones de diseño funcional en Java.
- Gestión de errores en estilo funcional.
-
Casos prácticos con programación funcional y Vavr
- Aplicación de Vavr en problemas reales.
- Reestructuración de código imperativo a funcional utilizando Vavr.
Fechas
El curso durará 4 semanas con un total de 20 horas efectivas, con 3 sesiones a la semana de 5 horas
- 24 de febrero de 2025, 7:30p.m.-9:00p.m.
- 26 de febrero de 2025, 7:30p.m.-9:00p.m.
- 01 de marzo de 2025, 11:00a.m.-1:00p.m.
- 03 de marzo de 2025, 7:30p.m.-9:00p.m.
- 05 de marzo de 2025, 7:30p.m.-9:00p.m.
- 08 de marzo de 2025, 11:00a.m.-1:00p.m.
- 10 de marzo de 2025, 7:30p.m.-9:00p.m.
- 12 de marzo de 2025, 7:30p.m.-9:00p.m.
- 15 de marzo de 2025, 11:00a.m.-1:00p.m.
- 19 de marzo de 2025, 7:30p.m.-9:00p.m.
- 22 de marzo de 2025, 11:00a.m.-1:00p.m.
- 24 de marzo de 2025, 7:30p.m.-9:00p.m.
Requisitos
Conocimientos:
- Experiencia en programación con Java.
- Experiencia en desarrollo de servicios web.
Equipo de computo:
- Al menos 8GB de RAM (16GB deseable)
- Linux con kernel 3.10 o superior (Deseable Ubuntu, CentOS)
- MacOS
- Puede ser usado Windows, pero revisar requerimientos detallados en https://docs.docker.com/desktop/install/windows-install/#system-requirements