====== Programmazione Avanzata ======
----
===== News =====
* **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 [[http://didattica.cs.unicam.it/doku.php?id=didattica:triennale:pa:ay_1819:main|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]].
----
===== Informazioni Generali =====
**Docente**: [[https://docenti.unicam.it/pdett.aspx?ids=N&tv=d&UteId=1103&ru=PA|Michele Loreti]]
**Link ESSE3**
* [[https://didattica.unicam.it/Guide/PaginaADErogata.do?ad_er_id=2019*N0*N0*S2*15080*9113&ANNO_ACCADEMICO=2019&mostra_percorsi=S|Programmazione Avanzata - AA 2019/20]]
**Orario delle Lezioni**:
* Martedì, dalle 11.00 ale 13.00 (Aula AA1)
* Mercoledì, dalle 11.00 alle 13.00 (Aula AA1)
* Giovedì, dalle 11.00 alle 13.00 (Aula AA1)
**Canale Telegram**: https://t.me/UniCamPA
**Ricevimento studenti**:
* Mercoledì, dalle 16.00 alle 17.00
* Giovedì, dalle 10.00 alle 11.00
**Classroom**: Il materiale del corso verrà reso disponibile all'interno di [[https://classroom.google.com/|Classroom]]. Il codice del corso è **ch72rlk**.
----
===== 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.
----
===== Testi di riferimento =====
* Core Java SE 9 for the Impatient, Cay Horstmann, Second Edition, Addison-Wesley 2017
* Clean Architecture: A Craftsman's Guide to Software Structure and Design, 1st edition, Robert C. Martin, Pearson 2018
----
===== 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.
- Argomenti avanzati: Le lambda-expressions, La dependency-injection.
- Applicazioni.
----
===== Modalità d'esame =====
L'esame consiste in:
- Un progetto (da svolgere singolarmente) per valutare la capacità di applicare le metodologie presentate nel corso;
- Una prova scritta per verificare le conoscenze base introdotte nel corso, possono partecipare allo scritto solo coloro che hanno consegnato il progetto;
- 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 ====
* [[https://docs.google.com/document/d/1sI7ls48YnWlpLxtPzOiRbArouXazb1UMW2PXkPmhm2Q/edit?usp=sharing|Giugno/Luglio 2020]] ([[https://docs.google.com/document/d/1eG0ycCO_x50XGlmfjPOpMB44UjhxyB6BNkW7NSe4vGY/edit|FAQ]])
----
===== Esami =====
**Date Prove Scritte A.A. 2019/2020** ({{ :didattica:triennale:pa:ay_1920:esempiocompito.pdf |Esempio Compito}})
*11/06/2020, Ore 10:00, Aula AA1 Polo Lodovici;
*30/06/2020, Ore 10:00, Aula AA1 Polo Lodovici;
*16/07/2020, Ore 10:00, Aula AA1 Polo Lodovici;
*08/09/2020, Ore 10:00, Aula AB1 Polo Lodovici;
*24/09/2020, Ore 10:00, Aula AB1 Polo Lodovici;
*04/02/2021, Ore 10:00, Aula AB1 Polo Lodovici;
*25/02/2021, Ore 10:00, Aula AB1 Polo Lodovici.