template-browser-not-supported

Máster Universitario en Ingeniería Web (En Extinción)

Estudia

Atrás Atrás

Tecnología y Paradigmas de Programación

Código asignatura
MINGEWEB-C-005
Curso
Cualquiera
Temporalidad
Segundo Semestre
Carácter
Complementos de Formación
Créditos
6
Pertenece al itinerario Bilingüe
Actividades
  • Tutorías Grupales (2 Horas)
  • Prácticas de Aula/Semina (7 Horas)
  • Prácticas de Laboratorio (28 Horas)
  • Clases Expositivas (21 Horas)
Guía docente

En el desarrollo de aplicaciones informáticas, los lenguajes de programación han sufrido numerosas evoluciones y se han definido distintos paradigmas de programación en base a las abstracciones principales que los lenguajes utilizan para permitir la programación de ordenadores. El conocimiento de los paradigmas y elementos ofrecidos por los lenguajes de programación es importante para saber elegir las tecnologías de programación adecuadas a la hora de resolver un problema particular. Esta asignatura afronta este reto, describiendo los paradigmas de programación más utilizados en la actualidad y los elementos principales de cada uno de ellos, para que el alumno sea capaz de elegir el más apropiado en la resolución de un problema. 

La materia en la que se enmarca esta asignatura dentro del Grado en Ingeniería Informática del Software es Programación, siendo una asignatura Obligatoria. Su carácter es mayoritariamente práctico, teniendo como principal objetivo hacer que el alumno sea capaz de resolver problemas reales planteados mediante la utilización de elementos de lenguajes de programación y paradigmas adecuados.

Se imparte como una asignatura de segundo curso, dentro del segundo semestre. Cuenta con 60 créditos ECTS, que suponen un total de 150 horas de trabajo: 60 horas presenciales y 90 horas no presenciales. Se impartirán 2 horas de clases expositivas a la semana hasta un total de 21; una hora de seminario hasta un total de 7; 2 horas de prácticas de laboratorio cada semana y 2 horas totales de tutorías grupales.

Dentro de las competencias a adquirir relacionadas con el desarrollo de software, es una continuación de las asignaturas Introducción a la Programación y Metodología de la Programación. Sirve como complemento a asignaturas relacionadas como Estructuras de Datos, Algoritmia y Sistemas Operativos y como base para asignaturas como Diseño del Software, Arquitectura del Software y Diseño de Lenguajes de Programación.

Los requisitos para cursar esta asignatura son:

  • Tener conocimientos de programación imperativa basada en procedimientos
  • Destreza en el desarrollo de programas en un lenguaje imperativo basado en procedimientos, preferentemente el lenguaje C
  • Conocimiento del paradigma orientado a objetos
  • Experiencia en el desarrollo de programas siguiendo el paradigma orientado a objetos, preferiblemente en Java
  • Nociones básicas de programación concurrente

Expresando los requisitos como asignaturas del grado en Ingeniería Informática del Software, el alumno deberá haber cursado y superado las siguientes asignaturas del mismo:

  • Fundamentos de Informática
  • Introducción a la Programación
  • Metodología de la Programación

Se indican las competencias de la titulación con las que la presente asignatura tiene alguna relación. Cuando no cubre la totalidad de la misma, se indica la parte de ésta que la asignatura aporta en el currículum del alumno.

Competencias técnicas o específicas:

Com.8: Capacidad para analizar, diseñar, construir y mantener aplicaciones de forma robusta, segura y eficiente, eligiendo el paradigma y los lenguajes de programación más adecuados.

Com.14: Conocimiento y aplicación de los principios fundamentales y técnicas básicas de la programación paralela, concurrente, distribuida y de tiempo real.      
De esa competencia, la propia a adquirir por el alumno en la presente asignatura es: 
Conocimiento y aplicación de los principios fundamentales y técnicas básicas de la programación paralela y concurrente.

Bas.5: Conocimiento de la estructura, organización, funcionamiento e interconexión de los sistemas informáticos, los fundamentos de su programación, y su aplicación para la resolución de problemas propios de la ingeniería.

Com.1: Capacidad para diseñar y desarrollar aplicaciones y sistemas informáticos, asegurando su fiabilidad, seguridad y calidad, conforme a principios éticos y a la legislación y normativa vigente.     
De esa competencia, la propia a adquirir por el alumno en la presente asignatura es: 
Capacidad para diseñar y desarrollar aplicaciones, asegurando su fiabilidad, seguridad y calidad.

