Conceptos Avanzados de Programación

Usted está aquí

Créditos
6
Tipos
Complementaria de especialidad (Ingeniería del Software)
Requisitos
  • Prerrequisito: IES
  • Prerrequisito: PROP
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 ( )
  • Jordi Delgado Pin ( )

Horas semanales

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

Competencias

Competencias Transversales

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

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.

Competencias Técnicas de cada especialidad

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. Evaluación perezosa
    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
2h
Aprendizaje dirigido
0h
Aprendizaje autónomo
12h

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

Evaluación perezosa

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
2h
Problemas
0h
Laboratorio
0h
Aprendizaje dirigido
0h
Aprendizaje autónomo
10h

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 sería:
= Teoría*0.5 + L*0.5 si la nota de Teoría és >= 3.5
= Teoría si la nota de Teoría és < 3.5
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ásica:

Complementaria:

Capacidades previas

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