Programa
Programa
El programa de la materia incluye los siguientes temas:
Conceptos propios de Java. Tipos primitivos. Clases e instancias. Clases Wrapper de tipos primitivos. Boxing y unboxing automático: Ventajas y problemas. Operador == contra método equals. Interfaz Comparable y Comparator. Clases, clases abstractas e interfaces: Diferencias y similitudes. Modificadores de acceso. Modificador static, final, transient y volatile para métodos y clases. Métodos default. Tipo de declaración de variable y tipo de la variable. Conceptos de la programación orientada a objetos.
Generics, excepciones y errores. Generics y su impacto en la herencia. Efecto de los generics métodos brigde y chequeo en compilación y runtime de tipos. Invariantes del programa y verificación con assertions. Introducción a herramientas de construcción de proyecto y manejo de dependencias: maven y gradle.
Colecciones. Diferencias entre las interfaces List, Set y Map. Interfaces Iterable e Iterator. Implementaciones de las colecciones, y cómo seleccionar la más apropiada. Excepciones más comunes.
Programación Funcional. Concepto de streams. Filter, Map, FlatMap, Reduce. Tipos de streams, expresiones lamba.
Concurrencia. Hilos de ejecución (Threads), execurtors, Fork-Join. Estructuras de sincronización, futuros o promesas (Future), Callable vs Runnable. Mutex, semaforos, barreras. Patrones de concurrencia: Lock, Future, Executors, Fork/Join, parallelStream, Barriers.
Reflexión - anotaciones. Acceso a clases, métodos y variables de instancia de forma programática. Clases: Class, Method y Field. Ventajas y desventajas. Proxies dinámicos. Anotaciones.
Input/Ouput – Documentación. Archivos: File, FileWriter, FileStream, networking básico, sockets, expresión try-with-resources.
Debugging – Testing – TDD. Debugging en IDE. Herramientas de profiling. Problemas con el uso de memoria: Garbage Collection, GC Overhead limit. Debugging: Java VisualVM, Java Mission Control, Logging. Performance – Profiling. Profiling de Aplicaciones: Memoria, CPU, Métodos, Flamegraphs. Problemas con el GC.
Patrones de diseño orientado a objetos. Decorator, Factory, Singleton, Adapter, Façade, Command, Strategy, Template, Visitor.
Base de datos y Java. Mapeo Objeto Relacional JPA. Relaciones entre clases cardinalidades, herencias. Transacciones. JPQL, consultas, mapeos, operaciones. Utilización de Data Transfer Object (DTO) en consultas JPQL.
Nota: Las clases no necesariamente se desarrollarán en este orden.
Previo al inicio del curso se proporcionará a los alumnos material de repaso de conceptos de Java.
Aprobación de la materia
Para aprobar la cursada se deberán entregar diversos trabajos prácticos a definir sobre las temáticas desarrolladas durante el curso. Los trabajos pueden ser desarrollados de forma individual o en grupo.
Asimismo, se desarrollarán quizzes opcionales en Classroom y un simulacro de entrevista de trabajo, también opcional.