Resumen por bloques del módulo
RA1: Desarrolla aplicaciones compuestas por varios procesos reconociendo y aplicando principios de programación paralela.
Fundamentos de la Programación Concurrente y Paralela. Esta unidad introduce los conceptos esenciales de la programación concurrente, paralela y distribuida, diferenciando sus características, ventajas y desventajas para establecer una base sólida en el desarrollo de aplicaciones multiproceso.
Procesos y Hilos de Ejecución: Anatomía y Relación. Esta unidad profundiza en la naturaleza de los procesos y los hilos de ejecución, analizando sus características, cómo son gestionados por el sistema operativo y su interrelación, sentando las bases para la programación de aplicaciones multiproceso.
Programación de Aplicaciones con Subprocesos y Sincronización. Esta unidad aborda la implementación práctica de la programación concurrente, enseñando a crear y gestionar subprocesos utilizando clases específicas y a aplicar mecanismos de sincronización para asegurar la integridad de los datos y la correcta coordinación entre ellos.
Gestión de Tareas en Paralelo con Pools de Hilos y Procesos del Sistema, Depuración y Documentación. Esta unidad trabaja el desarrollo de aplicaciones que gestionan múltiples tareas en paralelo mediante pools de hilos (ExecutorService) y, complementariamente, mediante procesos del sistema operativo lanzados desde Java (ProcessBuilder). Se abordan también las técnicas de depuración de problemas típicos de la concurrencia (condiciones de carrera, deadlocks, inanición) y las prácticas de documentación necesarias para que estas aplicaciones sean mantenibles.
RA2: Desarrolla aplicaciones compuestas por varios hilos de ejecución analizando y aplicando librerías específicas del lenguaje de programación.
Introducción a la Concurrencia y Fundamentos de Hilos. Esta unidad explora la necesidad de la programación concurrente, diferenciando procesos de hilos. Se cubren los conceptos básicos para identificar cuándo y por qué utilizar hilos, así como los mecanismos fundamentales para su creación, inicio y finalización.
Programación de Aplicaciones con Varios Hilos en Java. Esta unidad se centra en programar aplicaciones Java formadas por varios hilos de ejecución que trabajan de forma concurrente. Se retoman las técnicas de creación de hilos (extends Thread, implements Runnable) para construir un programa completo con varias tareas independientes, se muestra cómo iniciarlas y coordinarlas con join(), y se introduce ExecutorService como alternativa profesional. Como apoyo para entender el comportamiento del programa, se repasan brevemente los estados por los que pasa un hilo durante su ejecución.
Compartición de Información y Sincronización de Hilos. Esta unidad aborda los desafíos de la compartición de datos entre hilos y la necesidad de sincronización. Se explican los problemas de concurrencia como las condiciones de carrera y se presentan mecanismos para compartir información de forma segura y sincronizar la ejecución de hilos.
Prioridades, Pools de Hilos y Depuración de Aplicaciones Concurrentes. Esta unidad cubre la gestión de prioridades de hilos, el uso de pools de hilos para optimizar recursos y las técnicas esenciales para depurar y documentar aplicaciones concurrentes, asegurando su robustez y mantenibilidad.
RA3: Programa mecanismos de comunicación en red empleando sockets y analizando el escenario de ejecución.
Introducción a la Comunicación en Red y Arquitecturas Cliente-Servidor. Explora la necesidad de la comunicación en red en aplicaciones modernas, identifica escenarios comunes y define los roles esenciales de cliente y servidor, así como las librerías básicas para su implementación.
Sockets: El Mecanismo Fundamental de Comunicación en Red. Profundiza en el concepto de socket como punto final de comunicación, detallando sus tipos (TCP, UDP), características y cómo se utilizan para establecer y mantener conexiones en red.
Programación de Aplicaciones Cliente-Servidor con Sockets TCP. Desarrolla la capacidad de implementar aplicaciones cliente y servidor utilizando sockets TCP, cubriendo el establecimiento de conexión, el intercambio de datos y la gestión de múltiples clientes.
Concurrencia en Aplicaciones de Red: Uso de Hilos con Sockets. Explica la necesidad de la concurrencia en servidores de red y demuestra cómo implementar la comunicación con sockets utilizando hilos para manejar múltiples conexiones de clientes de forma eficiente.
RA4: Desarrolla aplicaciones que ofrecen servicios en red, utilizando librerías de clases y aplicando criterios de eficiencia y disponibilidad.
Unidad 1: Fundamentos de Protocolos y Programación de Clientes de Red. Analiza los protocolos de red estándar como HTTP y FTP, y explora las librerías de clases (como las del paquete `java.net`) para construir aplicaciones cliente. Se enfoca en la implementación de un cliente que consume un servicio de red existente, verificando su correcta comunicación y manejo de datos.
Unidad 2: Desarrollo de Servicios de Red Monocliente. Introduce la programación del lado del servidor utilizando sockets. Se explica cómo crear un servicio que escucha en un puerto específico, acepta una conexión de un único cliente, procesa su petición y envía una respuesta. Esta unidad sienta las bases para entender la gestión de conexiones antes de abordar la concurrencia.
Unidad 3: Diseño e Implementación de Servicios Concurrentes. Aborda el requisito fundamental de los servicios de red: atender a múltiples clientes simultáneamente. Se analiza el problema de la concurrencia y se implementa el patrón 'thread-per-client' como solución clásica, utilizando hilos para aislar la comunicación con cada cliente y permitir que el servidor principal siga aceptando nuevas conexiones.
Unidad 4: Verificación, Depuración y Documentación de Servicios de Red. Se centra en las fases de calidad del desarrollo: cómo verificar que un servicio está disponible y funciona correctamente, las técnicas para depurar problemas en aplicaciones concurrentes y la importancia de una buena documentación técnica y de usuario. Asegura que las aplicaciones no solo funcionen, sino que sean robustas, mantenibles y fáciles de usar.
RA5: Protege las aplicaciones y los datos definiendo y aplicando criterios de seguridad en el acceso, almacenamiento y transmisión de la información.
Principios de Programación Segura y Ciclo de Vida del Desarrollo Seguro (SDLC). Esta unidad introduce los principios fundamentales para desarrollar software seguro desde el diseño, identificando vulnerabilidades comunes y aplicando prácticas que previenen ataques. Se enfatiza la importancia de integrar la seguridad en cada fase del ciclo de vida del desarrollo de software.
Criptografía para la Protección de Datos Almacenados. Esta unidad explora las técnicas criptográficas fundamentales, diferenciando entre cifrado simétrico y asimétrico, y su aplicación práctica para proteger la confidencialidad e integridad de la información persistente. Se cubren los algoritmos más comunes y su uso adecuado para el almacenamiento seguro de datos.
Control de Acceso Basado en Roles (RBAC) y Políticas de Seguridad. Esta unidad aborda la implementación de políticas de seguridad para controlar el acceso de usuarios a las aplicaciones, centrándose en el modelo de Control de Acceso Basado en Roles (RBAC). Se explica cómo definir roles, asignar permisos y gestionar la autorización de forma eficiente y segura.
Seguridad en la Transmisión de Información con Sockets Seguros (TLS). Esta unidad trabaja los métodos para asegurar la información transmitida por red (CE f) y el desarrollo de aplicaciones con sockets seguros (CE g). Se explica el protocolo TLS, su proceso de negociación (handshake), las diferencias entre TLS 1.2 y TLS 1.3, y cómo implementar clientes y servidores seguros en Java y Python, incluyendo errores frecuentes de configuración y su corrección.