====== Programmazione Avanzata ======
----
===== News =====
Non ci sono notizie.
----
===== Informazioni Generali =====
**Docente**:
* [[https://didattica.unicam.it/Guide/PaginaDocente.do?docente_id=3858|Prof. Michele Loreti]]
**Link ESSE3**
* [[https://didattica.unicam.it/Guide/PaginaADErogata.do?ad_er_id=2021*N0*N0*S2*16612*9113&ANNO_ACCADEMICO=2021&mostra_percorsi=S|Programmazione Avanzata - AA 2021/22]]
**Orario delle Lezioni**:
* L'orario delle lezioni è disponibile al seguente [[:didattica:ay2122:orario_it|link]]
**Corsi di Laurea**:
* [[didattica:linf|Laurea in Informatica (L-31)]]
**Link ClassRoom**
* Il materiale didattico del corso è reso disponibile sul ClassRoom a cui è possibile iscriversi con il seguente [[https://classroom.google.com/c/NDU5OTQyNTMyNDg2?cjc=khqocxt|link]].
----
===== 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 =====
* Note fornite settimanalmente dal docente.
----
===== Contenuti del Corso =====
Nel corso verrà introdotta, attraverso l'uso del linguaggio Java, la metodologia orientata agli oggetti per la costruzione del software:
- Tipi di dato e rappresentazione dell'informazione.
- Paradigmi di programmazione: imperativo, funzionale e orientato agli oggetti.
- Principi di Programmazione funzionale.
- Principi di Programmazione Orientata agli Oggetti.
- Ereditarietà. Composizione di oggetti e delega di messaggi. Le classi astratte.
- Classi come Tipi. Polimorfismo per sottotipo e polimorfismo parametrico.
- UML (Unified Modeling Language): il "diagramma di classi" per l'analisi, la progettazione e la documentazione.
- Programmazione test-driven.
- Programmazione Concorrente.
- Programmazione Orientata agli Eventi.
- Programmazione di Interfacce.
----
===== 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.
----
==== 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 2022 (Disponibile dal 25/4/2022)
* Specifica appelli Settembre 2022 (Disponibile dal 25/7/2022)
* Specifica appelli Febbraio/Marzo 2023 (Disponibile dal 31/10/2022)
----
===== Esami =====
**Date Prove Scritte A.A. 2021/2022**
*08/06/2022, Ore 10:00, Aula AA1 Polo Lodovici;
*29/06/2022, Ore 10:00, Aula AA1 Polo Lodovici;
*20/07/2022, Ore 10:00, Aula AA1 Polo Lodovici;
*07/09/2022, Ore 10:00, Aula AB1 Polo Lodovici;
*28/09/2022, Ore 10:00, Aula AB1 Polo Lodovici;
*01/02/2023, Ore 10:00, Aula AB1 Polo Lodovici;
*22/02/2023, Ore 10:00, Aula AB1 Polo Lodovici;
*15/03/2023, Ore 10:00, Aula AB1 Polo Lodovici.