# Programmazione Concorrente e Distribuita *[Aggiornamento 24/09/2016: Aggiornati i risultati finali (in aggiornamento).]* > **ATTENZIONE**: Il termine ultimo per la consegna del progetto corretto per A.A. 2015 / 2016 è il 23/09/2016. Oltre quella data non saranno più accetate ulteriori consegne. Invito inoltre a chiunque abbia passato lo scritto e consegnato un progetto corretto e che voglia registrare il voto a mandarmi un'email. ## Presentazione del corso ### Obiettivi formativi Il corso presenta il linguaggio Java e la programmazione a diversi livelli di astrazione: la programmazione ad oggetti, la programmazione concorrente, e la programmazione distribuita. L'esame consiste in una prova scritta seguita e da un progetto obbligatorio. Il progetto consiste in un'applicazione distribuita e concorrente. La prova scritta valuta l'apprendimento del linguaggio Java e la capacita' di realizzare soluzioni corrette per problemi di natura concorrente. Il progetto valuta la capacita' dello studente di applicare ad un caso reale i concetti di concorrenza e distribuzione visti a lezione. ### Propedeuticità obbligatorie strette Programmazione, Programmazione ad Oggetti ### Materiale didattico Parte del materiale didattico presentato durante le lezioni sarà progressivamente pubblicato, in formato elettronico, tramite collegamento alla lezione corrispondente. Sono altresì consigliati i seguenti testi: + [Oggetti, Concorrenza, Distribuzione. Programmare a diversi livelli di astrazione](http://www.editrice-esculapio.com/bookshop/Crafa-Oggetti-Concorrenza-Distribuzione-Programmare-a-diversi-livelli-di-astrazione#.VgBtBd_tmkp), Silvia Crafa, Editore Esculapio, 2014 + [Core Java Volume I, Fundamentals (9th edition)](http://www.informit.com/store/core-java-volume-i-fundamentals-9780137081899), C. S. Horstmann, Prentice Hall (*disponibile in biblioteca*) + [Core Java Volume II, Advanced Features (9th edition)](http://www.informit.com/store/core-java-volume-ii-advanced-features-9780137081608), C. S. Horstmann, Prentice Hall (*disponibile in biblioteca*) Gli esercizi ed esempi utilizzati dal docente durante le lezioni possono essere recuperati al repository **Github** [pcd-snippets](https://github.com/rcardin/pcd-snippets). ## Calendario delle lezioni e degli appelli di esame Segue il calendario delle lezioni del corso e degli appelli d'esame. | Data | Orario | Docente | Tema | Cap. libro | | :---: | :----: | :---: | ---- | | 6 ott. | 11:30 - 13:15 | Crafa | Piattaforma Java | 1 | | 7 ott. | 11:30 - 13:15 | Crafa | Programmazione procedurale in Java | 2 | | 13 ott. | 11:30 - 13:15 | Crafa | Classi e oggetti in java | 2 | | 14 ott. | 11:30 - 13:15 | Crafa | Ereditarietà di classi | 3 | | 20 ott. | 11:30 - 13:15 | Crafa | Classi astratte | 4 | | 21 ott. | 11:30 - 13:15 | Crafa | Interfacce | 4 | | 27 ott. | 11:30 - 13:15 | Crafa | Classi interne | 4 | | 28 ott. | 11:30 - 13:15 | Crafa | Organizzazione delle classi in java | 4 | | 03 nov. | 11:30 - 13:15 | Cardin | [Componenti delle interfacce (gerarchia). Cenni al Composite Pattern. I Layout](http://www.slideshare.net/RiccardoCardin/java-graphics-programming-54631803) ([pdf](pdf/pcd/Java%20-%20Graphics%20programming_4x4.pdf)) | 5 | | 04 nov. | 11:30 - 13:15 | Cardin | [Programmazione ad eventi: componenti, visione di insieme. Cenni all'Adapter Pattern](http://www.slideshare.net/RiccardoCardin/java-graphics-programming-54631803) | 5 | | 10 nov. | 11:30 - 13:15 | Cardin | [Gerarchia dei throwable. Meccanismi (throw, try, catch, finally). Sintassi try con chiusura. Eccezioni checked e unchecked](http://www.slideshare.net/RiccardoCardin/java-exception-handling-assertions-and-logging) ([pdf](pdf/pcd/Java%20-%20Exception%20handling,%20assertions%20and%20logging_4x4.pdf)) | 6 | | 11 nov. | 11:30 - 13:15 | Cardin | [Thread e la sua API. Accenni ai diagrammi di sequenza. Cicli di vita del thread](http://www.slideshare.net/RiccardoCardin/java-concurrent-programming-threads-basics). ([pdf](pdf/pcd/Java%20-%20Concurrent%20programming%20-%20Thread%20basics_4x4.pdf)) | 7 | | 18 nov. | 11:30 - 13:15 | Cardin | *Esercitazione* ([pdf](pdf/pcd/Java%20-%20Exercises%20(part%201)_4x4.pdf)) | -- | | 24 nov. | 11:30 - 13:15 | Cardin | [Thread safety, race conditions, locking](http://www.slideshare.net/RiccardoCardin/java-concurrent-programming-synchronization-part-1) ([pdf](pdf/pcd/Java%20-%20Concurrent%20programming%20-%20Synchronization%20(part%201)_4x4.pdf))| 7 | | 25 nov. | 11:30 - 13:15 | Cardin | [Conditional locking](http://www.slideshare.net/RiccardoCardin/java-concurrent-programming-synchronization-part-2) ([pdf](pdf/pcd/Java%20-%20Concurrent%20programming%20-%20Synchronization%20(part%202)_4x4.pdf)) | 7 | | 01 dic. | 11:30 - 13:15 | Cardin | Thread confinement, atomics e immutable classes | 7 | | 02 dic. | 11:30 - 13:15 | Cardin | [Executor / Futures / Promises](http://www.slideshare.net/RiccardoCardin/java-concurrent-programming-threads-advanced-concepts) ([pdf](pdf/pcd/Java%20-%20Concurrent%20programming%20-%20Thread's%20advanced%20concepts_4x4.pdf)) | 7 | | 09 dic. | 11:30 - 13:15 | Cardin | **[Presentazione progetto didattico](https://github.com/rcardin/pcd-actors)** | -- | | 15 dic. | 11:30 - 13:15 | Cardin | [Generic programming](http://www.slideshare.net/RiccardoCardin/java-generic-programming) ([pdf](pdf/pcd/Java%20-%20Generic%20programming_4x4.pdf)) | -- | | 16 dic. | 11:30 - 13:15 | Cardin | Chiarimenti sul progetto didattico | -- | | 08 gen. | 13:30 - 14:30 | Cardin | [Collection framework](http://www.slideshare.net/RiccardoCardin/java-collections-framework-56181924) ([pdf](pdf/pcd/Java%20-%20Collections%20framework_4x4.pdf)) in aula **1C/150** | -- | | 12 gen. | 11:30 - 13:15 | Cardin | [Socket su TCP](http://www.slideshare.net/RiccardoCardin/java-sockets-56882815) ([pdf](pdf/pcd/Java%20-%20Sockets_4x4.pdf)) | 9 | | 13 gen. | 11:30 - 13:15 | Cardin | [Remote procedure invocation (RMI). Cenni al Proxy Pattern](http://www.slideshare.net/RiccardoCardin/java-remote-method-invocation-56716760) ([pdf](pdf/pcd/Java%20-%20Remote%20Method%20Invocation_4x4.pdf)) | 9 | | 19 gen. | 11:30 - 13:15 | Cardin | [Stream I/O e gerarchie. Accenni al Pattern Decorator](http://www.slideshare.net/RiccardoCardin/java-processing-input-and-output) ([pdf](pdf/pcd/Java%20-%20Processing%20Input%20and%20Output_4x4.pdf)) | 8 | | 20 gen. | 11:30 - 13:15 | Cardin | Paths, Files e Directories. Serializzazione | 8 | | -- | -- | -- | [Risultati del I appello del 25/01/2016](pcd/Risultati_20160125.pdf) | - | | 01 feb. | 13:00 - 14:00 | Cardin | Visione dei compiti e correzione (aula **1C/150**) | - | | -- | -- | -- | [Risultati del II appello del 17/02/2016](pcd/Risultati_20160217.pdf) | - | | 25 feb. | 13:00 - 14:00 | Cardin | Visione dei compiti e correzione (aula **2BC60**) | - | | -- | -- | -- | [Risultati del III appello del 30/06/2016](pcd/Risultati_20160630.pdf) | - | | 15 lug. | 13:00 - 14:00 | Cardin | Visione dei compiti e correzione (aula **1C/150**) | - | | -- | -- | -- | [Risultati del IV appello del 18/07/2016](pcd/Risultati_20160718.pdf) | - | | -- | -- | -- | [Risultati del V appello del 15/09/2016](pcd/Risultati_20160915.pdf) | - | | -- | -- | -- | [Prospetto risultati finali (in aggiornamento)](pcd/Risultati_Finali_2016.pdf) | - | Le lezioni indicate in calendario si terranno nell'aula 1C/150 con l'orario seguente: + martedì, 11:30-13:15 + mercoledì, 11:30-13:15 ## Regole di partecipazione al progetto didattico Il progetto didattico richiede la realizzazione di una libreria semplificata che implementa il modello di concorrenza / distribuzione ad attori. La traccia per la realizzazione e le specifiche del sistema possono essere recuperate al seguente indirizzo: [GitHub pcd-actors](https://github.com/rcardin/pcd-actors). Alla stessa pagina è presente una sezione [F.A.Q.](https://github.com/rcardin/pcd-actors#faq) dedicata alle domande poste dagli studenti del corso sulle specifiche del progetto. La sezione è in costante aggiornamento. Il progetto didattico vale 2 punti sul voto finale. Il restante viene deciso dall'esito dello scritto individuale, che deve essere **maggiore di 18**. Il progetto può essere consegnato solo dopo il 25/01/2016. La consegna nella sessione di esami regolare (febbraio 2016) fornisce un punteggio aggiuntivo di 1 punto sul totale. I progetti devono essere consegnati inviandoli alla casella di posta *pcd.progetto.2015@gmail.com*. Devono essere consegnati unicamente i sorgenti del programma, ossia quanto presente all'interno della cartella `src` e il corrispondente file Maven delle dipendenze `pom.xml`. Il file zip da inviare al suddetto indirizzo deve quindi avere al suo interno la seguente struttura pcd-actors | |--src/ |--pom.xml L'oggetto dell'email deve essere il seguente: **CONSEGNA PROGETTO PCD 2015 - NOME COGNOME MATRICOLA** Il progetto è **individuale** e verranno applicate delle penalità a chiunque non segua pedissequamente questo vincolo. ## Esempio domande appello d'esame I testi delgli appelli d'esame conterranno al proprio interno una serie di domande a risposta multipla e/o a risposta *secca*. In quest'ultimo caso lo studente dovrà eseguire mentalmente il codice fornito e dare il risultato atteso. Si riporta di seguito un insieme di domande simili a quelle che saranno utilizzate all'interno dei testi degli appelli d'esame. L'elenco è in *costante aggiornamento*. **[Lista domande d'esempio](pcd/domande_esempio.txt)** **[Lista risposte alle domande d'esempio](pcd/risposte_domande_esempio.txt)** ## Calendario degli appelli d'esame Liste di iscrizione all'esame (del quale sono previsti 5 appelli, calendarizzati tra la fine del corso e la sessione di recupero estivo) verranno pubblicate sul sistema [UniWeb](https://uniweb.unipd.it/Home.do) nelle due settimane precedenti l'appello corrispondente.