This document provides an overview of object-oriented programming and Java. It defines object-oriented programming as organizing programs around objects and their interfaces rather than functions. The key concepts of OOP discussed include classes, objects, encapsulation, inheritance, polymorphism, and abstraction. It also provides details on the history and characteristics of Java, the most popular language for OOP. The document is serving as course material for a programming paradigms class focusing on OOP using Java.