Designing with Object-Oriented Patterns and Principles — Programming Keynou