Programmazione Avanzata


  • 27 Settembre 2018: Il corso si terrà nel secondo semestre. Le informazioni per chi ha frequentato nell'a.a. 2017/18 sono quelle disponibili al seguente link.

Docente: Michele Loreti

Link ESSE3

Orario delle Lezioni:

  • Da definire

Tutorato:

  • Da definhire

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.

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 Verrà comunicata all'inizio del corso.


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

  • Da definire