Pasar al contenido principal

Conceptos Avanzados de Programación

Créditos
6
Tipos
Complementaria de especialidad (Ingeniería del Software)
Requisitos
Departamento
CS
Esta asignatura pretende explicar conceptos de programación que profundizan en el uso de determinadas construcciones y estructuras ligadas a paradigmas de programación que los estudiantes deberían conocer. Este año se explica programación funcional: funciones como objetos de primera clase, closures y modelo de entornos, programación utilizando funciones de orden superior (composición, pipelining, tail call optimization, continuation passing style, etc), inmutabilidad en estructuras de datos, evaluación perezosa y macros.

Profesorado

Responsable

  • Gerard Escudero Bakx (gerard.escudero@upc.edu)
  • Jordi Delgado Pin (jdelgado@cs.upc.edu)

Horas semanales

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

Competencias

Trabajo en equipo

  • G5 [Avaluable] - Ser capaz de trabajar como miembro de un equipo, ya sea como un miembro más, o realizando tareas de dirección con la finalidad de contribuir a desarrollar proyectos con pragmatismo y sentido de la responsabilidad, asumiendo compromisos teniendo en cuenta los recursos disponibles.
    • G5.2 - Planificar y acordar los objetivos, las reglas de funcionamiento, las responsabilidades, la agenda y el procedimiento de revisión del trabajo. Identificar conflictos, negociarlos y resolverlos de forma efectiva. Adaptarse a diferentes tipos de grupo (grande-pequeño, técnico-mixto, presencial-a distancia). Interactuar con eficacia y promover la participación de todos los miembros del grupo.
  • Competencias técnicas comunes

  • CT1 - Demostrar conocimiento y comprensión de hechos esenciales, conceptos, principios y teorías relativas a la informática y a sus disciplinas de referencia.
    • CT1.2C - Interpretar, seleccionar y valorar conceptos, teorías, usos y desarrollos tecnológicos relacionados con la informática y su aplicación a partir de los fundamentos matemáticos, estadísticos y físicos necesarios. CEFB1: Capacidad para la resolución de los problemas matemáticos que puedan plantarse en la ingeniería. Aptitud para aplicar los conocimientos sobre: algebra, cálculo diferencial e integral i métodos numéricos; estadística y optimización.
  • CT4 - Demostrar conocimiento y capacidad de aplicación de los procedimientos algorítmicos básicos de las tecnologías informáticas para diseñar soluciones a problemas, analizando la idoneidad y la complejidad de los algoritmos
    • CT4.1 - Identificar las soluciones algorítmicas más adecuadas para resolver problemas de dificultad mediana.
    • CT4.2 - Razonar sobre la corrección y la eficiencia de una solución algorítmica.
  • CT5 - Analizar, diseñar, construir y mantener aplicaciones de forma robusta, segura y eficiente, escogiendo el paradigma y los lenguajes de programación más adecuados.
    • CT5.1 - Escoger, combinar y explotar diferentes paradigmas de programación, en el momento de construir software, atendiendo a criterios como la facilidad de desarrollo, la eficiencia, la portabilidad y la mantenibilidad.
    • CT5.2 - Conocer, diseñar y utilizar de forma eficiente los tipos y las estructuras de datos más adecuados para la resolución de un problema.
    • CT5.3 - Diseñar, escribir, probar, depurar, documentar y mantener código en un lenguaje de alto nivel para resolver problemas de programación aplicando esquemas algorítmicos y usando estructuras de datos.
  • Especialidad ingeniería del software

  • CES1 - Desarrollar, mantener y evaluar servicios y sistemas software que satisfagan todos los requisitos del usuario, que se comporten de forma fiable y eficiente, que tengan un desarrollo y mantenimiento asequible y que cumplan normas de calidad, aplicando las teorías, los principios, los métodos y las prácticas de Ingeniería del Software.
    • CES1.1 - Desarrollar mantener y evaluar sistemas y servicios software complejos y/o críticos.
    • CES1.3 - Identificar, evaluar y gestionar los riesgos potenciales asociados a la construcción de software que pudiesen presentarse.
    • CES1.7 - Controlar la calidad y diseñar pruebas en la producción de software.
  • Especialidad de computación

  • CCO2 - Desarrollar de forma efectiva y eficiente los algoritmos y el software apropiados para resolver problemas complejos de computación.
    • CCO2.2 - Capacidad para adquirir, obtener, formalizar y representar el conocimiento humano de una forma computable para la resolución de problemas mediante un sistema informático en cualquier ámbito de aplicación, particularmente los relacionados con aspectos de computación, percepción y actuación en ambientes o entornos inteligentes.
  • Objetivos

    1. Conocer las capacidades que proporciona a un lenguaje de programación disponer de funciones de orden superior
      Competencias relacionadas: CT1.2C, CES1.1, CT4.2, CCO2.2, CES1.3, CES1.7, CT5.1,
    2. Trabajar las técnicas asociadas a funciones de orden superior en el lenguaje de programación Clojure
      Competencias relacionadas: CES1.1, CT4.1, CT4.2, CT5.2, CES1.3, CT5.3,
    3. Conocer qué es un cierre (closure) y algunas técnicas asociadas a su utilización.
      Competencias relacionadas: CT1.2C, CES1.1, CT4.2, CT5.2, CES1.3, CT5.1,
    4. Conocer un lenguaje de programación dinámico y funcional (híbrido) como Clojure.
      Competencias relacionadas: CES1.1, CES1.3, CES1.7, CT5.3,
    5. Conocer estructuras de datos inmutables y qué consecuencias tiene disponer de ellas en un lenguaje de programación.
      Competencias relacionadas: CES1.1, CT4.1, CT5.2, CCO2.2, CES1.3, CES1.7, CT5.1, CT5.3,
    6. Conocer el concepto de evaluación perezosa y las consecuencias de poder elegir entre distintos tipos de evaluación
      Competencias relacionadas: CES1.1, CT4.2, CES1.3, CES1.7, CT5.1, CT5.3,
    7. Ser capaz de desarrollar en equipo ejercicios de laboratorio que utilicen parte de lo que se enseña en el curso
      Competencias relacionadas: CES1.1, G5.2, CES1.7,

    Contenidos

    1. Introducción a Clojure
      Expresiones, condicionales, variables locales (let), definición de funciones, secuencias (listas, vectores, strings), recursividad e iteración.
    2. Funcions de primera-classe
      Funciones como parámetro, guardar funciones en estructuras de datos. Maneras de iterar sobre colecciones: reduce, map, filtro, foldr, etc. Retornar funciones
    3. Closures: El modelo de entornos
      Contexto léxico (lexical scope), Las funciones no son tales: Capturan el contexto léxico, Si tenemos closures no se necesitan objetos: Ejemplos. Explicar el funcionamiento basado en el modelo de entornos.
    4. Programación con funciones de orden superior: Técnicas
      Composición, Pipelining, CPS, TCO & Trampolining
    5. Estructuras de datos inmutables
      Ventajas e inconvenientes. El caso de Clojure: Separar la gestión del estado y hacerla explícita (inmutabilidad por defecto)
    6. Secuencias perezosas
      Estructuras de datos "infinitas": Aplicaciones.
    7. Macros
      El concepto de 'Macro' en el mundo de los lenguajes Lisp. Reflexión.

    Actividades

    Actividad Acto evaluativo


    Introducción a Clojure

    El estudiante debería estar atento en clase y trabajar los ejercicios propuestos por el profesor.
    Objetivos: 4
    Contenidos:
    Teoría
    4h
    Problemas
    0h
    Laboratorio
    4h
    Aprendizaje dirigido
    0h
    Aprendizaje autónomo
    10h

    Funcions de primera-classe y Closures: El modelo de entornos

    Es necesario que el estudiante esté atento en clase y realice los ejercicios propuestos.
    Objetivos: 1 2 3
    Contenidos:
    Teoría
    8h
    Problemas
    0h
    Laboratorio
    8h
    Aprendizaje dirigido
    0h
    Aprendizaje autónomo
    18h

    Programación con funciones de orden superior: Técnicas

    Es necesario que el estudiante esté atento en clase y realice los ejercicios propuestos.
    Objetivos: 1 2 3
    Contenidos:
    Teoría
    8h
    Problemas
    0h
    Laboratorio
    8h
    Aprendizaje dirigido
    0h
    Aprendizaje autónomo
    18h

    Control teoría


    Objetivos: 4 1 2 3
    Semana: 8
    Teoría
    0h
    Problemas
    0h
    Laboratorio
    0h
    Aprendizaje dirigido
    0h
    Aprendizaje autónomo
    0h

    Estructuras de datos inmutables

    El estudiante debería estar atento en clase y trabajar los ejercicios propuestos por el profesor.
    Objetivos: 5
    Contenidos:
    Teoría
    2h
    Problemas
    0h
    Laboratorio
    2h
    Aprendizaje dirigido
    0h
    Aprendizaje autónomo
    6h

    Secuencias perezosas

    El estudiante debería estar atento en clase y trabajar los ejercicios propuestos por el profesor.
    Objetivos: 6
    Contenidos:
    Teoría
    2h
    Problemas
    0h
    Laboratorio
    2h
    Aprendizaje dirigido
    0h
    Aprendizaje autónomo
    6h

    Macros

    El estudiante debería estar atento en clase y trabajar los ejercicios propuestos por el profesor.
    Objetivos: 4
    Contenidos:
    Teoría
    4h
    Problemas
    0h
    Laboratorio
    4h
    Aprendizaje dirigido
    0h
    Aprendizaje autónomo
    10h

    Práctica

    Fecha de entrega: A lo largo del curso
    Objetivos: 7
    Semana: 15 (Fuera de horario lectivo)
    Teoría
    0h
    Problemas
    0h
    Laboratorio
    0h
    Aprendizaje dirigido
    0h
    Aprendizaje autónomo
    0h

    Control final


    Objetivos: 4 5 6 1 2 3
    Semana: 15 (Fuera de horario lectivo)
    Teoría
    0h
    Problemas
    0h
    Laboratorio
    0h
    Aprendizaje dirigido
    0h
    Aprendizaje autónomo
    0h

    Metodología docente

    La docencia de la asignatura está estructurada en clases de teoría y clases de laboratorio.

    En las clases de teoría los profesores presentan los contenidos esenciales de la asignatura. En las clases de laboratorio se practican los contenidos de la asignatura (los presentados en clase y los adquiridos autónomamente) mediante la realización de problemas prácticos. Las clases de laboratorio serán una continuación de las clases teóricas, donde los conceptos nuevos se implementarán a medida que vayan apareciendo.

    Método de evaluación

    El método de evaluación de la asignatura consistirá en dos pruebas de carácter teórico (P y F), una a mediados de curso y otra al final y ejercicios de laboratorio que se entregaran en grupos de dos personas (L). La evaluación del laboratorio se realizará de la siguiente manera: Los estudiantes harán entrega de entre 5 y 7 ejercicios a lo largo del curso en grupos de dos personas, siendo la nota de laboratorio la media de estas notas.

    Entonces, el método de evaluación es = Teoría*0.8 + L*0.2
    donde:
    Teoría: MAX(F,(P+F)/2)

    Competencia transversal "Trabajo en equipo":

    Se evalúa usando una rúbrica simple en que el tutor de cada grupo puntúa los
    diferentes aspectos del trabajo en equipo de cada miembro de los grupos.

    Bibliografía

    Básico

    Complementario

    Capacidades previas

    Los alumnos deberían tener conocimientos suficientes de estructuras de datos y algoritmos