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

Calendario Lezioni

  • Lezione 6/3/2018.
  • Lezione 7/3/2018, 9.00-11.00.
  • Lezione 7/3/2018,16.00-18.00.
  • Lezione 13/03/2018, 14.00-16.00:.
  • Lezione 14/03/2018, 09.00-11.00.
  • Lezione 20/03/2018, 14.00-16.00.
  • Lezione 21/03/2018, 09.00-11.00.
  • Lezione 21/03/2018, 16.00-18.00.
  • Lezione 27/03/2018, 14.00-16.00.
  • Lezione 28/03/2018, 9.00-11.00.
  • Lezione 28/03/2018, 16.00-18.00
  • Lezione 04/04/2018, 09.00-11.00.
  • Lezione 10/04/2018, 14.00-16.00.
  • Lezione 11/04/2018, 16.00-18.00.
  • Lezione 17/04/2018, 14.00-16.00.
  • Lezione 18/04/2018, 9.00-11.00.
  • Lezione 18/04/2018, 14.30-16.30.
  • Lezione 24/04/2018, 14.00-16.00.
  • Lezione 02/05/2018, 9.00-11.00.
  • Lezione 02/05/2018, 16.00-18.00.
  • Lezione 08/05/2018, 14.00-16.00.
  • Lezione 09/05/2018, 09.00-11.00.
  • Lezione 15/05/2018, 14.00-16.00.
  • Lezione 16/05/2018, 09.00-11.00.
  • Lezione 16/05/2018, 16.00-18.00.
  • Lezione 29/05/2018, 14.00-16.00.
  • Lezione 30/05/2018, 9.00-11.00
  • Lezione 30/05/2018, 16.00-18.00.
  • Lezione 05/05/2018, 14.00-17.00.
  • Lezione 06/05/2018, 9.00-11.00.
  • Lezione 06/05/2018, 16.00-18.00.

Riferimenti

Testi di Riferimento

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

L'esame consiste in:

  1. Una prova scritta per verificare le conoscenze base introdotte nel corso;
  2. Un progetto (che può essere svolto in gruppo) per valutare la capacità di applicare le metodologie presentate nel corso;
  3. Un colloquio orale per discutere il progetto e per valutare le competenze acquisite.

Per poter consegnare il progetto tutti i membri del gruppo devono aver superato con successo la prova scritta nella stessa sessione della consegna. Tutti i membri di un gruppo devono svolgere il colloquio orale nella stessa data.


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.

Modealità di Consegna I progetti dovranno essere consegnati per email entro le 23.59 del giorno fissato come scadenza. Al fine di evitare problemi di consegna, si consiglia di non allegare il progetto alla mail ma di inserire nella mail un link ad un file condiviso su Google Drive.


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 (Compito) (Risultati, voti in decimi, sufficienza >= 6)
    • 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 (Compito) (Risultati, voti in decimi, sufficienza >= 6)
    • 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 ( Compito) (Risultati, voti in decimi, sufficienza >= 6)
    • 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 ( Compito) (Risultati, voti in decimi, sufficienza >= 6)
    • 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 ( Compito ) (Risultati, voti in decimi, sufficienza >= 6)
    • Scritto: 27/09/2018, ore 09:00, aula AB1;
    • Consegna progetti: 05/10/2018, ore 23.55;
    • Orale: calendario da definire a partire dal 08/10/2018.
  • 7a sessione ( Compito ) (Risultati, voti in decimi, sufficienza >= 6)
    • Scritto: 05/02/2019, ore 09:00, aula AB1;
    • Consegna progetti: 08/02/2019, ore 23.55;
    • Orale: calendario da definire a partire dal 12/02/2019.
  • 8a sessione (Compito) (Risultati, voti in decimi, sufficienza >= 6)
    • Scritto: 26/02/2019, ore 09:00, aula AB1;
    • Consegna progetti: 27/02/2019, ore 23.55 01/03/2019, ore 23.59;
    • Orale: Lunedì 4/3/2019, ore 14.30 (studio docente)..