This is an old revision of the document!


Programmazione Avanzata


  • 13 Marzo 2018: La lezione di domani pomeriggio 14 Marzo, prevista dalle 16.00 alle 18.00, non verrà svolta. La lezione della mattina, dalle 9.00 alle 11.00, verrà svolta regolarmente.
  • 6 Marzo 2018: Inizio lezioni!

Docente: Michele Loreti

Orario delle Lezioni:

  • Martedì, dalle 14.00 alle 16.00 (Laboratorio LA1, Polo Lodovici)
  • Mercoledì, dalle 9.00 alle 11.00 (Laboratorio LA1, Polo Lodovici)
  • Mercoledì, dalle 16.00 alle 18.00 (Laboratorio LA1, Polo Lodovici)

Tutorato:

  • Tutti i Lunedì dal 7/5 al 11/6, dalle 9.00 alle 11.00 (Laboratorio AB1, Polo Lodovici)
  • Giovedì 10/5/2018, dalle 10.00 alle 13.00 (Laboratorio AB2, Polo Lodovici)
  • Giovedì 24/5/2018, dalle 10.00 alle 12.00 (Laboratorio AB2, Polo Lodovici)

Canale Telegram: https://t.me/UniCamPA

Esercizi con soluzioni: https://github.com/michele-loreti/ap_examples

Ricevimento studenti:

  • Martedì, dalle 11.00 alle 12.00
  • Giovedì, dalle 10.00 alle 11.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.


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. Design Pattern: Singleton, Factory, Composite, Visitor, Decorator, Observer, Template, Strategy.
  9. Argomenti avanzati: Le lambda-expressions, La dependency-injection.
  10. Panoramica di altri linguaggi di programmazione: Python, GO, C#, Swift.
  11. Applicazioni.

Slide del Corso

Lezioni Registrate

Riferimenti

Testi di Riferimento

  • Core Java SE 9 for the Impatient, Cay Horstmann, Second Edition, Addison-Wesley 2017

Progetti

  1. Il progetto dovrà essere consegnato in un archivio .tgz contenente, oltre al codice, una relazione descrittiva del lavoro svolto;
  2. Il progetto può essere svolto in gruppo composto da al più tre persone, i membri del gruppo devono essere comunicati al docente almeno 15 giorni prima della consegna (il progetto deve essere discusso dai membri del gruppo lo stesso giorno);
  3. La valutazione del progetto terrà conto di:
    • Corretto funzionamento;
    • Organizzazione e progettazione del codice;
    • Conoscenza da parte di tutti i membri del gruppo.

Specifica L'obiettivo del progetto è quello di sviluppare un semplice gioco in Java. Ogni gruppo può liberamente scegliere tra i seguenti progetti:

Altri tipologie di giochi possono essere proposti al docente che potrà valutarne l'opportunità ed aggiungerli eventualmente alla lista.

All'interno del progetto dovranno essere sviluppate le classi/interfacce che consentano:

  1. La gestione della partita;
  2. La definizione di giocatori personalizzati (per definire avversari “automatici”);
  3. La gestione dell'interazione dell'utente.

L'architettura delle classi, così come il ruolo delle stesse, dovranno essere descritte nella relazione.

Un possibile esempio di sviluppo è la Battaglia Navale realizzata come esercitazione durante il corso.


Date Esami A.A. 2017/2018 (Esempio Compito)

  • 1a sessione (Compito) (Risultati, voti in decimi, sufficienza >= 6)
    • Scritto: 12/06/2018, ore 14:00, aula LA1;
    • Consegna progetti: 22/06/2018, ore 23.55;
    • Orale: calendario da definire a partire dal 25/6/2018.
  • 2a sessione
    • Scritto: 26/06/2018, ore 14:00, aula AA1;
    • Consegna progetti: 02/07/2018, ore 23.55;
    • Orale: calendario da definire a partire dal 9/7/2018.
  • 3a sessione
    • Scritto: 10/07/2018, ore 09:00, aula AB1;
    • Consegna progetti: 16/07/2018, ore 23.55;
    • Orale: calendario da definire a partire dal 23/7/2018.
  • 4a sessione
    • Scritto: 24/07/2018, ore 09:00, aula AA1;
    • Consegna progetti: 27/07/2018, ore 23.55;
    • Orale: calendario da definire nei giorni 30 e 31/7/2018.
  • 5a sessione
    • Scritto: 12/09/2018, ore 09:00, aula AB1;
    • Consegna progetti: 17/09/2018, ore 23.55;
    • Orale: calendario da definire a partire dal 19/9/2018.
  • 6a sessione
    • Scritto: 27/09/2018, ore 09:00, aula AB1;
    • Consegna progetti: 29/09/2018, ore 23.55;
    • Orale: calendario da definire a partire dal 01/10/2018.