Data abstraction and problem solving with Java : walls and mirrors - Carrano, Frank M. (Pearson education, 2001)