Università degli studi dell'Insubria

PROGRAMMAZIONE CONCORRENTE E DISTRIBUITA

A.A. di erogazione 2018/2019
Insegnamento obbligatorio

Laurea triennale in INFORMATICA
 (A.A. 2017/2018)
Anno di corso: 
2
Tipologia di insegnamento: 
Caratterizzante
Settore disciplinare: 
SISTEMI DI ELABORAZIONE DELLE INFORMAZIONI (ING-INF/05)
Crediti: 
8
Ciclo: 
Secondo Semestre
Ore di attivita' frontale: 
72
Dettaglio ore: 
Lezione (48 ore), Esercitazione (24 ore)

Il corso ha lo scopo di insegnare le tecniche di programmazione concorrente, la programmazione distribuita e le relative problematiche. Gli argomenti verranno affrontati usando come riferimento il linguaggio di programmazione Java.

Per tutti gli argomenti del programma i risultati di apprendimento attesi sono quindi racchiusi nei seguenti punti:
Comprendere come creare dei thread all'interno di un programma e come controllarli. In particolare si pone attenzione alla gestione del comportamento non deterministico dovuto alla presenza di thread.
Comprendere cosa avviene in memoria durante l’esecuzione di un programma concorrente.
Imparare a riconoscere ed evitare situazioni di Race Conditions e di Deadlock, due tipi di problemi che possono insorgere con i programmi concorrenti.
Imparare ad utilizzare una metodologia per la progettazione di programmi concorrenti.
Essere in grado di applicare alcuni dei paradigmi di comunicazione standard della programmazione concorrente, oltre ai semafori e monitor.
Conoscere il modello di interazione client-server nella programmazione distribuita.
Imparare a realizzare programmi distribuiti attraverso l'uso di strumenti a basso livello come le socket e attraverso l'uso di librerie ad alto livello come Java RMI.
Conoscere le nozioni di base della programmazione ad eventi in ambito concorrente e distribuito.

Prerequisiti: 

L’allievo che accede a questo insegnamento deve padroneggiare la programmazione sequenziale in Java, deve avere una buona conoscenza dei principi di funzionamento di un Sistema Operativo e in particolare i meccanismi di supporto alla concorrenza, ad esempio, processi, semafori, etc., deve sapere cosa sono i pattern nella progettazione del software e deve infine conoscere un minimo di UML.

Per la parte relativa alla programmazione concorrente verranno illustrati i concetti di Thread, oggetti attivi, metodi sincronizzati, primitive di sospensione e di risveglio necessari alla implementazione di sistemi concorrenti. Verranno inoltre analizzati alcuni dei paradigmi di comunicazione standard della programmazione concorrente, come ad esempio i semafori, i monitor, i segnali, la comunicazione tramite Buffers, Blackboards, Barriers, etc.

Successivamente il corso affronterà le tecniche di programmazione in ambito distribuito. Verranno illustrati i concetti fondamentali quali connessione di rete, apertura, chiusura e gestione dei Socket, la comunicazione mediante Socket e i protocolli di comunicazione applicativi. Infine verranno illustrati gli aspetti principali relativi alla programmazione distribuita attraverso l'uso di Java RMI.
Infine verranno introdotte alcune nozioni di base sulla programmazione ad eventi in ambito concorrente e distribuito, utilizzando gli eventi come meccanismo di comunicazione tra Thread e alcuni pattern per la comunicazione ad eventi in ambito distribuito.

Il corso si articola in lezioni frontali (48 ore) ed esercitazioni (24 ore).
Gli argomenti trattati a lezione sono oggetto di esercitazioni che verranno comprenderanno la dimostrazione dal vivo degli strumenti di sviluppo (principlamente Eclipse).

Modalita' di verifica dell'apprendimento: 

L'accertamento dell’acquisizione delle conoscenze e delle abilità sopra descritte avviene mediante una prova scritta riguardante gli argomenti trattati nel corso. Questa verifica viene fatta sui PC del laboratorio. Naturalmente, il voto è in trentesimi e il voto minimo per superare la prova è 18/30. Durante la prova viene chiesto di scrivere su un PC del laboratorio uno o più programmi che richiedono la conoscenza degli argomenti trattati nel corso. Viene inoltre richiesto di rispondere a domande vertenti sugli argomenti affrontati. Solo nel caso la prova scritta lasci dei dubbi sulla reale preparazione dello studente potrà svolgersi una prova orale.

Le slide delle lezioni in formato PDF sono messe a disposizione sul sito istituzionale di e-learning.
Per le esercitazioni vengono resi disponibili sul portale della didattica il testo e le soluzioni dei problemi proposti.
I libri di supporto consigliati sono i seguenti:
Creating Components: Object Oriented, Concurrent, and Distributed Computing in Java di Charles W. Kann
Concurrent and Real-Time Programming in Java di A. Wellings
Concurrent and Distributed Programming in Java by Vijay K. Garg
Thinking in Java di Bruce Eckel et. al.
Tuttavia, data la generalità degli argomenti trattati esistono moltissimi libri che possono proficuamente essere utilizzati dagli studenti.

Il docente riceve su appuntamento, che può essere richiesto a lezione o via email.

Cerchi il programma? Potrebbe non essere ancora stato caricato o riferirsi ad insegnamenti che verranno erogati in futuro.
Seleziona l‘anno in cui ti sei immatricolato e troverai le informazioni relative all'insegnamento del tuo piano di studio.

A.A. 2019/2020

Anno di corso: 2
Curriculum: PERCORSO COMUNE

A.A. 2018/2019

Anno di corso: 2
Curriculum: PERCORSO COMUNE

A.A. 2016/2017

Anno di corso: 2
Curriculum: PERCORSO COMUNE

A.A. 2015/2016

Anno di corso: 2
Curriculum: PERCORSO COMUNE

A.A. 2014/2015

Anno di corso: 2
Curriculum: PERCORSO COMUNE

A.A. 2013/2014

Anno di corso: 2
Curriculum: PERCORSO COMUNE