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 el concepte de Reflexió en llenguatges dinàmics, com a extensió natural del que han aprés a GRAU-PROP sobre Orientació a Objectes. També com a ampliació de l'Orientació a Objectes veurem com treballar amb llenguatges de programació que no tenen el concepte de classe. A més, aprofundim en el concepte aparentment senzill d'Estructura de Control, explorant les possibilitats de reificar i modificar la pila d'execució d'un programa mentre s'executa, definint i utilitzant el concepte de Continuació.
Professorat
Responsable
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 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.
Objectius
Conèixer les els conceptes bàsics i generals de la programació basada en prototipus, de manera que l'estudiant sigui capaç d'entendre com estan implementats aquests conceptes en diferents llenguatges de programació
Competències relacionades:
CES1.1,
CES1.3,
CES1.7,
Conèixer prou un llenguatge basat en prototipus com per ser capaços d'il.lustrar els conceptes generals en una implementació concreta (Javascript)
Competències relacionades:
CES1.1,
CES1.3,
Conèixer què és un tancament (closure) i algunes tècniques associades a la seva utilització. Entendre el concepte de Continuació i utilitzar-lo per implementar diverses estructures de control.
Competències relacionades:
CES1.1,
CES1.3,
Conèixer un llenguatge de programació dinàmic orientat a objectes com Smalltalk.
Competències relacionades:
CES1.1,
CES1.3,
CES1.7,
Conèixer els conceptes bàsics i generals de la reflexió computacional, de manera que l'estudiant sigui capaç d'entendre com estan implementats aquests conceptes en diferents llenguatges de programació
Competències relacionades:
CES1.1,
CES1.3,
CES1.7,
Conèixer com està implementada la reflexió computacional en Smalltalk: accés i modificació dels membres de classes en temps d'execució, creació de codi en temps d'execució, etc.
Competències relacionades:
CES1.1,
CES1.3,
CES1.7,
Ser capaç de desenvolupar en equip un programa de mida petita-mitjana que utilitzi part del que s'ensenya en el curs
Competències relacionades:
CES1.1,
G5.2,
CES1.7,
Continguts
Programació basada en prototipus
Classes vs. prototipus. Herencia vs. delegació
Estructures de Control: Continuacions.
Les continuacions són resultat de poder reificar i eventualment modificar la pila d'execució d'un programa mentre aquest s'executa, però des del mateix llenguatge. Explorarem les possibilitats que això ofereix i les tècniques associades.
Iniciació a l'Smalltalk
Filosofia i origens. Encapsulació, membres privat/(protected)/public, herència, polimorfisme, early/late binding. Patrons. Smalltalk, aprenentatge i utilització d'un entorn Smalltalk
Reflexió: Conceptes generals
Què és la reflexió?. Tipus de reflexió: Introspecció, intercessió, reificació. Implicacions de la reflexió per a un llenguatge de programació. Reflexió en programació orientada a objectes.
Implementació en Smalltalk de la reflexió
Accés als membres de classes en temps d'execució. Patrons i Reflexió. Construir objectes de manera reflexiva. Generació de codi en temps d'execució.
Activitats
ActivitatActe avaluatiu
Programació basada en prototipus.
Cal que l'estudiant estigui atent a classe i realitzi els exercicis proposats. Objectius:12 Continguts:
Objectius:123 Setmana:
15 (Fora d'horari lectiu) Tipus:
examen de teoria
Teoria
2h
Problemes
0h
Laboratori
0h
Aprenentatge dirigit
0h
Aprenentatge autònom
12h
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 (T1 i T2), una a mitjans de curs i l'altre al final i una pràctica de mida petita-mitjana (Practica).
Aleshores, el mètode d'avaluació seria:
0.8 * Teoria + 0.2 * Practica
on:
Teoria: 0.5 * T1 + 0.5 * T2
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.