Data Abstraction and Problem Solving with Java: Walls and Mirrors - Frank M. Carrano (Addison-Wesley, 2004)