Designing Object-Oriented Software
A practical, down-to-earth introduction to the art of designing object- oriented software.