Taller de Ingeniería Dirigida por Modelos (TMDE) Transformaciones de Modelos Objetivos de hoy • Comprender la importancia y rol de las transformaciones de modelos en MDE • Introducir las transformaciones modelto-model (M2M) • Introducir las tecnologías que permiten su aplicación práctica jueguemos a… mejor no Transformaciones • El concepto de transformación no es nuevo • La computación puede verse como un proceso de transformación de datos • En MDE encontramos: – Generación de modelos a más bajo nivel, y finalmente código, a partir de modelos a alto nivel – Sincronización y mapping entre modelos al mismo o diferentes niveles de abstracción – Creación de vistas basadas en consultas a un sistema – Aplicación a la ingeniería inversa para obtener modelos de alto nivel a partir de otros de bajo nivel Transformación de Modelos • En términos generales pueden verse como programas que toman un modelo (o más de uno) como entrada y devuelven otro modelo (o más de uno) como salida Transformación de Modelos • Los modelos de origen y destino conforman con metamodelos Object Management Group. Query/View/Transformation Specification Version 1.1, 2009 Transformación de Modelos • Las transformaciones se suelen definir como un conjunto de reglas que describen la correspondencia entre elementos del metamodelo origen y del metamodelo destino relation ClassToTable { cn : String; domain uml c : Class { name = cn }; domain rdbms t : Table { name = cn }; } Transformación de Modelos • El motor interpreta las reglas y ejecuta la transformación sobre un modelo de entrada (o verifica la correspondencia entre pares) Clasificación • Transformaciones verticales – Relacionan modelos con distintos niveles de abstracción y pueden aplicarse tanto en sentido descendente como ascendente – Ejemplos: Clases a Tablas, BPMN a SoaML • Transformaciones horizontales – Relacionan modelos que describen un sistema desde un nivel de abstracción similar. – Ejemplos: Refactoring, consistencia de códigos entre diferentes lenguajes de programación Clasificación • Por tipo de lenguaje: declarativos, imperativos o híbridos (ambos tipos de forma combinada) • Direccionalidad: – Transformaciones unidireccionales: las reglas se ejecutan en una sola dirección. – Transformaciones bidireccionales: se pueden aplicar en ambas direcciones Clasificación • Dependiendo de los modelos origen y destino – Transformaciones exógenas: los metamodelos origen y destino son distintos. (ej. Clases a Tablas) – Transformaciones endógenas: los metamodelos origen y destino son el mismo (son llamadas transformaciones in-place) (ej. Refactoring) • Dependiendo del tipo de modelo destino – Transformaciones modelo a modelo (M2M): generan modelos a partir de otros modelos. – Transformaciones modelo a texto (M2T): generan cadenas de texto a partir de modelos. Mecanismos de Transformación • Manipulación directa – Implementación de las reglas de transformación desde cero, en un lenguaje de programación de propósito general como Java • Operacional – Similar a la manipulación directa pero ofrece soporte más orientado a transformación de modelos – Una solución típica es extender la sintaxis de un lenguaje de modelado mediante el agregado de facilidades para expresar las transformaciones, ej: OCL con constructores imperativos – Lenguajes: Operational Mappings de QVT y Kermeta Mecanismos de Transformación • Relacional – Reglas declarativas como relaciones matemáticas entre elementos de los metamodelos origen y destino – Soportan naturalmente reglas multi-direccionales – Lenguajes: Relations de QVT, Tefkat • Basada en transformaciones de grafos – Basadas en la teoría de transformaciones de grafos tipados, etiquetados y con atributos – Lenguajes: AGG, VIATRA • Híbrida – Combinan diferentes técnicas (como componentes separados o unificados) – Lenguajes: QVT, ATL Requisitos de Lenguajes M2M • Suele requerirse que las reglas tengan la habilidad de determinar qué elementos ya han sido calculados por otras reglas. El motor debe tener la habilidad de hacer un registro de la traza de la transformación • Si luego de transformado el modelo origen sufre modificaciones, la propagación de cambios sobre el modelo destino debería realizarse sólo donde corresponda (en lugar de regenerar todo el modelo destino desde cero). Se necesita un mecanismo de identificación sobre el modelo destino (la traza suele contener esta información) Requisitos de Lenguajes M2M • En ciertos casos una transformación puede ser usada para verificar si dos modelos preexistentes satisfacen la relación y opcionalmente modificar el modelo destino para que la misma se cumpla. La transformación puede no haberse ejecutado nunca (no es propagación de cambios) • Si el modelo fuente es muy grande y es necesario propagar cambios, debería ser posible realizar un análisis de impacto para saber cuáles reglas de la transformación deben ser ejecutadas y sobre qué elementos del modelo origen se aplicarán. Esto suele llamarse actualización incremental Requisitos de Lenguajes M2M • Puede requerirse que los modelos destino sean modificados manualmente luego de generados. El motor debería respetar estos cambios en caso de producirse una nueva transformación. Este problema se conoce como política de conservación • Los elementos del modelo destino pueden ser construidos incrementalmente. Por ejemplo, ciertos elementos son transformados en otros en una primera fase, y en una segunda las relaciones entre ellos se transforman en relaciones entre los elementos generados previamente Requisitos de Lenguajes M2M • Las transformaciones bidireccionales se definen sólo para describir una relación de isomorfismo. Se logran escribiendo dos o más transformaciones unidireccionales, o una transformación que pueda ejecutarse en ambas direcciones (posible sólo en un escenario declarativo) • Los lenguajes deben permitir definir una transformación compleja en términos de otras más simples • Si bien las transformaciones pueden implementarse utilizando un enfoque de manipulación directa, esto no satisface los requisitos mencionados. Por ello se han definido lenguajes específicos para M2M QVT-Relations QVT-Relations • Query/Views/Transformations http://www.omg.org/spec/QVT/1.1/ • La propuesta es híbrida – Relations: lenguaje declarativo basado en relaciones entre los elementos – Core: lenguaje declarativo simplificado – Operational Mappings: lenguaje imperativo que extiende Relations QVT-Relations • Lenguaje declarativo basado en relaciones definidas sobre los elementos del metamodelo • Define patrones que pueden ser detectados e instanciados (pattern matching) • Manipulación automática de trazas de transformación • Escenarios soportados: – Check-only (verifica si los modelos se corresponden) – Transformaciones multidireccionales – Actualización incremental de modelos existentes QVT-Relations :: Relación • Una transformación es definida como un conjunto de relaciones entre los metamodelos de origen y destino transformation uml2rdbms(uml:UML, rdbms:RDBMS){} • Una relación declara restricciones que deben ser satisfechas por los elementos de los modelos candidatos – Domains – When Pattern – Where Pattern QVT-Relations :: Dominios • Variables se pueden asociar a elementos de un modelo de un tipo determinado • Un dominio tiene patrones: conjunto de variables y restricciones que los elementos de un modelo asociados a dichas variables deben satisfacer para calificar como un patrón válido relation PackageToSchema{ pn : String; domain uml p:Package {name = pn} domain rdbms s:Schema {name = pn} } QVT-Relations :: When/Where • When: especifica pre-condiciones que debe satisfacer una relación • Where: especifica las condiciones que deben ser satisfechas por todo elemento participante de la relación (post-condiciones) • La cláusulas when y where pueden contener expresiones OCL arbitrarias además de las expresiones de invocación de relaciones QVT-Relations :: Ejemplo top relation ClassToTable { cn : String; top: se debe checkonly domain uml c : Class { cumplir siempre namespace = p:Package{}, kind = 'Persistent', name = cn checkonly: verifica si existe }; un match válido enforce domain rdbms t : Table { schema = s:Schema{}, name = cn, enforce: el modelo es }; modificado para satisfacer la relación when { PackageToSchema(p, s); } where { AttributeToColumn(c, t); } } Bibliografía 1. 2. 3. 4. M. Brambilla, J. Cabot, M. Wimmer (2012). Model-Driven Software Engineering in Practice. Morgan Claypool. ISBN: 9781608458820 K. Czarnecki, S. Helsen. Feature-based survey of model transformation approaches. IBM Systems Journal, 45(3):621–646, 2006 F. Durán, J. Troya, A. Vallecillo. Desarrollo de software dirigido por modelos. Universitat Oberta de Catalunya C. Pons, R. Giandini, G. Pérez. Desarrollo de software dirigido por modelos: conceptos teóricos y su aplicación práctica. Universidad Nacional de La Plata. Epílogo… • Identifiquen 2 cosas que se llevan de ésta clase • Para las próximas clases – Miércoles 1 de junio (Lab) :: Metamodelado en EMF + Transformaciones de Modelos en MediniQVT – Lunes 6 de junio (Teo) :: Control de lectura sobre transformaciones M2T
© Copyright 2024