Both a tutorial and a reference guide, this manual presents a number of techniques for solving recurring software design problems in a comprehensive manner which includes many guidelines and constraints regarding practical applications.[...]