multi-paradigm programming