Prerequisite courses: Programming in Java, Operating Systems I
This course is a prerequisite for Operating Systems II (given concurrently), Distributed Systems (Part II), Advanced Systems Topics (Part II).
The aims of this course are (a) to introduce the modular design
of application software, using the facilities of the Java programming
language as running examples, (b) to explore the need for and
implementation of concurrency control and communication in
inter-process and intra-process contexts and (c) to introduce
the concept of transactions and their implementation and uses.
Programming with objects.
Revision overview of the Java programming language. Structuring
programs using encapsulation and inheritance. Design
patterns. [4 lectures]
Further Java topics.
Graphical user interfaces. Reflection and serialization.
Finalizers. Class loaders. Software Testing. [8 lectures]
Reasons for multi-threaded programming. Correctness criteria. Mutual
exclusion locks and condition variables. Alternative
concurrency-control primitives. [5 lectures]
Distributed systems & transactions.
General problems in distributed systems. Naming. Access control.
IDLs. Message passing and the use of sockets in Java. Remote method
invocation. Compound operations & correctness criteria. Crash
recovery. Isolation. [5 lectures]
Generics in Java.
Single-compilation templated classes. Type specialisation and typing
constraints. Interactions with reflection, serialisation, and the class
loader. Advanced implementation techniques using Generics. [2 lectures]
At the end of the course students should
understand the terminology of object oriented programming and be
able to use it with precision
be able to illustrate the use of object oriented techniques
through examples of the kind seen in the Java standard libraries
understand the need for and implementation of concurrency
understand different mechanisms for communication within or
between applications and evaluate their trade-offs in different
understand the concept of transactions and their application in
a range of systems
understand why software testing is not always easy and
the techniques used to achieve thorough testing
* Bacon, J. & Harris, T. (2003). Operating systems or Bacon, J. (1997) Concurrent systems (2nd ed.). Addison-Wesley.
Myers, G.J. (2004). The art of software testing. Wiley (2nd ed.).
Lea, D. (1999). Concurrent programming in Java. Addison-Wesley (2nd ed.).
Bracha, G., Gosling, J., Joy, B. & Steele, G. (2000). The Java language specification. Addison-Wesley (2nd ed.). http://java.sun.com/docs/books/jls/
Gamma, E., Helm, R., Johnson, R. & Vlissides, J. (1994). Design patterns. Addison-Wesley.