Object-oriented software construction - Bertrand Meyer (Prentice Hall, New Jersey, 1997)