INGEGNERIA DEI SISTEMI DISTRIBUITI E LABORATORIO
Modulo INGEGNERIA DEI SISTEMI DISTRIBUITI

Anno accademico 2024/2025 - Docente: EMILIANO ALESSIO TRAMONTANA

Risultati di apprendimento attesi

Obiettivi formativi generali in termini di risultati di apprendimento attesi.

1. Conoscenza e capacità di comprensione (knowledge and understanding): lo studente conoscerà meccanismi di programmazione avanzata, inclusi programmazione ad aspetti, parallela, asincrona, distribuita.

2. Capacità di applicare conoscenza e comprensione (applying knowledge and understanding): lo studente avrà la capacità di progettare sistemi software distribuiti e complessi.

3. Autonomia di giudizio (making judgements): lo studente acquisirà la capacità di analizzare sistemi distribuiti e complessi.

4. Abilità comunicative (communication skills): lo studente imparerà a descrivere in linguaggio tecnico le caratteristiche fondamentali dei sistemi distribuiti e paralleli.

5. Capacità di apprendimento (learning skills): lo studente potrà affrontare e risolvere problemi di progettazione e implementazione in ambiti realistici, studiando, valutando e utilizzando, nuove tecnologie per i sistemi distribuiti. 

Modalità di svolgimento dell'insegnamento

Lezioni frontali per concetti e soluzioni, spiegazione di esempi di codice per le tecniche esaminate.

Qualora l'insegnamento venisse impartito in modalità mista o a distanza potranno essere introdotte le necessarie variazioni rispetto a quanto dichiarato in precedenza, al fine di rispettare il programma previsto e riportato nel syllabus.

Prerequisiti richiesti

Capacità di progettare ed implementare sistemi ad oggetti in C++ o Java. 

Frequenza lezioni

La frequenza delle lezioni è fortemente consigliata.

Contenuti del corso

Design pattern per sistemi distribuiti: Proxy, Broker, Forward-Receiver, Remote Facade, Data Transfer Object, Session State, Serialized Large Object, Memento. Design pattern per la sicurezza: Role-based Access Control, Authenticator, token, Authorizer. Progettazione ed implementazione del software orientato agli aspetti. Design pattern ad aspetti e Refactoring ad aspetti. Implementazione di chiamate asincrone in Java. Reactive programming con design pattern Circuit Breaker, Bulkheads, Timeout. Middleware orientato ai messaggi RabbitMQ. Tecnologia Blockchain.

Testi di riferimento

1. F. Buschmann, R. Meunier, H. Rohnert, P. Sommerlad, M. Stal. Pattern-Oriented Software Architecture A System of Patterns. John Wiley and Sons, 1996

2. M. Fowler. Patterns of Enterprise Application Architecture. Addison-Wesley, 2003

3. M. Schumacher, E. Fernandez-Buglioni, D. Hybertson, F. Buschmann, P. Sommerlad. Security Patterns: Integrating Security and Systems Engineering. John Wiley and Sons, 2006

4. R. Laddad. AspectJ in Action: Enterpriese AOP with Spring Applications. Manning Publications. 2010.

5. R.-G. Urma, M. Fusco, A. Mycroft. Java 8 in Action: Lambdas, streams, and functional-style programming. Manning, 2015

6. G. Hohpe, B. Woolf. Enterprise Integration Patterns. Addison-Wesley, 2003

7. A. Videla, J.J.W. Williams. RabbitMQ in Action. Manning, 2012

8. A. M. Antonopoulos. Mastering Bitcoin. Programming the open blockchain. O'Reilly, 2017

9. R. Kuhn. Reactive Design Patterns. Manning, 2017

Programmazione del corso

 ArgomentiRiferimenti testi
1Presentazione del corso con obiettivi. Modularità per sistemi distribuiti e paralleli[2] C. 1
2Design pattern Proxy e Reference Monitor[1] C. 3.4, [3] C. 8
3Design pattern Remote Proxy e Forwarder-Receiver[1] C. 3.4, 3.6
4Design pattern Role-based Access Control e Authenticator[3] C. 8, 10
5Design pattern Remote Facade e Data Transfer Object[2] C. 7, 15
6Design pattern Session State (Client, Server, Database), Serialized Large Object[2] C. 6, 17, 12
7Design pattern Broker[1] C. 2.3
8Progettazione con callback, Java chiamate asincrone, tipi CompletableFuture[5] C. 11
9Programmazione ad aspetti: costrutti del linguaggio AspectJ. Pointcut e join point. Esempio di aspetto per la protezione degli accessi[4] C. 2, 3
10Programmazione ad aspetti: pointcut per la cattura del contesto di esecuzione, passaggio di parametri agli advice[4] C. 3, 4
11Refactoring ad aspetti. Crosscutting statico e dinamico. Pointcut cflow, declare warning[4] C. 5
12Design pattern ad aspetti: Adapter, Participant e Sincronizzazione. Gestione eccezioni con aspetti[4] C. 5, 12, 13
13Design pattern per la stabilità: Timeout, Circuit Breaker, Bulkheads[9] C. 2, 12
14Middleware orientato ai messaggi: RabbitMQ[6] C. 3, [7] C. 2
15Design pattern per i messaggi. Produttori e consumatori di messaggi. Code[6] C. 10, [7] C. 4
16Architettura distribuita di Blockchain di bitcoin, proprietà[8] C. 1, 2, 5, 6, 8, 9, 10

Verifica dell'apprendimento

Modalità di verifica dell'apprendimento

L'esame consiste di un elaborato concordato prima della data d'esame, e che consiste nell'implementazione di un piccolo sistema software, e quindi di una prova orale.

L'esame sarà valutato in modo ottimo se si mostrerà di aver acquisito profonda conoscenza dei concetti del corso e precisione nella loro esposizione. Un voto intermedio sarà dato nel caso in cui l'esame mostra una comprensione parziale degli argomenti. Uno voto appena sufficiente sarà dato quando pur conoscendo parzialmente gli argomenti, questi vengono esposti in modo superficiale.

La verifica dell’apprendimento potrà essere effettuata anche per via telematica, qualora le condizioni lo dovessero richiedere.

Esempi di domande e/o esercizi frequenti

Implementare un aspetto software per il caching dei dati

Implementare una chiamata ad un metodo in modo asincrono.

Descrivere la gestione della sessione.

Descrivere il controllo degli accessi tramite design pattern Role-based access control.