Object oriented programming offers many benefits when it comes to creating modular, reusable, and logical software solutions. This course provides an introduction to object oriented concepts through the prism of the Java programming language. We investigate important OO principles such as abstraction, encapsulation, inheritance and polymorphism, and see how to apply these principles in Java.