- Docente: Alessandro Ricci
- Crediti formativi: 6
- SSD: ING-INF/05
- Lingua di insegnamento: Italiano
- Modalità didattica: Convenzionale - Lezioni in presenza
- Campus: Cesena
- Corso: Laurea Magistrale in Ingegneria e scienze informatiche (cod. 8614)
Conoscenze e abilità da conseguire
Al termine del corso lo studente possiede conoscenze specialistiche sulla progettazione e lo sviluppo di sistemi e applicazioni concorrenti e distribuite. In particolare: - conosce le principali tecniche di modellazione e verifica di programmi/sistemi concorrenti e distribuiti; - conosce le principali architetture e pattern nella progettazione di sistemi concorrenti/distribuiti; - conosce i principali paradigmi e tecniche di programmazione concorrente, asincrona e distribuita; - sa applicare le tecniche di programmazione concorrente, asincrona e distribuita nel contesto delle tecnologie moderne di riferimento (linguaggi, piattaforme, middleware/infrastrutture)
Contenuti
Il corso si svolgerà nelle seguenti parti:
1 - Programmazione concorrente - basi e modelli
- introduzione - concetti e aspetti principali
- modellazione di un programma/sistema concorrente
-- specifica di proprietà in LTL e verifica con model-checking
- modelli e meccanismi di interazione - modello a memoria comune
-- semafori, monitor
In lab:
- programmazione multi-threaded in Java
-- meccanismi di base e supporti di libreria
-- implementazione di monitor in Java
2 - Progettazione task-oriented
- progettazione e sviluppo di programmi concorrenti
-- metodi, architetture
-- formalismi visuali (Reti di Petri, Statecharts, Activity Diagrams)
In lab:
- Framework task-oriented in Java - Executors
3 - Programmazione concorrente - aspetti avanzati
- modelli a scambio di messaggi
-- modello a canali, modello ad attori
-- modello asincrono e sincrono
- programmazione asincrona basata su future/task
- programmazione asincrona basata su CPS, eventi e event-loop
-- meccanismo delle promise e correlati
- reactive programming e reactive extension (Rx)
In lab:
- programmazione ad attori basata su framework Akka (Java o Scala)
- programmazione asincrona in JavaScript + Vertx
- programmazione reattiva in RxJava
4 - Dalla Programmazione Concorrente alla Programmazione Distribuita
- introduzione - concetti e aspetti principali
- panoramica algoritmi distribuiti
In lab:
- programmazione ad attori basata su framework Akka (Java o Scala)
5 - Ingegneria di Sistemi Software Distribuiti - Alcuni aspetti
- modelli e architetture distribuite orientate ai servizi e ad eventi
-- architettura REST, Web come piattaforma applicativa, visione API
-- architetture ad eventi (EDA) e integrazione con modelli a servizi (Enterprise Service Bus) - cenni
-- architetture a micro-servizi
- modelli, infrastrutture e middleware per lo scambio di messaggi (MOM)
- design e sviluppo di applicazioni Cloud
In lab:
- esempi di utilizzo di un MOM (es: RabbitMQ), di un Cloud PAAS (es: GoogleAppEngine), di piattaforme e strumenti per architetture a servizi REST e REST API (Vertx, Swagger)
Testi/Bibliografia
- Principle of Concurrent and Distributed Programming (Ben-Ari) - Addison Wesley
- Java Concurrency in Practice - Brian Goetz, Doug Lea et al - Addison Wesley
- Foundations of Multithreaded, Parallel, and Distributed Programming - Gregory R. Andrews - Addison-Wesley
- Concurrency - State Models & Java Programs - Jeff Magee & Jeff Kramer - Wiley
Metodi didattici
Dei sei crediti del corso, tre crediti circa sono dedicati alla teoria e tre alla pratica in laboratorio.
Modalità di verifica e valutazione dell'apprendimento
La verifica dell'apprendimento avviene mediante:
- lo svolgimento di un insieme di esercizi di programmazione concorrente e distribuita (da svolgere durante il corso o a fine corso, a scelta dello studente)
- un colloquio orale, con domande sulla teoria e discussione degli esercizi.
Strumenti a supporto della didattica
Durante le lezioni verranno proiettati lucidi, disponibili sul sito ufficiale del corso. A supporto delle attività pratiche, verrà utilizzato il laboratorio di informatica ove gli studenti troveranno gli strumenti necessari per svolgere le esercitazioni. Tutto il materiale è disponibile sul sito di riferimento del corso.
Link ad altre eventuali informazioni
https://elearning-cds.unibo.it/course/view.php?id=12038
Orario di ricevimento
Consulta il sito web di Alessandro Ricci