La
programación generativa (GP, Generative Programming) es un paradigma de
ingeniería del Software basado en el desarrollo de familias de sistemas[1].
El producto final de la GP es un modelo
generativo capaz de sintetizar todos los programas[2] de
una familia a partir de especificaciones de alto nivel de abstracción.
Los
componentes básicos de un modelo generativo, que son:
·
El espacio del
problema. Es el ámbito de actuación del ingeniero de aplicaciones. Consiste en uno o varios DSLs que facilitan
la especificación abstracta de programas.
·
El espacio de la
solución. Es el conjunto de marcos de trabajo y componentes que se reutilizan
en la generación de los programas objeto.
·
El espacio de
configuración. Es el compilador que convierte las especificaciones DSL en
programas objeto.
Apoyándose
en la ingeniería de dominio, K. Czarnecki y U. Eisenecker proponen un proceso
de desarrollo de modelos generativos organizado en las siguientes etapas:
1. Análisis del dominio del modelo.
1.1.
Determinación del alcance del dominio.
1.2.
Análisis de los aspectos comunes y variables del dominio. Modelado del dominio.
2.
Diseño del dominio.
2.1.
Diseño de una arquitectura común para los programas de la familia.
Identificación
de los componentes del espacio de la solución.
2.2.
Diseño de los DSLs del espacio del problema.
2.3.
Diseño del conocimiento de configuración.
3.
Implementación del dominio.
3.1.
Implementación de los componentes del espacio de la solución.
3.2.
Implementación de los DSLs del espacio del problema.
3.3.
Implementación del conocimiento de configuración.
Los
autores recomiendan aplicar este proceso de forma incremental e iterativa. Por
ejemplo, el conocimiento de configuración se debería automatizar gradualmente:
antes de utilizar generadores, los componentes del espacio de la solución se
parametrizarían y ensamblarían manualmente.
El
análisis del dominio de un modelo generativo es una actividad crítica que debe
evitar:
·
La omisión de puntos
de variación relevantes, que dificultaría el mantenimiento del modelo.
·
La inclusión de
puntos de variación innecesarios, que complicarían e incrementarían el coste
del modelo.
Existen varias metodologías para
analizar dominios: FAST (Family-Oriented Abstraction, Specification and
Translation) [WL99], ODM (Organization Domain Modeling), FODA (Feature-Oriented
Domain Analysis)[3].
Czarnecki, K. (5 de Febrero de 2007). UNED.
Obtenido de UNED:
http://www.issi.uned.es/doctorado/generative/Bibliografia/TesisCzarnecki.pdf
Gil, R. H. (22 de Febrero de 2007). UNED.
Obtenido de UNDE:
http://www.issi.uned.es/doctorado/generative/Bibliografia/TesisRHeradio.pdf
[1] “Generative Programming (GP) is a
software engineering paradigm based on modeling software system families such
that,
given
a particular requirements specification, a highly customized and optimized
intermediate or end-product can be automatically
manufactured
on demand from elementary, reusable implementation components by means of
configuration knowledge.” [CE00]
[2] El
resultado de un modelo generativo no tiene por qué ser un programa completo.
Puede ser un programa
parcial, un componente de otros programas [JS00,
WLKL04] o cualquier artefacto software: documentación,
juegos de pruebas… En esta tesis, se seguirá la tendencia
más difundida de utilizar el término “familia de
programas” para designar de forma general familias de
todo tipo de artefactos software.
No hay comentarios:
Publicar un comentario