Tecniche speciali di programmazione

A.A. 2020/2021
6
Crediti massimi
48
Ore totali
SSD
INF/01
Lingua
Italiano
Learning objectives
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.
Expected learning outcomes
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.
Corso singolo

Questo insegnamento non può essere seguito come corso singolo. Puoi trovare gli insegnamenti disponibili consultando il catalogo corsi singoli.

Course syllabus and organization

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
Professor(s)