Мета-программирование, для чего это нужно? - PullRequest
5 голосов
/ 05 августа 2010

Итак, мета-программирование - идея, что вы можете изменять классы / объекты во время выполнения, добавляя новые методы и свойства.Я знаю, что это хорошо для разработки рамок;Я работал с Grails, и этот фреймворк добавляет кучу методов к вашим классам во время выполнения.У вас есть свойство name для объекта User, и bamm, вы получаете метод findByName, внедренный во время выполнения.

  1. Мое описание полностью описало концепцию?для (конкретных примеров), кроме разработки фреймворка?

Ответы [ 2 ]

3 голосов
/ 06 августа 2010

Для меня метапрограммирование - это «программа, которая пишет программы».

Метапрограммирование особенно полезно для повторного использования, поскольку оно поддерживает обобщение: вы можете определить семейство изпонятия, которые принадлежат определенному шаблону .Затем с помощью изменчивость вы можете применить эту концепцию в похожих, но разных сценариях.

Простейшим примером являются геттеры и сеттеры Java, упомянутые @Sjoerd:

Оба геттераи установщик следует четко определенному шаблону : получатель возвращает член класса, а установщик устанавливает значение члена класса.Обычно вы создаете так называемый шаблон , чтобы разрешить применение и повторное использование этого конкретного шаблона.Принцип работы шаблона зависит от используемого подхода метапрограммирования / генерации кода.

Если вы хотите, чтобы метод получения или получения работал немного по-другому, вы можете добавить некоторые параметры в шаблон.Это изменчивость .Например, если вы хотите добавить дополнительный код обработки при получении / настройке, вы можете добавить блок кода в качестве параметра изменчивости.Смешивать пользовательский код и сгенерированный код может быть сложно. ABSE в настоящее время является единственным подходом к MDSD, который, как я знаю, изначально поддерживает пользовательский код непосредственно в качестве параметра шаблона.

1 голос
/ 05 августа 2010

Мета-программирование не только добавляет методы во время выполнения, но также может автоматически создавать код во время компиляции.Т.е. код, генерирующий код.

  • Веб-сервисы (т. Е. Методы определены в WSDL, и вы хотите использовать их так, как если бы они были реальными методами для объекта)
  • Избежание шаблоновкод.Например, в Java вы должны использовать методы получения и установки, но они могут быть сделаны автоматически для большинства свойств.
...