Метапрограммирование — это парадигма программирования, построенная на программном изменении структуры и поведения программ.
Понятие метапрограммирования тесно связано с моделированием, так как метод подразумевает повышение уровня абстракции моделей
за счет вынесения метаданных из модели. В результате чего мы получаем метамодель и метаданные. Во время раннего или
позднего связывания (при разработке, трансляции или работе программы) мы из метамодели и метаданных опять получаем модель
автоматическим программным способом. Созданная модель может меняться многократно, без изменения программного кода метамодели,
а иногда даже без остановки программы.
Метапрограммирование времени разработки - это, например, когда CASE-средство генерирует код из модели классов, структуры БД или диалоговой формы.
Метапрограммирование времени компиляции - это, например, использование шаблонов классов или генераторов кода.
Метапрограммирование времени выполнения - это, например, замена последовательности похожих вызовов функций на циклы с
использованием структур данных, использование рефлексии, динамическое формирование запросов и выполняемого кода (eval).