This document provides an introduction to object-oriented programming (OOP). It discusses key OOP concepts like enabling code reuse through inheritance and modifying existing code more easily. While OOP became popular in the 1980s, its origins date back to the Simula programming languages from the 1960s. OOP provides clear modular structures, makes code maintenance and modification easier, and offers a framework for code libraries. The document also defines important OOP terminology like classes, objects, encapsulation, abstraction, inheritance, polymorphism and distinguishes between abstraction and encapsulation.