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 el concepte de Reflexió, tant en llenguatges dinàmics com estàtics, 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ó.

Professors

Responsable

  • Jordi Delgado Pin ( )

Hores setmanals

Teoria
2
Problemes
0
Laboratori
2
Aprenentatge dirigit
0.4
Aprenentatge autònom
5.6

Competències

Competències Transversals

Treball en equip

  • G5 - 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

  1. Revisar els conceptes de programació orientada a objectes de cara a assegurar una base de coneixements comuna suficient a partir de la qual procedir amb el temari específic de l'assignatura i conèixer un llenguatge de programació dinàmic orientat a objectes com Smalltalk.
    Related competences: CES1.1, CES1.3, CES1.7,
  2. 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ó
    Related competences: CES1.1, CES1.3, CES1.7,
  3. Conèixer com està implementada la reflexió computacional en Java i Smalltalk: accés i modificació dels membres de classes en temps d'execució, creació de codi en temps d'execució, etc.
    Related competences: CES1.1, CES1.3, CES1.7,
  4. Ser capaç de desenvolupar en equip un programa de mida petita-mitjana que utilitzi tècniques de reflexió
    Related competences: CES1.1, G5.2, CES1.7,
  5. 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ó
    Related competences: CES1.1, CES1.3, CES1.7,
  6. Conèixer prou un llenguatge basat en prototipus com per ser capaços d'il.lustrar els conceptes generals en una implementació concreta (Javascript)
    Related competences: CES1.1, CES1.3,
  7. 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.
    Related competences: CES1.1, CES1.3,

Continguts

  1. Repàs de la programació orientada a objectes i 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
  2. 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.
  3. Implementació en Java i Smalltalk de la reflexió
    Utilització de java.lang.reflect i Smalltalk. 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ó.
  4. Programació basada en prototipus
    Classes vs. prototipus. Herencia vs. delegació
  5. 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.

Activitats

Activitat Acte avaluatiu


Repàs de la programació orientada a objectes: Aspectes generals

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

Iniciació a Smalltalk

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

Reflexió: Conceptes generals

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

Reflexió: Utilització en Java (java.lang.reflect) i Smalltalk

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

Pràctica

Data d'entrega; A determinar un cop hagin acabat les classes.
Objectius: 4
Setmana: 15
Tipus: examen de laboratori
Teoria
0h
Problemes
0h
Laboratori
0h
Aprenentatge dirigit
0h
Aprenentatge autònom
0h

Control teoria


Objectius: 2 3
Setmana: 8
Tipus: examen de laboratori
Teoria
0h
Problemes
0h
Laboratori
2h
Aprenentatge dirigit
0h
Aprenentatge autònom
10h

Programació basada en prototipus.

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

Continuacions

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

Control final


Objectius: 5 6 7
Setmana: 15 (Fora d'horari lectiu)
Tipus: examen final
Teoria
0h
Problemes
0h
Laboratori
0h
Aprenentatge dirigit
2h
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 (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.6* Teoria + 0.4*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.

Bibliografia

Bàsica:

Complementaria:

Web links

Capacitats prèvies

Els alumnes haurien de tenir coneixements suficients d'estructures de dades i algorismes i de disseny i programació orientada a objectes.