Una transformación de modelo , en ingeniería basada en modelos , es una forma automatizada de modificar y crear modelos específicos de la plataforma a partir de modelos independientes de la plataforma. Un ejemplo de uso de la transformación de modelo es garantizar que una familia de modelos sea consistente, en un sentido preciso que el ingeniero de software puede definir. El objetivo de utilizar una transformación de modelo es ahorrar esfuerzo y reducir errores automatizando la creación y modificación de modelos cuando sea posible.
Las transformaciones de modelos pueden considerarse programas que toman modelos como entrada. Existe una amplia variedad de tipos de transformaciones de modelos y usos de ellas, que difieren en sus entradas y salidas y también en la forma en que se expresan.
Una transformación de modelo generalmente especifica qué modelos son aceptables como entrada y, si corresponde, qué modelos puede producir como salida, especificando el metamodelo al que debe ajustarse un modelo.
Las transformaciones de modelos y los lenguajes para ellas se han clasificado de muchas maneras. [1] [2] [3] Algunas de las distinciones más comunes son:
En principio, una transformación de modelo puede tener muchas entradas y salidas de distintos tipos; la única limitación absoluta es que una transformación de modelo tomará al menos un modelo como entrada. Sin embargo, una transformación de modelo que no produzca ningún modelo como salida se denominaría más comúnmente análisis de modelo o consulta de modelo.
Las transformaciones endógenas son transformaciones entre modelos expresados en el mismo lenguaje. Las transformaciones exógenas son transformaciones entre modelos expresados utilizando lenguajes diferentes. [4] Por ejemplo, en un proceso que se ajuste a la arquitectura basada en modelos OMG , un modelo independiente de la plataforma podría transformarse en un modelo específico de la plataforma mediante una transformación de modelo exógena.
Una transformación de modelo unidireccional tiene un solo modo de ejecución: es decir, siempre toma el mismo tipo de entrada y produce el mismo tipo de salida. Las transformaciones de modelo unidireccionales son útiles en situaciones similares a la compilación, donde cualquier modelo de salida es de solo lectura. La noción relevante de consistencia es entonces muy simple: el modelo de entrada es consistente con el modelo que la transformación produciría como salida, únicamente.
En el caso de una transformación de modelo bidireccional, el mismo tipo de modelo puede ser a veces la entrada y otras veces la salida. Las transformaciones bidireccionales son necesarias en situaciones en las que las personas trabajan en más de un modelo y los modelos deben mantenerse consistentes. En ese caso, un cambio en cualquiera de los modelos puede requerir un cambio en el otro, a fin de mantener la coherencia entre los modelos. Debido a que cada modelo puede incorporar información que no se refleja en el otro, puede haber muchos modelos que sean consistentes con un modelo determinado. Algunos casos especiales importantes son:
Es particularmente importante que una transformación de modelo bidireccional tenga propiedades apropiadas para que se comporte de manera sensata: por ejemplo, no realizar cambios innecesarios o descartar cambios realizados deliberadamente. [5]
Una transformación de modelo puede escribirse en un lenguaje de programación de propósito general, pero también hay disponibles lenguajes de transformación de modelo especializados. Las transformaciones bidireccionales, en particular, se escriben mejor en un lenguaje que garantice que las direcciones estén relacionadas de forma adecuada. Los lenguajes de transformación de modelo estandarizados por OMG se conocen colectivamente como QVT .
En algunos lenguajes de transformación de modelos, por ejemplo los lenguajes QVT , una transformación de modelo es en sí misma un modelo, es decir, se ajusta a un metamodelo que forma parte de la definición del lenguaje de transformación de modelos. Esto facilita la definición de Transformaciones de Orden Superior (HOTs), [6] es decir, transformaciones que tienen otras transformaciones como entrada y/o salida.
{{cite book}}
: |journal=
ignorado ( ayuda )