This document provides an overview of object-oriented programming (OOP) concepts. It defines OOP as consisting of cooperating objects that exchange messages to achieve a common goal. It describes the key concepts of classes and objects, with classes serving as blueprints for creating objects. The core OOP concepts of abstraction, encapsulation, inheritance, polymorphism, and overriding are explained. Exception handling and design patterns including creational, structural, and behavioral patterns are also overviewed along with the SOLID principles of single responsibility, open/closed, Liskov substitution, interface segregation, and dependency inversion. Code examples are provided to illustrate many of the concepts.