Estudia
- Artes y humanidades
- Ciencias
- Ciencias de la salud
- Ciencias sociales y jurídicas
-
Ingeniería y arquitectura
- Doble Máster Universitario en Ingeniería Industrial e Ingeniería Energética
- Máster Erasmus Mundus en Ingeniería Mecatrónica
- Máster Universitario Erasmus Mundus en Tecnología y Gestión para la Economía Circular
- Máster Erasmus Mundus en Transporte Sostenible y Sistemas Eléctricos de Potencia
- Máster Universitario en Ciencia y Tecnología de Materiales
- Máster Universitario en Conversión de Energía Eléctrica y Sistemas de Potencia
- Máster Universitario en Conversión de Energía Eléctrica y Sistemas de Potencia (Plan antiguo)
- Máster Universitario en Dirección de Proyectos
- Máster Universitario en Geotecnología y Desarrollo de Proyectos SIG
- Máster Universitario en Ingeniería de Automatización e Informática Industrial
- Máster Universitario en Ingeniería de Caminos, Canales y Puertos
- Máster Universitario en Ingeniería de Minas
- Máster Universitario en Ingeniería de Telecomunicación
- Máster Universitario en Ingeniería Energética
- Máster Universitario en Ingeniería Industrial
- Máster Universitario en Ingeniería Informática
- Máster Universitario en Ingeniería Mecatrónica
- Máster Universitario en Ingeniería Química
- Máster Universitario en Ingeniería Web (nuevo-implantación en curso 2024-25)
- Máster Universitario en Ingeniería Web (En Extinción)
- Máster Universitario en Integridad y Durabilidad de Materiales, Componentes y Estructuras
- Máster Universitario en Náutica y Gestión del Transporte Marítimo
- Máster Universitario en Tecnologías Marinas y Mantenimiento
- Máster Universitario en Prevención de Riesgos Laborales
- Información, acceso y becas
Tecnología y Paradigmas de Programación
- Tutorías Grupales (2 Horas)
- Prácticas de Aula/Semina (7 Horas)
- Prácticas de Laboratorio (28 Horas)
- Clases Expositivas (21 Horas)
- José Quiroga Álvarez - Correo electrónico
- José Quiroga Álvarez - Correo electrónico
- José Otero Rodríguez - Correo electrónico
- Miguel Sánchez Santillán - Correo electrónico
- Javier Escalada Gómez - Correo electrónico
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