Com.16: Conocimiento y aplicación de los principios, metodologías y ciclos de vida de la ingeniería de software.       
De esa competencia, la propia a adquirir por el alumno en la presente asignatura es: 
Conocimiento de los principios de la ingeniería de software.

Competencias trasversales:

CG-3: Capacidad de abstracción

CG-4: Análisis y síntesis

CG-17: Competencia para una actitud positiva ante las futuras nuevas tecnologías y situaciones

CG-10: Destreza en la comunicación oral y escrita en inglés.          
Esta competencia sólo se aborda en la comunicación escrita en inglés, en particular en la lectura.

El alumno deberá ser capaz de (resultados de aprendizaje):

  • RA.P-2. Conocer la estructura, organización y funcionamiento de los sistemas informáticos y sistemas inteligentes, los fundamentos de su programación, y su aplicación para la resolución de problemas propios de la ingeniería. [Bas.5].
  • RA.P-3. Analizar, diseñar, desarrollar, seleccionar, evaluar y mantener aplicaciones y sistemas informáticos, asegurando su fiabilidad y calidad aplicando las teorías, principios, métodos y prácticas de la Ingeniería del Software, eligiendo el paradigma y los lenguajes de programación más adecuados, considerando las limitaciones derivadas del coste, del tiempo, de la existencia de sistemas ya desarrollados y de las propias organizaciones. [Com.1] [Com.8] [Com16] [CG-3] [CG-4].
  • RA.P-4. Conocer y aplicar procedimientos algorítmicos básicos, tipos y estructuras de datos más adecuados a la resolución de un problema, analizando la idoneidad y complejidad de los mismos. [CG-3].
  • RA.P-5. Conocer y aplicar los principios fundamentales y técnicas básicas de la programación paralela, concurrente, distribuida y de tiempo real. [Com.14].
  • RA.P-6. Capacidad de dar solución a problemas de integración en función de las estrategias, estándares y tecnologías disponibles. [CG-4].
  • RA.P-7. Documentar y exponer la solución a un problema a través de textos y diagramas, cumpliendo normas y estándares del diseño y desarrollo del software en español/inglés [CG-10].
  • RA.P-8. Conocer las nuevas tecnologías empleadas por los lenguajes de programación, análisis de su tendencia y capacidad de juicio para el análisis de nuevas tecnologías y paradigmas [CG-17].
  • RA.SFH-5. Comprender la influencia de la arquitectura en la programación, especialmente en arquitecturas paralelas [Com.14].
  • RA.SI-4. Analizar las implicaciones del uso de hilos en una aplicación. comprendiendo las implicaciones en la compartición de recursos y utilizando los mecanismos básicos de comunicación y sincronización para solventar los posibles problemas a que dicha compartición pueda dar lugar. [Bas.4], [Com.14]
  • RA.IS-3. Aplicar distintas técnicas de construcción de software en el diseño de bajo nivel [Com.8].

1. Lenguajes y paradigmas de programación

Lenguaje de Programación
Características de los Lenguajes de Programación
Paradigmas de Programación
Tecnología de Programación 

2. Paradigma orientado a objetos

Abstracción
Encapsulamiento
Modularidad
Sobrecarga
Herencia
Polimorfismo
Clases Abstractas e Interfaces
Excepciones
Asertos
Diseño por Contratos
Genericidad
Inferencia de Tipos

3. Fundamentos del paradigma funcional

Cálculo Lambda
Isomorfismo Curry-Howard
Funciones como Entidades Primer Orden
Cláusulas
Currificación
Aplicación Parcial
Continuaciones
Evaluación Perezosa
Transparencia Referencial
Pattern Matching
Funciones de Orden Superior
Listas por comprensión

4. Fundamentos de la programación concurrente y paralela

Programación Concurrente y Paralela
Proceso e Hilo
Paralelización de Algoritmos
Paso Asíncrono de Mensajes
Creación Explícita de Hilos
Condición de Carrera
Context Switching & Thread Pooling
Foreground & Background Threads
Sincronización de Hilos y Procesos
Interbloqueo
Estructuras de Datos Thread-Safe
Paralelización mediante Task Parallel Library
Paradigma Funcional en la Paralelización de Algoritmos

5. Tipado Dinámico y Meta-programación

