Distributed and concurrent programming

Degree course: 
Corso di First cycle degree in COMPUTER SCIENCE
Academic year when starting the degree: 
2017/2018
Year: 
2
Academic year in which the course will be held: 
2018/2019
Course type: 
Compulsory subjects, characteristic of the class
Credits: 
8
Period: 
Second semester
Standard lectures hours: 
72
Detail of lecture’s hours: 
Lesson (48 hours), Exercise (24 hours)
Requirements: 

A very good knowledge of sequential Java programming is required.
A good knowledge of the principle of concurrency in Operating Systems is needed.
Some knowledge of design patterns and UML is also required.

Final Examination: 
Orale

The exam consists in a session in the lab, in which the student has to has to answer a few questions and implement one or more programs that require the application of the concepts illustrated in the course.
Only if there are still doubts on the actual preparation of the student an oral test will be carried out.

Assessment: 
Voto Finale

The course aims at illustrating the problems that call for concurrent and distributed programming, and teaches the programming techniques that are suitable to tackle such problems. Java is used as the programming language.
It is expected that students develop the following abilities.
How to create threads and control their nondeterministic behaviour in a program.
Understanding what happens in the computer memory during the execution of a concurrent program.
Identifying and avoiding deadlocks and race conditions.
Designing concurrent programs according to a suitable methodology.
Applying standard inter-thread communication mechanisms.
Using the client-server model in distributed programming.
Using sockets and RMI.
Understanding and using the basic principles of event-based programming.

In the part of the course dedicated to concurrent systems, threads, active objects, suspension and wake primitives are illustrated. Some standard inter-thread communication mechanisms (semaphores, monitors, signals, blackboards, barriers, mailboxes, etc.) are also illustrated.
In the part of the course dedicated to distributed programming the concept of connection over a network, socket management and communication protocols are illustrated. RMI is also introduced.
Basic notions concerning event-based programming are introduced, as well as communication patterns.

The lesson slides are made available on the e-learning site.
The proposed problems and the associated code are also made available.
Suggested books areç
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.

The course includes frontal lessons (48 hours) and exercise lessons (24 hours). During the latter, practical usage of programming tools (especially Eclipse) is demonstrated.

Office hours: by appointment.