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