Tipado Dinámico
Duck Typing
Multiple Dispatch
Reflexión Computacional
Anotaciones o Atributos
Generación Dinámica de Código
MetaProgramación

 

A continuación se detalla una tabla describiendo cómo las distintas competencias están relacionadas con el contenido de la asignatura:

Temas

Competencias Específicas

Competencias trasversales

Tema 1

Com.8, Com.16, Bas.5

CG-10, CG-17

Tema 2

Com.8, Com.1, Com.16, Bas.5

CG-3, CG-4, CG-10

Tema 3

Com.8, Com.14, Com.1, Bas.5

CG-3, CG-4, CG-10, CG-17

Tema 4

Com.8, Com.1, Bas.5

CG-3, CG-4, CG-10, CG-17

Tema 5

Com.8, Com.1, Bas.5

CG-3, CG-4, CG-10, CG-17

Las actividades y metodología a utilizar son:

  • Clases expositivas dialogadas en las que se exponen las características de los lenguajes de programación en cada uno de los paradigmas descritos. El objetivo de estas clases es crear la base para que puedan, posteriormente, resolver los casos prácticos que se le planteen, eligiendo el paradigma y tecnología de programación adecuados (competencias Com.8, Com.14, Bas.5, Com.16 y CG-17).
  • Actividades a realizar de forma autónoma por parte de alumno previamente a la asistencia a los laboratorios, para reforzar las competencias de las asignaturas previas a ésta (competencias Com.8, Bas.5, Com.1, CG-3, CG-4 y CG-10).
  • Prácticas de aula y de laboratorio se plantearán problemas reales en los que se analizarán la adecuación de los elementos de cada paradigma para la resolución de los problemas planteados (competencias Com.8, Com.14, Bas.5, Com.1, CG-3 y CG-4)
  • Deberá analizarse el material ofrecido en el que se resuelven problemas utilizando de forma apropiada los elementos de cada uno de los paradigmas (competencias Com.8, CG-3 y CG-4)
  • El alumno deberá resolver problemas planteados a partir de lo aprendido, utilizando un lenguaje de programación y paradigma determinado (competencias Com.8, Com.14, Com.1, Bas.5, Com.16 y CG-4)
  • Como trabajo autónomo, el alumno deberá ser capaz de leer material referenciado por el profesor, pudiendo está este escrito en el idioma inglés (competencias CG-4 y CG-10).

La siguiente tabla desglosa por temas y horas las actividades anteriormente descritas:

TRABAJO PRESENCIAL

TRABAJO NO

PRESENCIAL

Temas

Horas totales

Clase Expositiva

Prácticas de aula /Seminarios/ Talleres

Prácticas de laboratorio /campo /aula de  informática/ aula de idiomas

Prácticas clínicas  hospitalarias

Tutorías grupales

Prácticas  Externas

Sesiones de Evaluación

Total

Trabajo grupo

Trabajo autónomo

Total

Tema 1

2

2

2

Tema 2

52

6

2

8

16

36

36

Tema 3

42

5

3

10

1

2

18

24

24

Tema 4

46

6

2

10

1

1

22

24

24

Tema 5

8

2

2

6

6

Total

150

21

7

28

2

3

60

90

90

Lo siguiente es un resumen de horas en función del método utilizado:

MODALIDADES

Horas

%

Totales

Presencial

Clases Expositivas

21

14%

60

Práctica de aula / Seminarios / Talleres

7

4,7%

Prácticas de laboratorio / campo / aula de informática / aula de idiomas

28

18,7%

Prácticas clínicas hospitalarias

Tutorías grupales

2

1,3%

Prácticas Externas

Sesiones de evaluación

2

1,3%

No presencial

Trabajo en Grupo

90

Trabajo Individual

90

60%

Total

150

100%

De forma excepcional, si las condiciones sanitarias lo requieren, se podrán incluir actividades de docencia no presencial. En cuyo caso, se informará al estudiantado de los cambios efectuados.

La asignatura tendrá una evaluación de la parte más teórica y conceptual, en la que se evaluará el grado de adquisición de conceptos, abstracciones y habilidades propios de las competencias Com.8, Com.14, Com.1, Bas.5, Com.16 y CG-3. Para esta evaluación se realizará una prueba objetiva de respuesta corta al alumno.

