This document provides an overview and outline of object oriented design principles for class design, as identified by Robert C. Martin in the early 2000s. It discusses five class design principles: the single responsibility principle, open-closed principle, Liskov substitution principle, interface segregation principle, and dependency inversion principle. It also describes principles for package cohesion and coupling. Additionally, it provides examples of bad code that is rigid, fragile, and immobile and how to avoid these issues through proper class design.