This is an old revision of the document!
Programmazione Avanzata
News
- 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!
Informazioni Generali
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
Obiettivi del Corso
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.
Contenuti del Corso
Nel corso verrà introdotta, attraverso l'uso del linguaggio Java, la metodologia orientata agli oggetti per la costruzione del software:
- Paradigmi di programmazione: imperativo, funzionale e orientato agli oggetti.
- Principi di Programmazione funzionale.
- Principi di Programmazione Orientata agli Oggetti: Classe, Interfaccia e implementazione nascosta. Il linguaggio Java.
- UML (Unified Modeling Language): il “diagramma di classi” per l'analisi, la progettazione e la documentazione.
- Ereditarietà. Composizione di oggetti e delega di messaggi. Le classi astratte.
- Classi come Tipi. Polimorfismo per sottotipo e polimorfismo parametrico.
- Programmazione test-driven.
- Design Pattern: Singleton, Factory, Composite, Visitor, Decorator, Observer, Template, Strategy.
- Argomenti avanzati: Le lambda-expressions, La dependency-injection.
- Panoramica di altri linguaggi di programmazione: Python, GO, C#, Swift.
- Applicazioni.
Materiale
Slide del Corso
Lezioni Registrate
- Lezione 6/3/2018 (Per un errore del docente, la lezione non è stata registrata).
- Lezione 7/3/2018, 9.00-11.00: Visualizza Download.
- Lezione 7/3/2018,16.00-18.00: Visualizza Download.
- Lezione 13/03/2018, 14.00-16.00: Visualizza Download.
- Lezione 14/03/2018, 09.00-11.00: Visualizza Download.
- Lezione 20/03/2018, 14.00-16.00: Visualizza Download.
- Lezione 21/03/2018, 09.00-11.00: Visualizza Download.
- Lezione 21/03/2018, 16.00-18.00: Visualizza Download.
- Lezione 27/03/2018, 14.00-16.00: Visualizza Download.
- Lezione 28/03/2018, 9.00-11.00: Visualizza Download.
- Lezione 28/03/2018, 16.00-18.00: Visualizza Download.
- Lezione 04/04/2018, 09.00-11.00: Visualizza Download.
- Lezione 10/04/2018, 14.00-16.00: Visualizza Download.
- Lezione 11/04/2018, 16.00-18.00: Visualizza Download.
- Lezione 17/04/2018, 14.00-16.00: Visualizza Download.
- Lezione 18/04/2018, 9.00-11.00: Visualizza Download.
- Lezione 18/04/2018, 14.30-16.30: Visualizza Download.
- Lezione 24/04/2018, 14.00-16.00: Visualizza Download.
- Lezione 02/05/2018, 9.00-11.00: Visualizza Download.
- Lezione 02/05/2018, 16.00-18.00: Visualizza Download.
- Lezione 08/05/2018, 14.00-16.00: Visualizza Download.
- Lezione 09/05/2018, 09.00-11.00: Visualizza Download.
- Lezione 15/05/2018, 14.00-16.00: Visualizza Download.
- Lezione 16/05/2018, 09.00-11.00: Visualizza Download.
- Lezione 16/05/2018, 16.00-18.00: Visualizza Download.
- Lezione 29/05/2018, 14.00-16.00: Visualizza Download.
- Lezione 30/05/2018, 9.00-11.00: Visualizza Download.
- Lezione 30/05/2018, 16.00-18.00: Visualizza Download.
- Lezione 05/05/2018, 14.00-17.00: Visualizza Download.
- Lezione 06/05/2018, 9.00-11.00: Visualizza Download.
- Lezione 06/05/2018, 16.00-18.00: Visualizza Download.
Riferimenti
Testi di Riferimento
- Core Java SE 9 for the Impatient, Cay Horstmann, Second Edition, Addison-Wesley 2017
Modalità d'esame
L'esame consiste in:
- Una prova scritta per verificare le conoscenze base introdotte nel corso;
- Un progetto (che può essere svolto in gruppo) per valutare la capacità di applicare le metodologie presentate nel corso;
- 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
- Il progetto dovrà essere consegnato in un archivio
.tgz
contenente, oltre al codice, una relazione descrittiva del lavoro svolto; - 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);
- 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:
- La gestione della partita;
- La definizione di giocatori personalizzati (per definire avversari “automatici”);
- 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.
Esami
Date Esami A.A. 2017/2018 (Esempio Compito)
-
- 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.
-
- 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.
-
- 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.
-
- 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.
-
- 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: 05/10/2018, ore 23.55;
- Orale: calendario da definire a partire dal 08/10/2018.