Object-Oriented Software Development Using Java: Principles, Patterns, and Frameworks (1/e)