Multi-paradigm design for C++ - COPLIEN (Addison-Wesley, 1999)