Los lenguajes de programación son la herramienta básica en muchas de las actividades que realizará un ingeniero informático. Es por ello, que la capacidad de elegir el lenguaje de programación más adecuado es crucial. Hay que tener en cuenta que no es lo mismo si nos interesa principalmente la eficiencia, la fiabilidad o la velocidad de desarrollo. La asignatura dará una visión global sobre los lenguajes de programación, así como una pequeña introducción a la compilación. Además, presentaremos con un poco más de detalle los lenguajes funcionales y los usaremos para introducir nuevos elementos de los lenguajes de programación, tales como los sistemas de tipos o la programación de orden superior. También mostraremos cómo estos lenguajes pueden ser usados ¿¿para especificar y modelar hardware y software o, por ejemplo, en aplicaciones financieras. Finalmente, se considerarán brevemente los lenguajes de scripting, cada vez más usados¿¿, tanto en el prototipado como en el desarrollo de aplicaciones. Cabe destacar que la asignatura también trabajará la capacidad para aprender nuevos lenguajes.
Profesorado
Responsable
Jordi Petit Silvestre (
)
Otros
Edelmira Pasarella Sanchez (
)
Gerard Escudero Bakx (
)
Jordi Delgado Pin (
)
Horas semanales
Teoría
2
Problemas
0
Laboratorio
2
Aprendizaje dirigido
0
Aprendizaje autónomo
6
Competencias
Competencias Transversales
Comunicación eficaz oral y escrita
G4 [Avaluable] - Comunicar de forma oral y escrita con otras personas conocimientos, procedimientos, resultados e ideas. Participar en debates sobre temas propios de la actividad del ingeniero técnico en informática.
G4.3
- Comunicarse de manera clara y eficiente en presentaciones orales y escritas sobre temas complejos, adaptándose a la situación, al tipo de público y a los objetivos de la comunicación utilizando las estrategias y los medios adecuados. Analizar, valorar y responder adecuadamente a las preguntas del auditorio.
Uso solvente de los recursos de información
G6 [Avaluable] - Gestionar la adquisición, la estructuración, el análisis y la visualización de datos e información del ámbito de la ingeniería informática y valorar de forma crítica los resultados de esta gestión.
G6.3
- Planificar y utilizar la información necesaria para un trabajo académico (por ejemplo, para el trabajo de final de grado) a partir de una reflexión crítica sobre los recursos de información utilizados. Gestionar la información de manera competente, independiente y autónoma. Evaluar la información encontrada e identificar las lagunas presentes.
Competencias Técnicas de cada especialidad
Especialidad de computación
CCO1 - Tener un conocimiento profundo de los principios fundamentales y de los modelos de la computación y saberlos aplicar para interpretar, seleccionar, valorar, modelar y crear nuevos conceptos, teorías, usos y desarrollos tecnológicos relacionados con la informática.
CCO1.2
- Demostrar conocimiento de los fundamentos teóricos de los lenguajes de programación y las técnicas de procesamiento léxico, sintáctico y semántico asociadas, y saber aplicarlas para la creación, el diseño y el procesamiento de lenguajes.
Objetivos
Conocer los diferentes pasos de la compilación, en particular el análisis léxico, el sintáctico y el semántico.
Learn tools for generating lexical analyzers and parsers.
Competencias relacionadas:
CCO1.2,
Conocer las diferencias entre un compilador y un intérprete.
Competencias relacionadas:
CCO1.2,
Diferenciar las características de un lenguaje de programación. Identificar sus puntos fuertes y sus puntos débiles y ser capaz de justificar una elección.
Competencias relacionadas:
G4.3,
CCO1.2,
Conocer las características principales de los lenguajes de programación funcionales.
Competencias relacionadas:
CCO1.2,
Conocer construcciones avanzadas de los lenguajes de programación.
Competencias relacionadas:
CCO1.2,
Ser capaz de modelar y especificar problemas de hardware o software usando lenguajes funcionales.
Competencias relacionadas:
G4.3,
G6.3,
CCO1.2,
Conocer las características principales de los lenguajes de scripting.
Competencias relacionadas:
CCO1.2,
Ser capaz de aprender nuevos lenguajes de programación de forma autónoma.
Competencias relacionadas:
CCO1.2,
G6.3,
Contenidos
Introducción a los lenguajes de programación.
Turing completitud. Paradigmas de la programación. Características principales.
Introducción a la compilación.
Compilación e interpretación. El análisis léxico. El análisis sintáctico. Gramáticas. Tabla de símbolos. Árbol de sintaxis abstracta. Análisis semántico. Generación de código.
Lenguajes funcionales.
Fundamentos. Pattern Matching. Evaluación Eager/Lazy. Introducción a Haskell.
Sistemas de tipos.
Los tipos en los lenguajes de programación. Los tipos y la fiabilidad. Sistemas de tipos en los lenguajes funcionales y en los lenguajes orientados a objetos.
Programación de orden superior
Las funciones de orden superior. Aplicaciones. Programación de funciones de orden superior en lenguajes funcionales y orientados a objetos.
Especificación y modelado usando lenguajes funcionales
Lenguajes declarativos en la especificación y el modelado. Prototipado. Especificaciones ejecutables. Transformación de programas.
Llenguajes de scripting
Características. Utilización de lenguajes de scripting. Combinación de paradigmas. Tipos. Orden superior. Breve introducción a Python.
Actividades
ActividadActo evaluativo
Introducción a los lenguajes de programación
Es presentaran els continguts a la classe de teoria i es realitzaran treballs pràctics a la sessió de laboratori. Objetivos:459 Contenidos:
Presentació dels continguts a les classes de teoria. Realització de pràctiques de laboratori utilitzant analitzadors lèxics i sintàctics i realitzant un petit treball pràctic. Objetivos:123 Contenidos:
Prova sobre els continguts del tema 2. Objetivos:123 Semana:
6
Teoría
2h
Problemas
0h
Laboratorio
0h
Aprendizaje dirigido
0h
Aprendizaje autónomo
8h
Lenguajes funcionales
Presentació de continguts i realització de problemes a les classes de teoria. Realització de treballs pràctics en Haskell a les sessions de laboratori. Objetivos:459 Contenidos:
Presentació de continguts a les sessions de teoria, que són treballats per al llenguatge Haskell a les sessió de laboratori. Objetivos:4569
Teoría
4h
Problemas
0h
Laboratorio
0h
Aprendizaje dirigido
0h
Aprendizaje autónomo
6h
Programación de ordren superior
Presentació de continguts a les sessions de teoria i aplicació al llenguatge Haskell a les sessions de laboratori.. També es veurà quines formes de programació d'ordre superior admeten a d'altres llenguatges coneguts com ara Java. Objetivos:4569 Contenidos:
Especificación y modelado usando llenguajes funcionales
Presentació de continguts a les sessions de teoria i realització d'algun cas pràctic, que posteriorment es codificat a la sessió de laboratori. Objetivos:57 Contenidos:
Examen escrit dels Temes 3 a 5. Objetivos:56 Semana:
10
Teoría
0h
Problemas
0h
Laboratorio
2h
Aprendizaje dirigido
0h
Aprendizaje autónomo
10h
Lenguajes de scripting
Presentació de les característiques principals i d'algun exemples de llenguatges a classe de teoria. Utilització de llenguatges de scripting al laboratori, com ara gestors de processos o per navegadors web, etc. Objetivos:3489 Contenidos:
L'estudiant haurà d'aprendre un nou llenguatge que se li assignarà.
Teoría
2h
Problemas
0h
Laboratorio
2h
Aprendizaje dirigido
0h
Aprendizaje autónomo
4h
CT
En aquest acte s'avaluarà l'aprenentatge Objetivos:49 Semana:
14
Teoría
1h
Problemas
0h
Laboratorio
0h
Aprendizaje dirigido
0h
Aprendizaje autónomo
6h
Actividades de repaso
Teoría
2h
Problemas
0h
Laboratorio
2h
Aprendizaje dirigido
0h
Aprendizaje autónomo
6h
EF
Objetivos:45678 Semana:
15 (Fuera de horario lectivo)
Teoría
3h
Problemas
0h
Laboratorio
0h
Aprendizaje dirigido
0h
Aprendizaje autónomo
12h
Metodología docente
Las clases están divididas en sesiones de teoría y laboratorio.
En las sesiones de teoría se desarrollarán los conocimientos de la asignatura, intercalando la exposición de nuevo material teórico con ejemplos y la interacción con los alumnos para discutir los conceptos.
En las clases de laboratorio se pondrán en prácticas los conceptos introducidos y se aplicarán a lenguajes de programación y problemas concretos. Se realizarán tres pequeñas prácticas que irán asociadas a las diferentes pruebas de evaluación.
Método de evaluación
La nota de la asignatura es
N = 0.50·F + 0.20·P1 + 0.20·P2 + 0.10·D
donde:
F = nota del examen final
P1 = nota de la primera práctica (mediados de curso)
P2 = nota de la segunda práctica (finales de curso)
D = nota del trabajo dirigido
El examen parcial será un examen de ordenador que evalúa Haskell. El examen final será un examen escrito que evaluará todos los contenidos del curso. La práctica consiste en utilizar herramientas para generar compiladores y Python para resolver un caso práctico.
El trabajo dirigido consiste en preparar un vídeo y un documento escrito sobre las propiedades de un o algunos lenguajes de programación. Su evaluación se hará para evaluación entre compañeros (co-evaluación). Las calificaciones de las competencias transversales se obtienen del trabajo dirigido.
Capacidades previas sobre lógica adquiridas en la asignatura Fundamentos Matemáticos (FM):
- Conocimiento de los conceptos básicos de lógica proposicional y de predicados
- Conocimientos sobre Inferencia lógica.
Capacidades previas sobre programación adquiridas en las asignaturas de Estructura de Datos y Algoritmos (EDA) y Proyectos de Programación (PROP):
- Conocimiento sobre programación.
- Conocimiento sobre lenguajes de programación orientados a objetos