Data Abstraction and Problem solving with JAVA: Walls and Mirrors - Carrano, Frank M (Pearson, 2002)