Conceptes Avançats de Programació

Esteu aquí

Crèdits
6
Tipus
Complementària d'especialitat (Enginyeria del Software)
Requisits
  • Prerequisit: IES
  • Prerequisit: PROP
Departament
CS
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

  1. 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,
  2. 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,
  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,
  4. 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,
  5. 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,
  6. 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,
  7. 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

  1. Introducció a Clojure
    Expressions, condicionals, variables locals (let), definició de funcions, seqüències (llistes, vectors, strings), recursivitat i iteració.
  2. 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
  3. 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.
  4. Programació amb funcions d'ordre superior: Tècniques
    Composició, Pipelining, CPS, TCO & Trampolining
  5. 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)
  6. Avaluació mandrosa
    Estructures de dades "infinites". Aplicacions
  7. Macros
    El concepte de 'Macro' en el món dels llenguatges Lisp. Reflexió.

Activitats

Activitat Acte avaluatiu


Introducció a Clojure

Cal que l'estudiant estigui atent a classe i realitzi els exercicis proposats.
Objectius: 4
Continguts:
Teoria
4h
Problemes
0h
Laboratori
4h
Aprenentatge dirigit
0h
Aprenentatge autònom
10h

Funcions de primera-classe i Closures: Model d'entorns

Cal que l'estudiant estigui atent a classe i realitzi els exercicis proposats.
Objectius: 1 2 3
Continguts:
Teoria
8h
Problemes
0h
Laboratori
8h
Aprenentatge dirigit
0h
Aprenentatge autònom
18h

Programació amb funcions d'ordre superior: Tècniques

Cal que l'estudiant estigui atent a classe i realitzi els exercicis proposats.
Objectius: 1 2 3
Continguts:
Teoria
8h
Problemes
0h
Laboratori
8h
Aprenentatge dirigit
0h
Aprenentatge autònom
18h

Control teoria


Objectius: 4 1 2 3
Setmana: 8
Teoria
0h
Problemes
0h
Laboratori
2h
Aprenentatge dirigit
0h
Aprenentatge autònom
12h

Estructures de dades immutables

Cal que l'estudiant estigui atent a classe i realitzi els exercicis proposats.
Objectius: 5
Continguts:
Teoria
2h
Problemes
0h
Laboratori
2h
Aprenentatge dirigit
0h
Aprenentatge autònom
6h

Avaluació mandrosa

Cal que l'estudiant estigui atent a classe i realitzi els exercicis proposats.
Objectius: 6
Continguts:
Teoria
2h
Problemes
0h
Laboratori
2h
Aprenentatge dirigit
0h
Aprenentatge autònom
6h

Macros

Cal que l'estudiant estigui atent a classe i realitzi els exercicis proposats.
Objectius: 4
Continguts:
Teoria
4h
Problemes
0h
Laboratori
4h
Aprenentatge dirigit
0h
Aprenentatge autònom
10h

Pràctica

Data d'entrega: Al llarg del curs
Objectius: 7
Setmana: 15 (Fora d'horari lectiu)
Teoria
0h
Problemes
0h
Laboratori
0h
Aprenentatge dirigit
0h
Aprenentatge autònom
0h

Control final


Objectius: 4 5 6 1 2 3
Setmana: 15 (Fora d'horari lectiu)
Teoria
2h
Problemes
0h
Laboratori
0h
Aprenentatge dirigit
0h
Aprenentatge autònom
10h

Metodologia docent

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.

Bibliografia

Bàsica:

Complementaria:

Capacitats prèvies

Els alumnes haurien de tenir coneixements suficients d'estructures de dades i algorismes