Aquesta assignatura pretén explicar conceptes de programació que aprofundeixen en l'ús de determinades construccions i estructures lligades a paradigmes de programació que els estudiants ja haurien de conèixer. Enguany s'explica programació funcional: funcions com a objectes de primera classe, closures i model d'entorns, programació fent servir funcions d'ordre superior (composició, pipelining, tail call optimization, continuation passing style, etc), immutabilitat en estructures de dades, avaluació mandrosa i macros.
Professorat
Responsable
Gerard Escudero Bakx (
)
Jordi Delgado Pin (
)
Hores setmanals
Teoria
2
Problemes
0
Laboratori
2
Aprenentatge dirigit
0
Aprenentatge autònom
6
Competències
Competències Transversals
Treball en equip
G5 [Avaluable] - Ser capaç de treballar com a membre d'un equip, ja sigui com a un membre més, ja sigui realitzant tasques de direcció, amb la finalitat de contribuir a desenvolupar projectes d'una manera pragmàtica i amb sentit de la responsabilitat; assumir compromisos tenint en compte els recursos disponibles.
G5.2
- Planificar i acordar els objectius, les regles de funcionament, les responsabilitats, l'agenda i el procediment de revisió de la feina. Identificar conflictes, negociar-los i resoldre-los de forma efectiva. Adaptar-se a diferents tipus de grups (gran/petit, tècnic/mixt, presencial /a distància). Interactuar amb eficàcia i promoure la participació de tots els membres del grup.
Competències Tècniques
Competències tècniques comunes
CT1 - Demostrar coneixement i comprensió de fets essencials, conceptes, principis i teories relatives a la informàtica i a les seves disciplines de referència.
CT1.2C
- Interpretar, seleccionar i valorar conceptes, teories, usos i desenvolupaments tecnològics relacionats amb la informàtica i la seva aplicació a partir dels fonaments matemàtics, estadístics i físics necessaris. CEFB3. Capacitat per a comprendre i dominar els conceptes bàsics de matemàtica discreta, lògica, algorísmica i complexitat computacional, i la seva aplicació per al tractament automàtic de la informació mitjançant sistemes computacionals i la seva aplicació per a la resolució de problemes propis de l'enginyeria.
CT4 - Demostrar coneixement i capacitat d'aplicació dels procediments algorísmics bàsics de les tecnologies informàtiques per a dissenyar solucions a problemes, analitzant la idoneïtat i la complexitat dels algorismes
CT4.1
- Identificar les solucions algorísmiques més adequades per a resoldre problemes de dificultat mitjana.
CT4.2
- Raonar sobre la correcció i l'eficiència d'una solució algorísmica.
CT5 - Analitzar, dissenyar, construir i mantenir aplicacions de forma robusta, segura i eficient, triant el paradigma i els llenguatges de programació més adequats.
CT5.1
- Triar, combinar i explotar diferents paradigmes de programació, en el moment de construir software, tenint en compte criteris com la facilitat de desenvolupament, l'eficiència, la portabilitat i la mantenibilitat.
CT5.2
- Conèixer, dissenyar i utilitzar de forma eficient els tipus i les estructures de dades més adients per a la resolució d'un problema.
CT5.3
- Dissenyar, escriure, provar, depurar, documentar i mantenir codi en un llenguatge d'alt nivell per a resoldre problemes de programació aplicant esquemes algorísmics i utilitzant estructures de dades.
Competències Tècniques de cada especialitat
Especialitat enginyeria del software
CES1 - Desenvolupar, mantenir i avaluar serveis i sistemes software que satisfacin tots els requisits de l'usuari, que es comportin de forma fiable i eficient, que tinguin un desenvolupament i un manteniment assequible i que compleixin normes de qualitat aplicant les teories, els principis, els mètodes i les pràctiques d'Enginyeria del Software.
CES1.1
- Desenvolupar, mantenir i avaluar sistemes i serveis software complexos i/o crítics.
CES1.3
- Identificar, avaluar i gestionar els riscos potencials associats a la construcció de software que es poguessin presentar.
CES1.7
- Controlar la qualitat i dissenyar proves en la producció de software.
Especialitat computació
CCO2 - Desenvolupar de forma efectiva i eficient els algorismes i el software apropiats per a resoldre problemes complexos de computació.
CCO2.2
- Capacitat per a adquirir, obtenir, formalitzar i representar el coneixement humà d'una forma computable per a la resolució de problemes mitjançant un sistema informàtic en qualsevol àmbit d'aplicació, particularment en els que estan relacionats amb aspectes de computació, percepció i actuació en ambients o entorns intel·ligents.
Objectius
Conèixer les capacitats que proporciona a un llenguatge de programació el fet de disposar de funcions d'ordre superior
Competències relacionades:
CT1.2C,
CES1.1,
CT4.2,
CCO2.2,
CES1.3,
CES1.7,
CT5.1,
Treballar les tècniques associades a funcions d'ordre superior en el llenguatge de programació Clojure
Competències relacionades:
CES1.1,
CT4.1,
CT4.2,
CT5.2,
CES1.3,
CT5.3,
Conèixer què és un tancament (closure) i algunes tècniques associades a la seva utilització.
Competències relacionades:
CT1.2C,
CES1.1,
CT4.2,
CT5.2,
CES1.3,
CT5.1,
Conèixer un llenguatge de programació dinàmic i funcional (híbrid) com Clojure
Competències relacionades:
CES1.1,
CES1.3,
CES1.7,
CT5.3,
Conèixer estructures de dades immutables i quines conseqüències té disposar-ne en un llenguatge de programació.
Competències relacionades:
CES1.1,
CT4.1,
CT5.2,
CCO2.2,
CES1.3,
CES1.7,
CT5.1,
CT5.3,
Conèixer el concepte d'avaluació mandrosa i les conseqüències de poder triar entre diferents tipus d'avaluació
Competències relacionades:
CES1.1,
CT4.2,
CES1.3,
CES1.7,
CT5.1,
CT5.3,
Ser capaç de desenvolupar en equip exercicis que utilitzin part del que s'ensenya en el curs
Competències relacionades:
CES1.1,
G5.2,
CES1.7,
Continguts
Introducció a Clojure
Expressions, condicionals, variables locals (let), definició de funcions, seqüències (llistes, vectors, strings), recursivitat i iteració.
Funcions de primera-classe
Funcions com a paràmetre, guardar funcions en estructures de dades. Maneres d'iterar sobre col·leccions: reduce, map, filter, foldr, etc. Retornar funcions
Closures: Model d'entorns
Context lèxic (lexical scope), Les funcions no són tals: Capturen el context lèxic, Si tenim closures no calen objectes: Exemples. Explicar el funcionament basat en el model d'entorns.
Estructures de dades immutables
Avantatges i inconvenients. El cas de Clojure: Separar la gestió de l'estat i fer-la explícita (immutabilitat per defecte)
Avaluació mandrosa
Estructures de dades "infinites". Aplicacions
Macros
El concepte de 'Macro' en el món dels llenguatges Lisp. Reflexió.
Activitats
ActivitatActe avaluatiu
Introducció a Clojure
Cal que l'estudiant estigui atent a classe i realitzi els exercicis proposats. Objectius:4 Continguts:
La docència de l'assignatura està estructurada en classes de teoria i classes de laboratori.
A les classes de teoria els professors presenten els continguts essencials de l'assignatura. A les classes de laboratori es practiquen els continguts de l'assignatura (els presentats a classe i els adquirits autònomament) mitjançant la realització de problemes pràctics. Les classes de laboratori seran una continuació de les classes teòriques, on els conceptes nous s'implementaran a mida que vagin apareixent.
Mètode d'avaluació
El mètode d'avaluació de l'assignatura consistirà en dues proves de caire teòric (P i F), una a mitjans de curs i l'altre al final i exercicis de laboratori que s'entregaran en grups de dos persones (L). L'avaluació del laboratori es farà de la següent manera: Els estudiants faran entrega d'entre 5 i 7 exercicis al llarg del curs en grups de dos persones, i la nota de laboratori serà la mitjana d'aquestes notes.
Aleshores, el mètode d'avaluació seria:
= Teoria*0.5 + L*0.5 si la nota de Teoria és >= 3.5
= Teoria si la nota de Teoria és < 3.5
on:
Teoria: MAX(F,(P+F)/2)
Competència transversal "Treball en equip":
S'avalua usant una rúbrica simple en que el tutor de cada grup puntua els
diferents aspectes del treball en equip de cada membre dels grups.