Programmazione Avanzata


  • 27 Settembre 2019: Il corso si terrà nel secondo semestre. Le informazioni per chi ha frequentato nell'a.a. 2018/10 sono quelle disponibili al seguente link.
  • 10 Marzo 2020: A seguito dell'emergenza Covid-19, fino al 3 Aprile, le lezioni verranno svolte in streaming all'interno dell'aula virtuale https://unicam.webex.com/meet/michele.loreti.

Docente: Michele Loreti

Link ESSE3

Classroom:

Server Discord: Per semplificare le interazioni tra gli studenti ed il docente è stato creato un Server Discord per il corso all'interno del quale sono disponibili diversi canali dove, oltre agli annunci, sarà possibile porre delle domande sugli argomenti del corso e discutere con tra studenti. Il canale degli annunci disponibile sul server costituirà lo strumento principale di comunicazione tra il docente e gli studenti.

Orario delle Lezioni:

  • Lunedì, dalle 14.00 ale 17.00 (Aula AA1)
  • Martedì, dalle 11.00 alle 13.00 (Aula AA1)
  • Giovedì, dalle 11.00 alle 13.00 (Aula AA1)

Ricevimento studenti:

  • Mercoledì, 11.00-12.00
  • Giovedì, 14.00-15.00

Conoscenze:

  • concetti basilari della metodologia orientata agli oggetti nella progettazione del software;
  • caratteristiche principali dei linguaggi orientati agli oggetti, quali Java, e tecniche di programmazione;
  • elementi base della programmazione funzionale;
  • schemi di soluzioni avanzate a problemi ricorrenti nel design del software.

Competenze acquisite (al termine del corso) Gli studenti dovranno dimostrare di saper usare la metodologia orientata agli oggetti nella progettazione e implementazione di componenti software, che siano facilmente estendibili e riusabili.

Capacità acquisite (al termine del corso) Capacità di sviluppare software flessibile, utilizzando tecniche avanzate orientate agli oggetti.


  • Note fornite settimanalmente dal docente.

Nel corso verrà introdotta, attraverso l'uso del linguaggio Java, la metodologia orientata agli oggetti per la costruzione del software:

  1. Paradigmi di programmazione: imperativo, funzionale e orientato agli oggetti.
  2. Principi di Programmazione funzionale.
  3. Principi di Programmazione Orientata agli Oggetti: Classe, Interfaccia e implementazione nascosta. Il linguaggio Java.
  4. UML (Unified Modeling Language): il “diagramma di classi” per l'analisi, la progettazione e la documentazione.
  5. Ereditarietà. Composizione di oggetti e delega di messaggi. Le classi astratte.
  6. Classi come Tipi. Polimorfismo per sottotipo e polimorfismo parametrico.
  7. Programmazione test-driven.
  8. Argomenti avanzati: Le lambda-expressions, La dependency-injection.
  9. Applicazioni.

L'esame consiste in:

  1. Un progetto (da svolgere singolarmente) per valutare la capacità di applicare le metodologie presentate nel corso;
  2. Una prova scritta per verificare le conoscenze base introdotte nel corso, possono partecipare allo scritto solo coloro che hanno consegnato il progetto;
  3. Un colloquio orale (opzionale) per discutere il progetto e per valutare le competenze acquisite.

N.B. In caso di restrizioni legate all'emergenza Covid, la prova scritta verrà sostituita con un esame orale da sostenere solo dopo avere consegnato il progetto.


Progetti

I progetti devono essere consegnati due giorni prima dello scritto utilizzando il corrispondente link sul Classroom del corso. Ogni sessione d'esame avrà una specifica distinta e disponibile al seguente link:

  • Specifica appelli Giugno/Luglio 2021 (Disponibile dal 15/3/2021)
  • Specifica appelli Settembre 2021 (Disponibile dal 15/7/2021)
  • Specifica appelli Febbraio/Marzo 2022 (Disponibile dal 31/10/2021)

Date Prove Scritte A.A. 2020/2021 (Esempio Compito)

  • 08/06/2021, Ore 10:00, Aula AA1 Polo Lodovici;
  • 29/06/2021, Ore 10:00, Aula AA1 Polo Lodovici;
  • 20/07/2021, Ore 10:00, Aula AA1 Polo Lodovici;
  • 01/09/2021, Ore 10:00, Aula AB1 Polo Lodovici;
  • 01/02/2022, Ore 10:00, Aula AB1 Polo Lodovici;
  • 22/02/2022, Ore 10:00, Aula AB1 Polo Lodovici;
  • 15/03/2022, Ore 10:00, Aula AB1 Polo Lodovici.