Touch of class learning to program well with objects and contracts - Meyer, Bertrand (Springer, 2011)