Object-Oriented Design & Patterns