This document introduces design patterns and discusses their application to a program called Oodle. It begins by outlining the goals of object-oriented programming like reusability and maintainability. It then describes tools like encapsulation, intelligent data, and inheritance. The document introduces design patterns as reusable solutions to common programming problems. It uses a notation system to diagram class relationships. Finally, it establishes the original requirements of the Oodle program to provide a running example for exploring design pattern implementations.