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