Java TM softtware solutions : foundations of program design - Lewis, John (Addison-Wesley, 2012)