Distributed Systems and Applications

Module code: CO3090

Computer networks and distributed applications are all around us, so much so that nowadays it is hard to imagine stand-alone systems or applications. Practically, any modern computing device offers the possibility of being connected with other devices. At a higher level, applications aim at exploiting networking capabilities of systems and tend to be more interconnected and communicate more between themselves.

Designing and programming these kinds of distributed applications can be a hard task if not done at the appropriate level of abstraction. There are two main complex aspects to face:

  • Distributed systems are frequently made of heterogeneous devices and interact through different types of communication infrastructure
  • Modern distributed systems have different tiers (such as TCP/IP level, operating system, network system, etc.)

Middleware provides an abstraction of many low-level details of systems. They are meant to simplify software development and application integration by interfacing the application level with lower tiers of distributed systems so that the programmer does not have to worry about implementation details. Also, middlewares allow the programmer to integrate applications developed for different execution contexts and in different times.

In this module you will study some notions of concurrent and distributed programming (e.g. threads and RMI) and the main models and principles behind the middlewares that many vendors (Microsoft, IBM, Sun, Oracle) have proposed. We will consider how these proposals differ not only with respect to the technologies or architectures adopted, but also with respect to the underlying coordination models.


  • 18 hours of lectures
  • 7 hours of seminars
  • 14 hours of tutorials
  • 161 hours of guided independent study


  • Coursework (40%)
  • Exam, 3 hours (60%)