Para mí, la meta-programación es "un programa que escribe programas".
Meta-programación es especialmente bueno para su reutilización, ya que apoya la generalización: puede definir una familia de los conceptos que pertenecen a un patrón particular . Luego, a través de la variabilidad puede aplicar ese concepto en escenarios similares, pero diferentes.
El ejemplo más simple es captadores y definidores de Java como se ha mencionado por @Sjoerd:
Tanto getter y setter seguir un patrón bien definido : Un getter devuelve un miembro de la clase, y un setter define el valor de un miembro de la clase . Por lo general, crea lo que se llama una plantilla para permitir la aplicación y la reutilización de ese patrón en particular. El funcionamiento de una plantilla depende del enfoque de metaprogramación/generación de código que se utilice.
Si desea que un captador o colocador se comporte de una manera ligeramente diferente, puede agregar algunos parámetros a su plantilla. Esta es variabilidad. Por ejemplo, si desea agregar un código de procesamiento adicional al obtener/configurar, puede agregar un bloque de código como parámetro de variabilidad. Mezclar código personalizado y código generado puede ser complicado. ABSE es actualmente el único enfoque MDSD que sé que admite de forma nativa código personalizado directamente como un parámetro de plantilla.
¿Para qué sirve? Absolutamente nada. – Radu
posible duplicado de http://en.wikipedia.org/wiki/War_(Edwin_Starr_song) – Tom
Como han señalado algunas respuestas, su descripción no es correcta. Su descripción parece referirse a la reflexión y la programación orientada a aspectos (AOP). Estos dos amplían la capacidad del lenguaje en tiempo de ejecución. La metaprogramación amplía la capacidad del lenguaje en tiempo de compilación, y en particular la capacidad de operar en tipos (en un sistema de tipo).La reflexión, por otro lado, agrega la capacidad de operar en tipos en tiempo de ejecución. – rwong