Lenguajes de Programación

Usted está aquí

Créditos
6
Tipos
Obligatoria de especialidad (Computación)
Requisitos
  • Correquisito: PROP
Departamento
CS
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

  1. Conocer los diferentes pasos de la compilación, en particular el análisis léxico, el sintáctico y el semántico.

    Competencias relacionadas: CCO1.2,
  2. Learn tools for generating lexical analyzers and parsers.
    Competencias relacionadas: CCO1.2,
  3. Conocer las diferencias entre un compilador y un intérprete.
    Competencias relacionadas: CCO1.2,
  4. 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: CCO1.2, G4.3,
  5. Conocer las características principales de los lenguajes de programación funcionales.
    Competencias relacionadas: CCO1.2,
  6. Conocer construcciones avanzadas de los lenguajes de programación.
    Competencias relacionadas: CCO1.2,
  7. Ser capaz de modelar y especificar problemas de hardware o software usando lenguajes funcionales.
    Competencias relacionadas: CCO1.2, G4.3, G6.3,
  8. Conocer las características principales de los lenguajes de scripting.
    Competencias relacionadas: CCO1.2,
  9. Ser capaz de aprender nuevos lenguajes de programación de forma autónoma.
    Competencias relacionadas: CCO1.2, G6.3,

Contenidos

  1. Introducción a los lenguajes de programación.
    Turing completitud. Paradigmas de la programación. Características principales.
  2. 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.
  3. Lenguajes funcionales.
    Fundamentos. Pattern Matching. Evaluación Eager/Lazy. Introducción a Haskell.
  4. 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.
  5. 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.
  6. Especificación y modelado usando lenguajes funcionales
    Lenguajes declarativos en la especificación y el modelado. Prototipado. Especificaciones ejecutables. Transformación de programas.
  7. Llenguajes de scripting
    Características. Utilización de lenguajes de scripting. Combinación de paradigmas. Tipos. Orden superior. Breve introducción a Python.

Actividades

Actividad Acto 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: 4 5 9
Contenidos:
Teoría
2h
Problemas
0h
Laboratorio
0h
Aprendizaje dirigido
0h
Aprendizaje autónomo
4h

Introducción a la compilación

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: 1 2 3
Contenidos:
Teoría
2h
Problemas
0h
Laboratorio
8h
Aprendizaje dirigido
0h
Aprendizaje autónomo
8h

CL

Prova sobre els continguts del tema 2.
Objetivos: 1 2 3
Semana: 6
Tipo: examen de teoría
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: 4 5 9
Contenidos:
Teoría
4h
Problemas
0h
Laboratorio
6h
Aprendizaje dirigido
0h
Aprendizaje autónomo
8h

Sistemas de tipos

Presentació de continguts a les sessions de teoria, que són treballats per al llenguatge Haskell a les sessió de laboratori.
Objetivos: 4 5 6 9
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: 4 5 6 9
Contenidos:
Teoría
2h
Problemas
0h
Laboratorio
2h
Aprendizaje dirigido
0h
Aprendizaje autónomo
6h

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: 5 7
Contenidos:
Teoría
4h
Problemas
0h
Laboratorio
2h
Aprendizaje dirigido
0h
Aprendizaje autónomo
6h

EP

Examen escrit dels Temes 3 a 5.
Objetivos: 5 6
Semana: 10
Tipo: examen de laboratorio
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: 3 4 8 9
Contenidos:
Teoría
2h
Problemas
0h
Laboratorio
6h
Aprendizaje dirigido
0h
Aprendizaje autónomo
6h

Aprendizaje de un nuevo lenguaje de programación

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: 4 9
Semana: 14
Tipo: examen de teoría
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: 4 5 6 7 8
Semana: 15 (Fuera de horario lectivo)
Tipo: examen de teoría
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.40·F + 0.25·P1 + 0.25·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.

Bibliografía

Básica:

Capacidades previas

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