Vés al contingut

Conceptes Avançats de Programació

Crèdits
6
Tipus
Complementària d'especialitat (Enginyeria del Software)
Requisits
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

Hores setmanals

Teoria
2
Problemes
0
Laboratori
2
Aprenentatge dirigit
0
Aprenentatge autònom
6

Competències

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 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.
  • 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. Seqüències Mandroses
      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
    0h
    Aprenentatge dirigit
    0h
    Aprenentatge autònom
    0h

    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

    Seqüències mandroses

    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
    0h
    Problemes
    0h
    Laboratori
    0h
    Aprenentatge dirigit
    0h
    Aprenentatge autònom
    0h

    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ó és = Teoria*0.8 + L*0.2
    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àsic

    Complementari

    Capacitats prèvies

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