1.13k likes | 1.42k Views
Transformación de modelos con ATL. Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia, Spain. Agenda. Introducción Lenguajes de transformación de modelos Introducción a ATL ATL y Eclipse Tutorial 1 Tutorial 2
E N D
Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia, Spain
Agenda • Introducción • Lenguajes de transformación de modelos • Introducción a ATL • ATL y Eclipse • Tutorial 1 • Tutorial 2 • ATL al detalle • Tutorial 3 • ATL Avanzado • Referencias Transformación de modelos con ATL
Introducción • MDD sitúa los modelos en el centro del desarrollo de software • Necesidad de operaciones para: • Mezclar {A,B} {A+B} • Modificar AB • Relacionar AB Transformación de modelos con ATL
Modelo Introducción Metamodelo ¿Dónde encajan las transformaciones de modelos? Motor de Transformación Reglas de Transformación Modelo Metamodelo Código Generado Generador de código Plantillas de Generación Transformación de modelos con ATL
Tipos de Transformaciones de Modelos: Criterios • Según metamodelos origen y destino: • Endógenas: el mismo metamodelo • Mejora de la calidad del modelo: optimización, refactorización, simplificación… • Exógenas: distintos metamodelos • Según el cambio de nivel de abstracción: • Síntesis: Alto Bajo • Ingeniería inversa: Bajo Alto • Migración: En el mismo nivel Transformación de modelos con ATL
Tipos de Transformaciones de Modelos Model Merging Model Modification Model Transformation Model Weaving/Linking Model Marking Transformación de modelos con ATL
Model Merging Varios modelos se mezclan en uno Fácil de implementar Los metamodelos son los mismos Útil en modelado cooperativo Transformación de modelos con ATL
Model Modification Los modelos se modifican (en tiempo de ejecución o no) para añadir elementos Mismo metamodelo No suele ser complejo de implementar Transformación de modelos con ATL
Ejemplo: Eliminación de relaciones de herencia redundantes Transformación de modelos con ATL
Ejemplo: • Aplicación de patrones Transformación de modelos con ATL
Model Transformation Un modelo se transforma en otro. El modelo fuente se mantiene sin cambios. Modelos separados y metamodelos diferentes. Transformación de modelos con ATL
Ejemplo • Modelo de proceso de negocio a redes de Petri para validación Transformación de modelos con ATL
Model Weaving/Linking Dos o más modelos se correlacionan Los modelos originales permanecen sin modificaciones Es necesario proporcionar un modelo de weaving un metamodelo que defina los weavings No soportado por la mayoría de herramientas. Transformación de modelos con ATL
Ejemplo: • Trazabilidad Transformación de modelos con ATL
Model Marking A veces se necesita proporcionar información específica del metamodelo destino. Se añaden etiquetas/marcas al modelo fuente. Esto “ensucia” el modelo con conceptos específicos del modelo destino. MDA propone añadir marcas a los modelos, pero lo soportan pocas herramientas. Se recomienda mantener dicha información fuera del modelo (por ejemplo en ficheros XML). El motor de transformaciones ya utilizará dicha información cuando ejecute las transformaciones. Transformación de modelos con ATL
Agenda • Introducción • Lenguajes de transformación de modelos • Introducción a ATL • ATL y Eclipse • Tutorial 1 • Tutorial 2 • ATL al detalle • Tutorial 3 • ATL Avanzado • Referencias Transformación de modelos con ATL
¿Cómo especificar transformaciones? Existen varias dimensiones mediante las cuales podemos distinguir las aproximaciones y lenguajes de transformación M2M: Aproximación Conceptual: Procedural, Funcional, Declarativa/Relacional Sintaxis Concreta: Textual, Gráfica Directionalidad: Unidirectional vs. Bidireccional Transformación de modelos con ATL
Herramientas 3GL contra la API del Modelo (Java+EMF/MDR) Es complicado realizar modificaciones sencillas XSLT Sólo funciona con modelos basados en XML Escalabilidad limitada. No existen operaciones sobre el metamodelo, solamente manipulan XML. ATL: Atlas Transformation Language Textual, usado en la práctica, con depurador QVT: Query/Views/Transformations Estándar de OMG. Las implementaciones están surgiendo lentamente. MTF: Model Transformation Framework Textual, declarativo, soportado por IBM, no es open source oAW xTend, Kermeta Extensiones simples para la creación d emodelos Transformación de modelos con ATL
Alternativas principales • ATL: Atlas Transformation Language • Solución para transformaciones m2m en la comunidad Eclipse • MOF 2.0 QVT: Query/Views/Transformations • Estándar de la OMG • Pocas implementaciones • Solo de parte de la especificación • QVT Operational Mappings • Implementación OpenSource muy reciente • SmartQVT Transformación de modelos con ATL
Lenguajes para la transformación de modelos • Qué aportan? • Primitivas cercanas al dominio (son DSLs) • Preservación del grafo de dependencias • Correspondencia entre modelos origen y destino • Facilidades para consultar los elementos generados por una regla • Son modelos Transformación de modelos con ATL
Ejemplo Transformación de modelos con ATL
Agenda • Introducción • Lenguajes de transformación de modelos • Introducción a ATL • ATL y Eclipse • Tutorial 1 • Tutorial 2 • ATL al detalle • Tutorial 3 • ATL Avanzado • Referencias Transformación de modelos con ATL
ATL Transformación de modelos con ATL • ATL es un subproyecto de Eclipse GMT • Desarrollado por el INRIA en Francia • requiere Eclipse como entorno de ejecución • Independiente del tipo de metamodelo: KM3,EMF, MDR… • Escalibilidad prioritaria • Se ejecuta en su propia máquina virtual • Soporte de la academia y la industria • Usado por Airbus, NASA Jet Propulsion Laboratory, Sodius… • Proporciona herramientas para su uso • Unidireccional • from to
ATL • Diferencias entre modelos origen y destino • Los modelos origen solo se pueden leer • Los modelos destino solo pueden ser escritos • Lenguaje híbrido: Imperativo-Declarativo • Declarativo • Matched rules basadas en pattern-matching • Lenguaje de navegación sin efectos laterales (OCL-like) • Imperativo • Called rules • Action blocks Transformación de modelos con ATL
Tipos de fichero ATL • ATL module • Conjunto de reglas de transformación • Library • Conjunto de funciones de ayuda que puede ser importado • Query • Consultas que obtienen un valor simple de un modelo Transformación de modelos con ATL
ATL: Reglas de transformación • Una regla declarativa especifica: • Un patrón origen que se buscará en los modelos fuente, • Un patrón destino que se creará en el destino por cada regla que haga matching. • Una regla imperativa es un procedimiento: • Se llama explícitamente • Puede tomar argumentos • Puede contener: • Un patrón declarativo, • Un action block (secuencia de sentencias), • Ambos. Transformación de modelos con ATL
Patrón Origen • El patrón origen está formado por: • Un conjunto etiquetado de elementos de los metamodelos origen • Una guarda • Expresión booleana a modo de filtro • Se producirá un matching si se encuentran elementos en los modelos origen que: • Sean de los tipos especificados en el patrón, • Satisfagan la guarda. Transformación de modelos con ATL
Patrón Destino • El patrón destino está compuesto de: • Elementos etiquetados del metamodelo destino • Para cada elemento una inicialización de sus propiedades • Para cada coincidencia se aplica el patrón destino: • Se crean los elementos destino • Se inicializan sus propiedades • Primero, evaluando el valor de las expresiones • Después, asignando dicho valor a la propiedad indicada Transformación de modelos con ATL
Tabla Clase nombre nombre persistente Ejemplo de regla • “Las Clases marcadas como persistentes, se transformarán en Tablas cuyo nombre será el nombre de la clase original” Transformación de modelos con ATL
Tabla Clase nombre nombre persistente Ejemplo de regla • Metamodelos • Origen: Diagrama de Clases • Destino: Modelo Relacional • Patrón origen • Elementos • c: Clase • Guarda • c.persistente • Patrón destino • Elementos • t:Tabla • Inicialización • t.nombre c.nombre Transformación de modelos con ATL
Orden de aplicación de las reglas • Con las reglas declarativas permiten al desarrollador despreocuparse del orden de ejecución: • No se especifica el orden de • Aplicación de reglas • Inicialización de propiedades • Sin embargo, se mantiene el determinismo • La ejecución de una regla no puede cambiar el modelo origen No puede alterar las coincidencias • El modelo destino no es navegable La creación de un elemento no puede afectar el valor de otro Transformación de modelos con ATL
ATL: Un vistazo a la sintaxis • Transformación (ATL module): • Cabecera • Importación de librerías • Helpers y Attributes • Reglas • Modos de ejecución • Normal • Refinamiento Transformación de modelos con ATL
ATL: Cabecera module module_name; create output_models [from|refines] input_models; • Se especifica: • Nombre del modulo • Modelos y Metamodelos implicados • OUT1 : UML, OUT2 : TraceModel… • Tipo de transformación • Modelo nuevo • Refinamiento • En versiones recientes la palabra clave es refining Transformación de modelos con ATL
ATL: Librerías uses lib_name; • Permiten la modularización y reutilización de helpers • uses string Transformación de modelos con ATL
ATL: Helpers helper [context context_type] def : helper_name(parameters) : return_type = exp; • Permiten extender el metamodelo con funciones y atributos derivados • Son atributos si no se usan parámetros • Las expresiones se definen en OCL • El contexto es opcional • El modulo ATL es el contexto por defecto • Ej: helpercontext Liga!Partido def: nombre : String = self.local.nombre +' - '+self.visitante.nombre; Transformación de modelos con ATL
ATL: Reglas rule rule_name { from in_var : in_type [(condition)] [using {var1 : var_type1 = init_exp1; ... varn : var_typen = init_expn;}] to out_var1 : out_type1 ( bindings1 ) ... out_varn : out_typen ( bindingsn ) [do { statements }] } Transformación de modelos con ATL
Agenda • Introducción • Lenguajes de transformación de modelos • Introducción a ATL • ATL y Eclipse • Tutorial 1 • Tutorial 2 • ATL al detalle • Tutorial 3 • ATL Avanzado • Referencias Transformación de modelos con ATL
ATL y Eclipse • ADT: ATL Development Tool • Plugin para permitir el desarrollo de transformaciones • Aporta editores, vistas, mecanismos de ejecución y depuración de transformaciones. Transformación de modelos con ATL
Perspectiva, Editor y Recursos Transformación de modelos con ATL
Launch configuration Transformación de modelos con ATL
Depurador Transformación de modelos con ATL
Agenda • Introducción • Lenguajes de transformación de modelos • Introducción a ATL • ATL y Eclipse • Tutorial 1 • Tutorial 2 • ATL al detalle • Tutorial 3 • ATL Avanzado • Referencias Transformación de modelos con ATL
Tutorial 1 • Metamodelos • Entrada: Book • Salida: Publication • Modelo de entrada: • libro.xmi • Transformación: • Crear para cada Libro una Publicación cuyo atributo nbPages sea la suma de las páginas de los capítulos del libro. Transformación de modelos con ATL
Cabecera moduleBook2Publication; createOUT : PublicationfromIN : Book; • Los elementos create y from definen los modelos de salida y entrada que se representan mediante las variables OUT e IN Transformación de modelos con ATL
Helpers • Definimos un helper getSumPages que nos devuelva el número de páginas de un libro • Sumando las páginas de cada capítulo helpercontext Book!Book def : getSumPages() : Integer = self.chapters->collect(c|c.nbPages).sum(); • Los contextos se expresan como Metamodelo!Elemento • Book!Book: La clase Book del metamodelo Book Transformación de modelos con ATL
Reglas rule Book2Publication { from b : Book!Book to out : Publication!Publication( title <- b.title, nbPages <- b.getSumPages() ) } Transformación de modelos con ATL
Reglas (con Guardas) • Si añadimos el requisito de que solo se transformen los libros con más de dos páginas rule Book2Publication { from b : Book!Book ( b.getSumPages() > 2) to out : Publication!Publication ( title <- b.title, nbPages <- b.getSumPages() ) } Transformación de modelos con ATL
Mensajes de salida • Todo elemento tiene la operación debug que • Devolverá el propio elemento • Por lo que no afectará a la computación • Mostrará un mensaje por la consola • Permitirá obtener mensajes de ayuda para el desarrollador • Ej: b.getSumPages().debug(‘paginas’) > 2 Transformación de modelos con ATL
Extras • Depuración • La perspectiva de depuración permite ejecutar paso a paso las reglas • Queries • Permiten calcular valores primitivos a partir de elementos del modelo. • Ejemplo • query caps = Book!Chapter.allInstances()->size().toString(); • El método writeTo(fichero:String) permite escribir la cadena a un fichero Transformación de modelos con ATL
Agenda • Introducción • Lenguajes de transformación de modelos • Introducción a ATL • ATL y Eclipse • Tutorial 1 • Tutorial 2 • ATL al detalle • Tutorial 3 • ATL Avanzado • Referencias Transformación de modelos con ATL