He visto que hay una cierta confusión acerca de estos tres conceptos: executable models, code-generation y model interpretation.

Un executable model es un modelo con suficiente información para ser ejecutable. Soy consciente que esta definición es prácticamente inútil pero es que en mi opinión la ejecutabilidad de un modelo depende más de la herramienta que usemos para la ejecución que del modelo en sí (e.j. algunas herramientas pueden necesitar modelos muy completos mientras que otras pueden ser más capaces de complementar las partes del modelo no especificadas con suficiente detalle utilizando opciones por defecto).

La familia de modelos ejecutables más conocida es sin duda la de los métodos Executable UML ( libro clásico sobre el tema). Executable UML se basa en la utilización de un lenguaje de acciones (básicamente un pseudocódigo imperativo para modelos, ver por ejemplo el lenguaje Alf ) para definir con precisión el comportamiento de todos los métodos de las clases del modelo. De hecho, la OMG está ahora en proceso de estandarizar el concepto de Executable UML models, en concreto la Semantics of a Foundational Subset for Executable UML Models (FUML) . Por cierto, y aunque parezca mentira, el estándar no incluye ninguna definición de lo que se entiende por modelo ejecutable.

Code-generation y model interpretation son simplemente dos maneras de hacer realidad la ejecución de modelos.

La estrategia de generación de código consiste en utilizar un compilador de modelos (muchas veces definido como una transformación modelo-a-texto) para generar una representación del modelo en un lenguaje o plataforma de programación existente (como Java). En cambio, la estrategia de interpretar modelos se basa en la existencia de una máquina virtual capaz de leer y ejecutar directamente los modelos (ver un ejemplo de propuesta para una maquina virtual para modelos UML).

Si al comienzo la mayoría de métodos MDD utilizaban el enfoque de generación de código, cada vez hay más que ahora están adoptando la estrategia de interpretar modelos (e.j. Mendix o AlphaSimple ). Las ventajas e inconvenientes de cada estrategia los explica Johan den Haan aquí .

No obstante, tampoco creo que sean dos aproximaciones incompatibles. Por ejemplo, se podría implementar una máquina virtual utilizando internamente técnicas de generación de código (aunque esto quedara escondido al usuario, la máquina virtual podría estar ejecutando de hecho código compilado a partir del modelo durante la interpretación). No estoy seguro de cuál podría ser la ventaja de esta opción pero ¿quién sabe?

Si te ha gustado esta entrada, puedes subscribirte a este Software Modeling blog y/o seguirme en twitter y/o a través de la lista de distribución del portal Y si realmente te ha gustado ayúdame a hacerlo llegar a otros utilizando los bookmarks que tienes a continuación:

Pin It on Pinterest

Share This