Foundations of Programming: Object Oriented Design With Simon Allardice