Descuento por lanzamiento Curso de arquitectura

Shape Shape

Curso

Shape
Shape
Shape Shape
Courses Details Desarrollo

Programación Funcional en Java

Author
Domingo Suarez 12,433 Estudiantes entrenados
MercadoPago

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.

Shape Shape
Clases en vivo y en linea

Las clases serán grabadas con acceso perpetuo.

Puntos Clave

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

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

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

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

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

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

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

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

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

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

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

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

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

Course Instructor:

Author

Domingo Suarez

Java Champion