Pasar al contenido principal

Lenguajes de Programación

Créditos
6
Tipos
  • GRAU: Obligatoria de especialidad (Computación)
  • GCED: Optativa
Requisitos
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

Otros

Horas semanales

Teoría
2
Problemas
0
Laboratorio
2
Aprendizaje dirigido
0
Aprendizaje autónomo
6

Competencias

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.
  • 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: G4.3, CCO1.2,
    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: G4.3, G6.3, CCO1.2,
    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
    Teoría
    0h
    Problemas
    0h
    Laboratorio
    0h
    Aprendizaje dirigido
    0h
    Aprendizaje autónomo
    0h

    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
    Teoría
    0h
    Problemas
    0h
    Laboratorio
    0h
    Aprendizaje dirigido
    0h
    Aprendizaje autónomo
    0h

    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
    Teoría
    0h
    Problemas
    0h
    Laboratorio
    0h
    Aprendizaje dirigido
    0h
    Aprendizaje autónomo
    0h

    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)
    Teoría
    0h
    Problemas
    0h
    Laboratorio
    0h
    Aprendizaje dirigido
    0h
    Aprendizaje autónomo
    0h

    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.

    Bibliografía

    Básico

    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