Object-oriented software construction - Meyer, Bertrand (Prentice Hall International series in Computer Science., 1988)