Object-Oriented Design and Patterns (2nd Ed.)