This document discusses principles of object oriented programming including encapsulation, abstraction, inheritance, polymorphism, and decoupling. It provides examples of classes, objects, methods, and interfaces. It also explains SOLID principles such as the single responsibility principle, open/closed principle, Liskov substitution principle, interface segregation principle, and dependency injection.