Información general


Tipo de asignatura: obligatoria

Coordinador: Adso Fernández Baena

trimestre: Segundo trimestre

Créditos: 6

Profesorado: 

Enric Sesa Nogueras

Idiomas de impartición


Las clases están en catalán. La mayor parte de la documentación (incluidos los enunciados de prácticas y exámenes) están en inglés. 

Competencias


competencias básicas
  • B2_Que los estudiantes sepan aplicar sus conocimientos en su trabajo o vocación de una forma profesional y tengan las competencias que demuestran mediante la elaboración y defensa de argumentos y la resolución de problemas dentro de su área de estudio

     

  • B5_Que los estudiantes hayan desarrollado aquellas habilidades de aprendizaje necesarias para emprender estudios posteriores con un alto grado de autonomía

     

Competencias específicas
  • EFB5_Conocimiento de la estructura, organización, funcionamiento e interconexión de los sistemas informátis, los fundamentos de su programación y su aplicación para la resolución de problemas propios de la ingeniería

     

  • EIS1_Capacidad para desarrollar, mantener y evaluar servicios y sistemas software que satisfagan todos los requisitos del usuario y que se comporten de forma fiable y eficiente, sean asequibles de desarrollar y mantener y cumplan normas de calidad, aplicando las teorías, principios, métodos y prácticas de la ingeniería del software

     

  • EIS4_Capacidad de identificar y analizar problemas y diseñar, desarrollar, implementar, verificar y documentar soluciones software sobre la base de un conocimiento adecuado de las teorías, modelos y técnicas actuales

     

competencias transversales
  • T1_Que los estudiantes conozcan un tercer idioma, que será preferentemente el inglés, con un nivel adecuado de forma oral y por escrito, de acuerdo con las necesidades que tendrán las graduadas y graduados en cada titulación

     

Descripción


En esta asignatura se introducen, desde una vertiente eminentemente práctica, los conceptos, problemas y prácticas más relevantes de la programación concurrente.

Esta asignatura dispone de recursos metodológicos y digitales para hacer posible su continuidad en modalidad no presencial en el caso de ser necesario por motivos relacionados con la Codid-19. De esta forma se asegurará la consecución de los mismos conocimientos y competencias que se especifican en este plan docente. 

El Tecnocampus pondrá al alcance del profesorado y alumnado las herramientas digitales necesarias para poder llevar a cabo la asignatura, así como guías y recomendaciones que faciliten la adaptación a la modalidad no presencial. 

Resultados de aprendizaje


Esta asignatura contribuye a algunos de los resultados de aprendizaje especificados para la materia a la que pertenece (Aplicaciones distribuidas). Concretamente, al acabar la asignatura el estudiante deberá ser capaz de

  • RA1: Diseñar, escribir, probar, depurar, documentar y mantener código en un lenguaje de alto nivel para resolver problemas de programación aplicando esquemas algorítmicos y utilizando estructuras de datos.
  • RA2: Conocer la necesidad de la concurrencia en programación, los problemas lógicos asociados y las principales soluciones.
  • RA3: Conocer y saber utilizar las construcciones habituales en los lenguajes de programación para gestionar la concurrencia.
  • RA4: Describir los paradigmas más relevantes de concurrencia, paralelismo y sistemas distribuidos.
  • RA5: Describir el problema de la interferencia destructiva y sus efectos. Describir diferentes soluciones a la necesidad de exclusión mutua (semáforos, monitores ...)
  • RA6: Describir la situación de bloqueo mutuo (deadlock) y las condiciones asociadas.
  • RA7: Describir las propiedades de seguridad (safety) y vivacidad (liveness).
  • RA8: Describir la arquitectura cliente / servidor
  • RA9: Implementar diseños concurrentes en un lenguaje de programación de alto nivel que ofrezca herramientas específicamente dirigidas a la programación concurrente / paralela.
  • RA10: Razonar de manera formal y / o semiformal sobre la corrección de un diseño concurrente.
  • RA11: Determinar los factores que inciden negativamente en la seguridad y fiabilidad de un sistema hardware / software y minimizar sus efectos.

 

Metodología de trabajo


La asignatura estará basada en una metodología de clase magistral en la que se insertarán actividades de naturaleza práctica. También habrá algunas sesiones de laboratorio que serán de carácter eminentemente práctico. A menudo, durante las sesiones, se solicitará a los estudiantes que resuelvan y ejercicios. 

Contenidos


1.- Conceptos fundamentales

  • Programas, procesos, e hilos
  • Parel·lelisme vs. concurrencia
  • arquitecturas

2.- Implementación de procesos e hilos

  • Hilos en Java: la clase Thread y la interfaz Runnable
  • Ciclo de vida de un hilo

3.- Interferencia y el problema de la sección crítica

  • interferencia
  • exclusión mutua
  • Algoritmos que garantizan la exclusión mutua

4.- Herramientas

  • Test & Set
  • semáforos
  • Monitores

5.- Deadlock, safety & liveness

6.- Sistemas distribuidos

Actividades de aprendizaje


