17628 - PROGRAMMAZIONE CONCORRENTE E DISTRIBUITA

Anno Accademico 2018/2019

  • 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