Principles of Object-Oriented Software Development
second edition