Introduction to software design with java - Robillard, Martin P. (Springer, 2019)