Se pone a disposición de los estudiantes diversas actividades de naturaleza eminentemente práctica (ejercicios cortos, problemas) que son la base de las actividades de aprendizaje de la asignatura. Algunas de estas actividades los estudiantes las tendrán que resolver de manera no presencial siguiendo las indicaciones del (los) docente (s) y también serán trabajadas en clase, ya sea como ejemplos en las sesiones de teoría, ya sea en las sesiones de laboratorio. Algunas de estas actividades tendrán carácter optativo mientras que otros tendrán carácter obligatorio dado que tendrán peso en el sistema evaluativo de la asignatura. Todas las actividades, tanto las obligatorias como las optativas serán concebidas para alcanzar las conocimientos teórico-prácticos de la asignatura. 

Con el objetivo de recoger evidencia del logro de los resultados de aprendizaje esperados se realizarán las siguientes actividades de carácter evaluativo:

  • Tres prácticas dirigidas a recoger evidencia de los resultados de aprendizaje de carácter más práctico: RA1, RA2, RA3, RA9 y RA10.

A nivel competencial estas tres prácticas, que mayoritariamente se deberán desarrollar en tiempo no presencial, inciden en todas las competencias comunes y específicas de la asignatura, especialmente en cuanto a la aplicación práctica del conocimiento que estas competencias mencionan (cuando se procede, se indica entre paréntesis los aspectos más relevantes de cada competencia a los que la asignatura contribuye):

  • CIN1 (desarrollar software asegurando su fiabilidad y seguridad),
  • CIN3 (hábitos de trabajo efectivos en los entornos de desarrollo de software)
  • CIN5 (mantener software),
  • CIN6 (aplicar procedimientos algorítmicos),
  • NIC7
  • CIN8 (construir y mantener aplicaciones de forma robusta),
  • CIN13 (conocimiento y aplicación de las herramientas necesarias para el almacenamiento)
  • EFB5 (fundamentos de la programación paralela / concurrente)
  • EIS1 (desarrollar sistemas software fiables aplicando principios métodos y prácticas de la ingeniería del software)
  • EIS4

 

  • Múltiples ejercicios, problemas y cuestionarios distribuidos a lo largo del curso y realizados durante las sesiones de clase. Con ellos se pretende recoger evidencia de todos los resultados de aprendizaje, con especial énfasis en aquellos que tienen un carácter más teórico: RA4, RA5, RA6, RA7, RA8 y RA11 pero sin descartar el resto. A nivel competencial, este conjunto de pruebas pretenden incidir en todas las competencias comunes y específicas de la asignatura, salvo CIN3 que es propia de las tareas de carácter más aplicado.

 

Para superar (aprobar) las actividades evaluativas, los estudiantes deberán demostrar

  • Que han adquirido los conocimientos teóricos relativos a los contenidos de la asignatura y que su comprensión les permite llevarlos a la práctica [MECES-2 punto a, punto c]
  • Que pueden desarrollar soluciones a problemas que, si bien pueden ser similares a otros vistos anteriormente, presentan aspectos que son nuevos [MECES-2 punto f]

En relación a las competencias básicas asignadas a la asignatura, éstas quedan cubiertas especialmente en cuanto a los aspectos que se explicitan:

  • CB2: resolución de problemas dentro de su área de estudio.
  • CB5: desarrollo de habilidades de aprendizaje necesarias para estudios posteriores (acceso autónomo a documentación, hábitos de trabajo efectivos)

Finalmente, y en cuanto a la competencia transversal asociada a la asignatura (CT1: conocimiento tercera lengua) esta se trabaja a partir de las fuentes documentales que los estudiantes deben consultar, dado que todas ellas se encuentran en inglés. Todo el material escrito de la asignatura (notas, enunciados de problemas, enunciados de prácticas, ...) se distribuye exclusiva y únicamente en inglés.

Sistema de evaluación


La calificación final de la asignatura (QF) se calculará en función de la calificación de las prácticas de laboratorio (Pr, 50%) y de un examen final (Ex, 50%)

 

QF = Ex si Ex< 4

QF = 0.5·Ex + 0.5·Pr si Ex ≥ 4


Los estudiantes con QF < 5 podrán realizar un examen de recuperación que sustituirá a la primera calificación Ex en el cálculo de QF. En caso de tener que realizar el examen de recuperación, las calificaciones finales en el intervalo [5, 7.5) serán redondeadas a 5. Las calificaciones finales en el intervalo [7.5, 10] serán redondeadas a 7.


Cualquier actividad realizada de manera fraudulenta o sin respetar las normas que para ella se especifiquen será valorada con 0 puntos y podrá comportar una calificación final (FM) de 0 puntos. Esto incluye, pero no se limita a, la copia y el plagio de prácticas y ejercicios independientemente del rol desarrollado (origen o destino).

 

Bibliografía


Básico

Ben-Ari, M .. Principles of concurrente and distributed programming. 2006. Essex: Pearson, 2006. ISBN 9780321312839.

Palma Méndez, José Tomás et al ,. Programación concurrente. Madrid: International Thomson, 2003. ISBN 8497321847.

Complementario

Magee, Jeff; Kramer, Jeff. Concurrency: state modelos & Java programs. 2nd ed. Chichester: John Wiley & sonidos, 2006. ISBN
0470093552.