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.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.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.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.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.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.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
-
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, -
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, -
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, -
Conocer un lenguaje de programación dinámico y funcional (híbrido) como Clojure.
Competencias relacionadas: CES1.1, CES1.3, CES1.7, CT5.3, -
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, -
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, -
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
-
Introducción a Clojure
Expresiones, condicionales, variables locales (let), definición de funciones, secuencias (listas, vectores, strings), recursividad e iteración. -
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 -
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. -
Programación con funciones de orden superior: Técnicas
Composición, Pipelining, CPS, TCO & Trampolining -
Estructuras de datos inmutables
Ventajas e inconvenientes. El caso de Clojure: Separar la gestión del estado y hacerla explícita (inmutabilidad por defecto) -
Secuencias perezosas
Estructuras de datos "infinitas": Aplicaciones. -
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
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
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
-
The Joy of Clojure
- Fogus, Michael; Houser, Chris,
Manning,
2014.
ISBN: 9781638351283
https://ebookcentral-proquest-com.recursos.biblioteca.upc.edu/lib/upcatalunya-ebooks/detail.action?pq-origsite=primo&docID=6642578 -
Clojure Programming: Practical Lisp for the Java World
- Emerick, Chas; Carper, Brian; Grand, Christophe,
O'Reilly Media,
2012.
ISBN: 9781449394707
https://discovery.upc.edu/discovery/fulldisplay?docid=alma991058640967306706&context=L&vid=34CSUC_UPC:VU1&lang=ca -
Mastering Clojure Macros: Write Cleaner, Faster, Smarter Code
- Jones, Colin,
The Pragmatic Programmers,
2014.
ISBN: 1941222226
https://ebookcentral-proquest-com.recursos.biblioteca.upc.edu/lib/upcatalunya-ebooks/detail.action?pq-origsite=primo&docID=5307312
Complementario
-
Elements of functional programming
- Reade, Chris,
Addison-Wesley,
1989.
ISBN: 0201129159
https://discovery.upc.edu/discovery/fulldisplay?docid=alma991000232459706711&context=L&vid=34CSUC_UPC:VU1&lang=ca -
Thinking Functionally with Haskell
- Bird, Richard,
Cambridge University Press,
2014.
ISBN: 9781107452640
https://discovery.upc.edu/discovery/fulldisplay?docid=alma991005151878906711&context=L&vid=34CSUC_UPC:VU1&lang=ca