This course teaches concepts and methods of object-oriented and concurrent programming that help create complex software systems that are extensible and scalable. It covers principles of object-oriented programming and design, inclusion polymorphism, single and multiple dispatch, parametric polymorphism, design patterns, functional programming, concurrent programming, and aspect-oriented programming. These concepts are explained in the context of the Java programming language.
The course is not offered in the academic year 2017/18
- Design Patterns: Elements of Reusable Object-Oriented Software (1994), by E. Gamma, R. Helm, R. Johnson, J. Vlissides. ISBN-13: 078-5342633610.
- Java Generics and Collections (2006), by M. Naftalin, P. Wadler. ISBN-13: 978-0596527754.
- Java 8 Lambdas: Pragmatic Functional Programming (2014), by R. Warburton. ISBN-13: 978-1449370770.
- Java Concurrency in Practice (2006), by B. Goetz, T. Peierls, J. Bloch, J. Bowbeer, D. Holmes, D. Lea. ISBN-13: 978-0321349606.