Java Design: Objects, UML, and Process