Debido al carácter práctico de la asignatura, la parte con mayor peso en la evaluación será práctica, utilizando para ello un ordenador por alumno. Las competencias evaluadas son Com.8, Com.14, Com.1, Bas.5, CG-3, CG-4, CG-17 y CG-10. Esta consistirá en una serie de controles a realizar en las prácticas de laboratorio, consistentes en la ampliación o modificación del trabajo realizado por el alumno en las clases anteriores y de una forma autónoma.

Dependiendo de la convocatoria, la evaluación se realizará de forma distinta:

Convocatoria Ordinaria

Esta convocatoria posee evaluación continua. Se requiere un porcentaje de asistencia superior o igual al 80% de las prácticas de laboratorio.

La nota se compone de cuatro partes:

  • Examen teórico. Se realizará un único examen de teoría durante el periodo oficial de exámenes. Para superar la asignatura será necesario una nota mínima de 4 puntos sobre 10 en este examen.
  • Examen tipo test. Durante el periodo lectivo, tras finalizar la sesión 5 de teoría, se realizará un control de preguntas tipo test. Dicho control abarcará los contenidos teóricos y de seminarios explicados hasta la fecha.
  • Examen práctico. Se realizarán dos exámenes de laboratorio durante el periodo lectivo. Para superar la asignatura, será necesario una nota mínima de 3 puntos sobre 10 en cada uno de estos exámenes. Ambos exámenes tendrán el mismo peso en la nota de prácticas.
  • Entregas de actividades obligatorias. En las fechas de celebración de los exámenes de laboratorios, los alumnos deberán entregar una de las actividades obligatorias realizadas cada semana y que han sido previamente entregadas en el Campus Virtual. La elección de la actividad a entregar la realizará cada uno de los profesores de laboratorios y así lo establecerá por escrito en el enunciado del examen de laboratorios. La actividad a entregar podrá ser diferente para cada grupo de laboratorios. Estas entregas se realizarán junto con el examen práctico correspondiente y se considerarán un trabajo individual de los alumnos (según se establece en el reglamento de evaluación correspondiente). Para superar la asignatura será necesario una calificación de Apto en cada una de estas entregas solicitadas el día del examen.

En caso de cumplir los requisitos anteriores, la nota final se calculará como el 30% de la nota de teoría, el 10% de la nota del test y el 60% de la nota de laboratorios, debiendo esta ser superior a 5 para poder aprobar la asignatura. La nota será No Presentado cuando las pruebas de evaluación realizadas no superen el 50% de la evaluación total. Si el alumno no ha cumplido el porcentaje de asistencia requerido, o su calificación en alguna actividad no ha alcanzado el mínimo requerido, su nota final será el mínimo entre su nota final ponderada y 4 (Suspenso).

 

Convocatorias Extraordinarias (Extraordinaria adelantada y Extraordinaria)

La evaluación se trata de un examen de teoría y un examen práctico con el ordenador. La nota final se calculará como el 40% de la nota de teoría (incluyendo preguntas tipo test) y el 60% de la nota de prácticas.

Modelo de Evaluación Diferenciado

Aquellos alumnos a los que se les conceda el sistema de evaluación diferenciada no deberán satisfacer los porcentajes de asistencia del 80% para la convocatoria de mayo. El resto del sistema de evaluación se aplicará exactamente igual.

Otras consideraciones

De forma excepcional, si las condiciones sanitarias lo requieren, se podrán incluir métodos de evaluación no presencial. En cuyo caso, se informará al estudiantado de los cambios efectuados.

Recursos Bibliográficos

  • Oliver Sturm. Functional Programming in C#: Classic Programming Techniques for Modern Projects. Wiley. 2011.
  • Tomas Petricek, Jon Skeet. Real World Functional Programming: With Examples in F# and C#. Manning Publications; 2009.
  • Joseph Albahari. Threading in C#. Ebook disponible en http://www.albahari.com/threading
  • Mark Michaelis. Essential C# 8.0 (7th Edition). Addison-Wesley Professional; 7 edition. 2020.
  • Andrew Troelsen. Pro C# 10 with .NET 6, Eleventh Edition. Apress. 2022.
  • Joseph Albahari. C# 10 in a Nutshell: The Definitive Reference. O’Reilly. 2022.
  • C# programming guide. https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/. Última visita el 20-03-2023
  • C# documentation. https://learn.microsoft.com/en-us/dotnet/csharp/. Última visita el 20-03-2023.

Recursos Software

  • Microsoft Visual Studio 2022