Il corso mira a fornire una conoscenza generale della programmazione distribuita, delle metodologie e degli strumenti. La prima parte del corso, dopo un richiamo alle nozioni di base di programmazione di rete, presenta l'organizzazione dei sistemi distribuiti e i meccanismi di comunicazione di base. Nella seconda parte saranno presentate le tecniche di base per lo sviluppo di moderni sistemi distribuiti utilizzando tecnologie web, IoT e mobili attraverso un approccio pratico.
Libro di riferimento:
- Distributed Systems (3rd ed.) - Maarten van Steen, Andrew S. Tanenbaum - disponibile sul sito degli autori (2017).
Materiale didattico addizionale: slides e riferimenti online forniti dal docecente.
Obiettivi Formativi
CONOSCENZA E COMPRENSIONE
Al termine del corso, lo studente dovrà acquisire la conoscenza e la comprensione dell’organizzazione architetturale di un generico sistema distribuito; dei meccanismi di comunicazione di alto livello; delle tecnologie per lo sviluppo di moderne applicazioni web, mobile e IoT.
APPLICARE CONOSCENZA E COMPRENSIONE
Al termine del corso, lo studente dovrà essere in grado di sviluppare un'applicazione distribuita e per sistemi mobili utilizzando un framework moderno.
ESPRIMERE GIUDIZI
Al termine del corso, lo studente dovrà essere in grado di identificare le scelte architetturali più adeguate per la progettazione di un'applicazione distribuita e per sistemi mobili, e di selezionare gli strumenti più adeguati per la sua implementazione.
CAPACITÀ DI COMUNICAZIONE
Al termine del corso, lo studente dovrà essere in grado di presentare i principali pattern architetturali per l'organizzazione di un sistema distribuito e le nozioni dei meccanismi di comunicazione di alto livello. Lo studente dovrà inoltre essere in grado di dimostrare le proprie competenze attraverso lo sviluppo di un'applicazione distribuita, e per sistemi mobili o IoT.
COMPETENZE DI APPRENDIMENTO
Al termine del corso, lo studente dovrà essere in grado di apprendere autonomamente tecniche e strumenti di programmazione non illustrati nel corso.
Prerequisiti
Corsi su architettura degli elaboratori, sistemi operativi e reti di calcolatori.
Inoltre, è richiesta una buona esperienza di programmazione in un linguaggio di programmazione moderno come Java o Python.
Metodi Didattici
Lezioni frontali con l'uso di slide e demo. Esercizi di programmazione in classe.
Altre Informazioni
Le lezioni si svolgeranno presso il Centro Didattico Morgagni (Viale Morgagni 40-44, Firenze), in base all'orario previsto dal corso di laurea (https://kairos.unifi.it/agendaweb/).
La frequenza delle lezioni non è obbligatoria ma estremamente raccomandata.
Modalità di verifica apprendimento
I risultati dell'apprendimento sono valutati con due diversi test:
1. Esame orale che copre tutti gli argomenti presentati durante le lezioni;
2. Prova pratica che consiste in un progetto il cui argomento deve essere concordato con il docente e che lo studente discuterà durante l’esame orale.
La valutazione di ogni prova è espressa con un voto in trentesimi, con eventuale lode. Una prova si considera superata con successo se il voto assegnato è almeno diciotto. Se entrambe le prove sono sufficienti, il voto finale sarà determinato dalla media dei due voti.
L'esame orale mira a valutare: l'acquisizione da parte dello studente della conoscenza e della comprensione degli argomenti trattati durante le lezioni, la capacità di ragionare su questioni specifiche relative alla programmazione distribuita e la comprensione e l'uso appropriato del vocabolario specialistico.
La prova pratica mira a valutare: la capacità dello studente di utilizzare in pratica le tecniche e gli strumenti presentati durante il corso; la capacità di progettare un'applicazione distribuita; la capacità di apprendere autonomamente nuove tecniche e strumenti di programmazione; le abilità comunicative dello studente, in termini di chiarezza e capacità di scrivere una relazione. Il voto della prova pratica è determinato dalla complessità del progetto, dalla qualità della presentazione orale, dalla qualità della relazione e dall'accuratezza delle risposte alle domande poste dal docente durante la discussione del progetto.
Programma del corso
Il corso prevede i seguenti argomenti:
- Obiettivi di progettazione di un sistema distribuito
- Organizzazione del sistema distribuito (architettura del software e del sistema)
- Meccanismi di comunicazione di alto livello
- Linguaggi per sistemi distribuiti
- Tecniche e strumenti per lo sviluppo di applicazioni distribuite e mobili.