Tecniche speciali di programmazione

A.A. 2020/2021
6
Crediti massimi
48
Ore totali
SSD
INF/01
Lingua
Italiano
Obiettivi formativi
L'insegnamento ha l'obiettivo di esporre lo studente a tecniche e tecnologie che permettano di incrementare la riusabilità, il mantenimento e il testing di funzionalità software. In particolare, l'insegnamento si focalizzerà sulla definizione funzionalità software anche crosscutting e sulla loro estrusione in unità computazionali autonome, più semplici e facilmente componibili. A questo proposito verranno presentate le più recenti ed innovative tecniche di sviluppo software, come, ma non limitate a, aspect-oriented programming, riflessione computationale, context-oriented programming, software product-line, bytecode and intermediate language engineering, etc.
Risultati apprendimento attesi
Lo studente dovrà dimostrare di saper sviluppare ed implementare applicazioni le cui funzionalità sono separate e successivamente composte utilizzando le tecniche presentate a lezione. Lo studente dovrà anche essere in grado di riconoscere una funzionalità software all'interno di un'applicazione esistente e di separarla dal resto del codice usando una delle tecniche/tecnologie viste a lezione. Lo studente dovrà inoltre dimostrare di aver sviluppato una capacità di scrivere codice migliore (più semplice, riusabile e manutenibile) applicando le tecniche e i concetti forniti dall'insegnamento.
Programma e organizzazione didattica

Edizione unica

Responsabile
Periodo
Primo semestre
Metodi didattici
Le lezioni saranno erogate in streaming su YouTube e saranno fruite sincronamente sulla base dell'orario del primo semestre. A supporto ci sarà un canale telegram per l'interazione col docente. I dettagli saranno riportati sulla pagina del corso gestita dal docente.

Programma e materiale di riferimento
Il programma e il materiale di riferimento non subiranno variazioni.

Modalità di verifica dell'apprendimento
L'esame cambierà da scritto a progetto individuale.
Programma
- Riflessione Computazionale
- Meta-Object Protocol and Separazione dei Compiti
- Riflessione in Java
- Proxy Dinamici e Class Loading
- Annotazioni
- OpenJava, Javassist e BCEL
- AOP e AspectJ
- AOP e Refactoring
Prerequisiti
Saper scrivere e debuggare programmi che usano i costrutti base di programmazione. Avere conoscenze di problem solving. Conoscere e sapere usare con profitto almeno un linguaggio di programmazione.

È consigliabile avere conseguito almeno un corso di programmazione nella laurea triennale.
Metodi didattici
Lezioni Frontali ed alcune esercitazioni in preparazione dell'esame.
Materiale di riferimento
Web Site:
- http://wcazzolatsp.ariel.ctu.unimi.it
- https://cazzola.di.unimi.it/tsp.html

Libri Suggeriti
- Ira R. Forman and Nate B. Forman. Java Reflection in Action. Manning Publications. 2004.
- Ramnivas Laddad. AspectJ in Action: Practical Aspect-Oriented Programming. Manning Publications Company. 2003.
Modalità di verifica dell’apprendimento e criteri di valutazione
L'esame è scritto al calcolatore e dura quattro ore. Ogni appello propone due esercizi (uno per ognuna delle due parti del corso). L'esame intende verificare l'acquisizione delle tecniche di programmazione insegnate a lezione.
INF/01 - INFORMATICA - CFU: 6
Lezioni: 48 ore
Docente: Cazzola Walter
Docente/i
Ricevimento:
L'orario di ricevimento dipende dal corso che seguite: consultate la pagina del corso.
Ufficio 5009 Via Celoria 18