A term JimCoplien coined in his excellent book ISBN 0-201-82467-1 "Multi-Paradigm Design for C++". Multi-Paradigm Design is a way of finding abstractions not only in ObjectOriented techniques but also in other abstraction techniques like templates, generic programming, families of overloaded functions, modules and generic functions. Multi-Paradigm Design explicitly recognizes the close tie between language, design, and domain structure and the way that they express commonality and variation. Using DomainAnalysis allows one to discover SoftwareFamilies? and facilitate reuse.
The book is not an easy read, but it's well worth the struggle. I'd given lip-service to the idea of C++'s "multi-paradigm" nature, but this book will help you to really understand how important that is, and how to wield that power explicitly. And it may give you some thoughts on when it would be appropriate to look at implementation tools besides C++ - the principles transcend any one programming language, although the book focuses on applying those principles to C++. -- DanMuller
I can't agree more with the idea of doing Multi-Paradigm Design, especially of choosing the right paradigm for each problem. But how do you do FunctionalProgramming in C++? Or does JimCoplien pull yet another rabbit out of the hat? BjarneStroustrup once said: "If you want SmallTalk, you know where to find it." -- AlainPicard
You can do FunctionalProgramming in C++, up to a point. Some conveniences (such as lambda functions) are missing, but even these gaps can be filled to an amazing degree by certain libraries, such as portions of the BoostLibraries or AndreiAlexandrescu's Loki. Books like Alexandrescu's ModernCeePlusPlusDesign have continued to open my eyes to the amazing capabilities of C++. -- DanMuller
There is another example in FunctoidsInCpp (FC++).
See also: MultiParadigmDatabase, MultiParadigmProgrammingLanguage, ProgrammingParadigm, OoppExploringTheMultiparadigmShift.