Java programming from problem analysis to program design - Mayfield, Blayne (Cengage Learning, 2008)