Data Abstraction and Problem Solving with Java (2nd Edition)