Introduction to Software Design with Java - Martin P. Robillard (Springer, 2019)