Multi-Paradigm Design for C++ door James O. Coplien