Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information...

113
Transformación de modelos con ATL Pau Giner Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia, Spain

Transcript of Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information...

Page 1: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL

Pau GinerPau Giner

OO-Method Research GroupDepartment of Information Systems and Computation

Technical University of Valencia, Spain

Page 2: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 2/113

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

Page 3: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 3/113

Introducción

MDD sitúa los modelos en el centro del desarrollo de software

Necesidad de operaciones para:Mezclar {A,B} {A+B}Modificar ABRelacionar AB

Page 4: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 4/113

Introducción

Modelo Metamodelo

Motor de Transformación

Reglas de Transformación

Modelo Metamodelo

Generador decódigo

Plantillas de Generación

Código Generado

¿Dónde encajan las transformaciones de modelos?

Page 5: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 5/113

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

Page 6: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 6/113

Tipos de Transformaciones de Modelos

Model Merging Model Modification Model Transformation Model Weaving/Linking Model Marking

Page 7: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 7/113

Model Merging

Varios modelos se mezclan en uno Fácil de implementar Los metamodelos son los mismos Útil en modelado cooperativo

Page 8: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 8/113

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

Page 9: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 9/113

Ejemplo:

Eliminación de relaciones de herencia redundantes

Page 10: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 10/113

Ejemplo:

Aplicación de patrones

Page 11: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 11/113

Model Transformation

Un modelo se transforma en otro. El modelo fuente se mantiene sin cambios.

Modelos separados y metamodelos diferentes.

Page 12: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 12/113

Ejemplo Modelo de proceso de negocio a redes de

Petri para validación

Page 13: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 13/113

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.

Page 14: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 14/113

Ejemplo: Trazabilidad

Page 15: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 15/113

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.

Page 16: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 16/113

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

Page 17: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 17/113

¿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

Page 18: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 18/113

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

Page 19: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 19/113

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

Page 20: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 20/113

Lenguajes para la transformación de modelos

Qué aportan?Primitivas cercanas al dominio (son DSLs)Preservación del grafo de dependenciasCorrespondencia entre modelos origen y destino

Facilidades para consultar los elementos generados por una regla

Son modelos

Page 21: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 21/113

Ejemplo

Page 22: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 22/113

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

Page 23: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 23/113

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

Page 24: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 24/113

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

Page 25: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 25/113

Tipos de fichero ATL

ATL moduleConjunto de reglas de transformación

LibraryConjunto de funciones de ayuda que puede ser

importado Query

Consultas que obtienen un valor simple de un modelo

Page 26: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 26/113

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.

Page 27: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 27/113

Patrón Origen

El patrón origen está formado por:Un conjunto etiquetado de elementos de los

metamodelos origenUna 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.

Page 28: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 28/113

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

Page 29: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 29/113

Ejemplo de regla

“Las Clases marcadas como persistentes, se transformarán en Tablas cuyo nombre será el nombre de la clase original”

Clase

nombrepersistente

Tabla

nombre

Page 30: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 30/113

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

Clase

nombrepersistente

Tabla

nombre

Page 31: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 31/113

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

Page 32: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 32/113

ATL: Un vistazo a la sintaxis

Transformación (ATL module):Cabecera Importación de libreríasHelpers y AttributesReglas

Modos de ejecuciónNormalRefinamiento

Page 33: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 33/113

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

Page 34: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 34/113

ATL: Librerías

uses lib_name;

Permiten la modularización y reutilización de helpersuses string

Page 35: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 35/113

ATL: Helpers

helper [context context_type] def : helper_name(parameters) :

return_type = exp; Permiten extender el metamodelo con funciones y

atributos derivadosSon atributos si no se usan parámetrosLas expresiones se definen en OCLEl contexto es opcional

El modulo ATL es el contexto por defecto Ej: helper context Liga!Partido def: nombre : String =

self.local.nombre +' - '+self.visitante.nombre;

Page 36: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 36/113

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 }]}

Page 37: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 37/113

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

Page 38: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 38/113

ATL y Eclipse

ADT: ATL Development ToolPlugin para permitir el desarrollo de

transformacionesAporta editores, vistas, mecanismos de ejecución

y depuración de transformaciones.

Page 39: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 39/113

Perspectiva, Editor y Recursos

Page 40: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 40/113

Launch configuration

Page 41: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 41/113

Depurador

Page 42: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 42/113

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

Page 43: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 43/113

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.

Page 44: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 44/113

Cabecera

module Book2Publication;

create OUT : Publication from IN : Book;

Los elementos create y from definen los modelos de salida y entrada que se representan mediante las variables OUT e IN

Page 45: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 45/113

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

helper context 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

Page 46: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 46/113

Reglas

rule Book2Publication {from b : Book!Bookto out : Publication!Publication( title <- b.title, nbPages <- b.getSumPages())}

Page 47: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 47/113

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() )}

Page 48: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 48/113

Mensajes de salida

Todo elemento tiene la operación debug queDevolverá 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

Page 49: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 49/113

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

Page 50: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 50/113

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

Page 51: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 51/113

Tutorial 2: Liga2Quiniela

LigaEquiposJornadas

Partidos

QuinielaQuiniela

Resultados [Jugados|Pendientes]

Page 52: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 52/113

Metamodelos

Liga.ecore Quiniela.ecore

Page 53: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 53/113

Mappings

Page 54: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 54/113

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

Page 55: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 55/113

ATL al detalle

Sistema de tipos Comentarios Expresiones declarativas Helpers Reglas

Page 56: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 56/113

Sistema de tipos

Page 57: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 57/113

OclType

Sus instancias son los distintos tipos Operaciones

allInstances() Devuelve el conjunto de las instancias de un tipo

Book!Chapter.allInstances()

allInstancesFrom(metamodel:String) Devuelve las instancias contenidas en el modelo

Book!Chapter.allInstancesFrom(‘IN’)

Page 58: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 58/113

OclAny

Cualquier objeto pertenece a OclAny Operaciones

Comparación: = <> oclIsUndefined

Indica sí self no está definido (análogo al null) oclIsKindOf(t: oclType)

Indica si self es instancia directa o indirecta del tipo t 3.oclIsKindOf(OclAny)

oclIsTypeOf(t:oclType) Indica si self es instancia directa del tipo t

3. oclIsTypeOf(Integer)

Page 59: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 59/113

OclAny

Operaciones toString()

Versión textual del objeto

oclType() Tipo del objeto

asSequence(), asSet(), asBag() Convierte el objeto en secuencia, conjunto y bolsa

refImmediateComposite Obtiene el objeto bajo el cual self está compuesto

Page 60: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 60/113

ATL Module

Representa el módulo y solo tiene una instancia: thisModule

Permite definir helpers y atributos “globales” Operaciones

resolveTemp(var:oclAny, target:String) Permite determinar que patrón target se aplicará a un

objeto origen var. Útil cuando no se desea aplicar el patrón por defecto

Page 61: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 61/113

Primitive

Tipos primitivos Boolean: true, false

Operadores lógicos: and, or, xor, not implies(b:Boolean): self b

Numerical (Integer, Real) Comparación: <, >, =>, >= Operadores: *, +, -, /, div(x), max(x), min(x), abs() Particulares: mod(x) para Integer y floor y round para Real Aritméticas: cos, sin, toDegrees, toRadians, exp, log, sqrt…

String

Page 62: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 62/113

String

Se define usando comillas simples Ej.: ‘ejemplo de cadena de carácteres’ Se indexa comenzando por el 1 Operaciones

size() concat(s: String)

Alternativamente puede usarse el operador + substring(lower:Integer, upper:Integer) Conversión: toInteger, toReal, toSequence, toUpper, toLower Salida

writeTo(file:String): escribe la cadena a un fichero Las rutas relativas se consideran desde el directorio de eclipse

println(): escribe en la salida estándar

Page 63: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 63/113

Collection

Es un tipo abstracto que engloba a los 4 tipos de colecciones: Set: conjunto

Sin duplicados y sin orden OrderedSet

Sin duplicados y con orden Bag

Con duplicados y sin orden Sequence

Con duplicados y con orden Definición: tipo_colección(tipo_elementos)

Set(Integer) Instanciación: tipo_colección{elementos}

Set{1,2,3} La invocación de operaciones se realiza utilizando ‘->’

'Set{1,2,3}->size()

Page 64: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 64/113

Collection

Operaciones comunes size() includes(x:oclAny)

Devuelve true si x pertenece a la colección. excludes(x:oclAny)

Devuelve true si x no pertenece a la colección. count(x:oclAny)

Nº de veces que aparece x en la colección includesAll(c: Collection)

Devuelve true si todos los objetos de c pertenecen a la colección excludesAll(c: Collection)

Devuelve true si ninguno de los objetos de c pertenecen a la colección isEmpty(), notEmpty() sum()

Aplica el operador + a todos los elementos de la colección asBag(), asSequence(), asSet()

Page 65: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 65/113

Sequence

union(c: Colection) Devuelve una colección con la unión de los contenidos

flatten() Sequence{Set{1,2},Set{3,4}} Sequence{1,2,3,4}

append, prepend, insertAt(pos:Integer) Inserción al final, inicio o posición determinada

first(), last(), at(pos:Integer) Recuperación del primer, último o elemento indicado

Page 66: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 66/113

Set

union, intersection self –(s:Set)

Set con los elementos de self que no están en s

Including(x:oclAny), excluding(x:oclAny) Devuelven un set con o sin el elemento x

symetricDifference(s:Set) Devuelve los elementos que están en self o en s pero no

en ambos

Page 67: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 67/113

Iterar sobre colecciones

Facilidades para recorrer colecciones Colección->operación(iteradores| cuerpo)

Operaciones exists

Devuelve true si se cumple el cuerpo para algún elemento forAll

Devuelve true si se cumple el cuerpo para todos los elementos one

Devuelve true si se cumple el cuerpo para un único elemento isUnique

Devuelve true si el cuerpo se evalúa a un valor distinto para cada elemento

Page 68: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 68/113

Iterar sobre colecciones

Operaciones any

Devuelve un elemento que satisface el cuerpo, o el valor OclUndfined collect

Devuelve una colección de elementos resultantes de aplicar el cuerpo a cada uno de los elementos

select Devuelve el conjunto de elementos que satisfacen el cuerpo

reject Devuelve el conjunto de elementos que no satisfacen el cuerpo

sortedBy Devuelve una colección ordenada según el criterio establecido en el

cuerpo

Page 69: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 69/113

Iterar sobre colecciones

Para casos más complejos… Iterate(iterador; variable=inicialización | cuerpo)

EjemploSet{1,2,3}->iterate(e; res:Integer=0 | res+e)

Page 70: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 70/113

Enumeraciones

Para acceder a los literales de una enumeración se utiliza el carácter #El tipo de numeración es inferido por el sistema

Ej.: dia<- #Lunes

Si el nombre del literal coincide con alguna palabra reservada, se entrecomillará

Ej: #”Integer”

Page 71: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 71/113

Tuple

Permiten definir valores compuestos Definición

TupleType(var_name, var_type,…)Ej.: TupleType(a:MM!Author, title:String)

UsoTuple{var_name[:var_type]=value,…}Ej.:Tuple{title=‘El Aleph’, author=b}

Page 72: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 72/113

Map

Define una tabla de mappings clave-valor Definición

Map(key_type, value_type)Ej.: Map(Integer, MM!Author)

UsoMap{(key,value),…}Ej.: Map{(1,aut1), (2,aut2)}

Page 73: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 73/113

Map

Operaciones get(key) value including(key,val)

Nuevo Map, que incluye el valor indicado si no contenía la clave key

Union(m:Map) Nuevo Map, que incluye los elementos de m

getKeys, getValues Colección con las claves o los valores

Page 74: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 74/113

Model Elements

Los elementos definidos en los metamodelos se consideran nuevos tipos de ATL

Los tipos se referencian a partir de su metamodelo Metamodel!class Ej: Library!Author

Navegación por punto Tanto para recorrer atributos como referencias

Ej.: aut1.nombre Test de vacío

oclIsUndefined() para atributos con cardinalidad 0..1 isEmpty() para atributos con cardinalidad *

Page 75: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 75/113

Comentarios

Se usa el doble guiónEjemplo: --comentario

Hasta el final de la línea En la primera línea del fichero, determinan el

compilador-- @atlcompiler atl2006 -- @atlcompiler atl2004

Page 76: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 76/113

Expresiones declarativas

IfPermite definir expresiones condicionales if condición then exp1 else exp2 endif

No se puede omitir ninguna parteRepresenta decisiones sobre datos

No control de flujoEj: if x>3 then ‘mayor que 3’ else ‘menor o igual

que 3’ endif

Page 77: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 77/113

Expresiones declarativas

Let Permite definir variables locales let nombre : tipo = inicialización in exp let a: Integer = 1 in a+2 Se pueden encadenar

let a:Integer=1 inlet b:Integer=2 ina+b

Facilitan la legibilidad y la depuración

Page 78: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 78/113

Expresiones declarativas

Cuidado!! Las expresiones lógicas se evalúan completamente Problema

not person.oclIsUndefined() and person.name=‘Pepe’ El acceso a name se realizará independientemente de que person

esté definida o no. Produciendo el consecuente error en caso de no estarlo

Suele darse en el cuerpo de los iteradores Solución

if person.oclIsUndefined() then false else person.name=‘Pepe’ endif

Page 79: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 79/113

Funciones auxiliares

Permiten factorizar el código Se definen en base a un contexto

Tipo de elementos sobre el que se puede aplicar El contexto por defecto es el módulo

Se invocará el helper a partir de la variable thisModule Puede haber varios helpers con el mismo nombre

En contextos distintos Existen dos tipos

Helpers Aceptan parámetros

Attributes No aceptan parámetros Más eficientes

Page 80: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 80/113

Helpers

Helper helper [context context_type] def : helper_name(parameters) :

return_type = exp; Attribute

helper [context context_type] def : helper_name : return_type = exp;

Page 81: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 81/113

Helpers

Helper Definición

helper [context context_type] def : helper_name(parameters) : return_type = exp;

helper context Integer def: suma(b:Integer):Integer= self*b; Uso: 3.suma(2)

Attribute Definición

Como el helper pero sin parámetros helper context MM!Person def: mayor: Boolean= self.age>=18

Uso: p.mayor

Page 82: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 82/113

Helpers: Limitaciones

No se puede definir una colección como contexto Problema

helper context Set(MM!Person) def: getYounger(age:Integer): Set(MM!Person)…

Solución helper def getYpunger(s: Set(MM!Person, age:Integer)…

En las librerías no se aceptan attributes Se debe definir toda función como helper

Page 83: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 83/113

Reglas ATL

Código imperativo Matched Rules Called Rules

Page 84: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 84/113

Código Imperativo

Se puede especificar código imperativo en Bloques imperativos Reglas (matched o called)

Bloque imperativo Conjunto de sentencias imperativas separadas por ;

Tipo de sentencia Asignación

Target <- exp; Condición

if(condición) { sentencias;} [else {sentencias;}]? Bucles

for(iterador in colección) { sentencias;} for(p in persons){…}

Page 85: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 85/113

Matched Rules

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 }]}

Patrón origen

Variables locales

Patrón destino

Bloque imperativo

Page 86: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 86/113

From: Patrón Origen

Determina los elementos origen sobre los que se aplicará la regla

Ejemplofrom p:MM!Person

Puede incluir condiciones para afectar solo a un subconjunto de elementosfrom p:MM!Person( p.name=‘Pepe’)

Page 87: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 87/113

Using: Variables locales

Permite definir variables locales a usar en La propia sección using Secciones to y do

Ejemplo from c:Geo!Circulo

using{pi:Real=3.14area:Real=pi*c.radio.square()

}

Page 88: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 88/113

To: Patrón destino

La sección to contiene un conjunto de patrones de destino El primero se considerará el patrón por defecto Los patrones se definen

Indicando un elemento de destino Especificando su inicialización

Hay dos tipos de patrones destino Simple

Genera un elemento destino por regla Iterativo

Genera un conjunto de elementos por regla

Page 89: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 89/113

Ejemplo: Patrón destino Simple

from b : Book!Book

to out : Publication!Publication(

title <- b.title,

nbPages <- b.getSumPages()

)

Page 90: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 90/113

Inicialización de referencias

Podemos inicializar una referencia conElemento destino creado por la propia reglaEl elemento generado por defecto por otra reglaElemento no generado por defecto de otra regla

Page 91: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 91/113

Inicialización de referencias

Podemos inicializar una referencia con Elemento destino creado por la propia regla

from c:UML!Classto tabla:DB!Table( name <- c.name, primaryKey <- pk)pk:DB!PrimaryKey(

…)

Page 92: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 92/113

Inicialización de referencias

Podemos inicializar una referencia conEl elemento generado por defecto por otra regla

rule model2schema{from m:UML!Modelto s:DB!Schema( name <- m.name, tables<- m.classes)}

rule class2table{ from c: UML!Class to tabla: DB!Table(

name <- c.name)

}

Page 93: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 93/113

Inicialización de referencias

Podemos inicializar una referencia conElemento no generado por defecto de otra regla

rule model2schema{from m:UML!Modelto s:DB!Schema( name <- m.name, tables<- m.classes-> collect(c|thisModuleResolveTemp(c,’tabla’))}

rule class2table{ from c: UML!Class to o: DB!Otro( … ), tabla: DB!Table(

name <- c.name)}

Page 94: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 94/113

Patrón destino Iterativo

Permite generar un conjunto de elementos destino a partir de un elemento orígen

Definición: distinct tipo foreach(iterador)

Ejemplo using{ nombres: Sequence(String)=Sequence{‘a’,’b’,’c’}}

to tablas: distinct DB!Table foreach(e in nombres)(

name <- e)

Page 95: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 95/113

Do: Bloque Imperativo

Las matched rules permiten incluir opcionalmente bloques imperativos

Ejemplo helper def id: Integer=0;

… rule class2table{

from c:UML!Classto t:DB!Table(…)do{ thisModule.id <- thisModule.id+1; t.id <-thisModule.id; }}

Page 96: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 96/113

Lazy rules

Variante de las matched rules Reglas declarativas que deben ser llamadas

explicitamente En cada llamada generan elementos nuevos

Salvo que se definan como unique lazy rule Ejemplo

Definición lazy rule getTable {

from i: UML!Class to rel: DB!Table ( ) } Llamada:

thisModule.getTable()

Page 97: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 97/113

Called Rules

Reglas que se llaman explicitamente Sintaxis similar a las matched rules

No tienen sección fromLa sección to es opcionalPueden aceptar parámetrosPermiten definir un entrypoint

Se ejecutará antes de la fase de matching

Page 98: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 98/113

Ejemplo: Called Rules

helper def: schema:DB!Schema=OclUndefined

entrypoint rule Schema(){

to s:DB!Schema

do{

thisModule.schema<-s

}

}

Page 99: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 99/113

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

Page 100: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 100/113

Tutorial 3: Library2Mindmap

Page 101: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 101/113

Library

Page 102: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 102/113

Mindmap

Page 103: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 103/113

Transformación

Los Autores y Empleados se presentarán como Topics Los topics de Autor con prioridad 5 Los topics de Empleado con prioridad 0

Habrá relaciones de tipo Dependency entre topics sii El topic origen es un autor y el destino un empleado El empleado está encargado de alguna estantería dónde se encuentra

algún libro del autor Los topics de autores contendrán un Thread por libro

Cada Thread contendrá un ThreadItem con el nombre de la estantería que contiene el libro

Los Topics de Empleados contendrán un Thread por cada estantería de la que se encargan

Page 104: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 104/113

Modelo de ejemplo

Page 105: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 105/113

Resultado Esperado

Page 106: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 106/113

Transformación

Page 107: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 107/113

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

Page 108: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 108/113

ATL Avanzado

ATL 2006 Nuevo compilador (frente a ATL 2004) Introduce diversas mejoras

Múltiples patrones Origen Herencia de reglas

Para usarlo el módulo debe contener en la primera línea el comentario:

-- @atlcompiler atl2006

No soporta (todavía) el modo de ejecución de refinamiento

Page 109: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 109/113

Múltiples patrones origen

rule StructuralFeature {from

s : KM3!StructuralFeature,c : KM3!Class (

c.allStructuralFeatures->includes(s)and not c.isAbstract

)to

t : ATL!Binding (propertyName <- s.name,

)-- ...

}

Page 110: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 110/113

Herencia de reglas

Las reglas hijas deben afectar a un subconjunto de los elementos de la regla padre

abstract rule R1 {-- ...

}rule R2 extends R1 {-- ...

}

Page 111: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 111/113

Problemas comunes (y soluciones!)

Si algún literal o nombre de elemento coincide con alguna palabra reservada, deberá entrecomillarse #”1”, “Map”…

No puede haber dos reglas con el mismo nombre Solo puede haber una regla por elemento del metamodelo origen.

Se pueden definir varios objetivos alternativos, pero para que se ejecuten deberá indicarse explícitamente mediante resolveTemp.

resolveTemp no se puede ejecutar sobre colecciones Hay que usar collect para aplicarlo a los elementos

Cuando hay varios modelos de salida si son del mismo metamodelo no hay forma de determinar en cual de los dos queremos crear elementos ya que solo se indican los elementos a crear de la forma MM!Elemento. Solución: definirlos como si fuesen de metamodelos distintos y en la

configuración indicar que se trata del mismo.

Page 112: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 112/113

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

Page 113: Transformación de modelos con ATL Pau Giner OO-Method Research Group Department of Information Systems and Computation Technical University of Valencia,

Transformación de modelos con ATL 113/113

Referencias

ATL Documentation User Manual, Starter Guide… http://www.eclipse.org/m2m/atl/doc/

Open Model CourseWare http://www.eclipse.org/gmt/omcw/resources/chapter10/

Ejemplos (unos 100) ATL Transformations

http://www.eclipse.org/m2m/atl/atlTransformations/ ATL Use Cases

http://www.eclipse.org/m2m/atl/usecases/ Problemas y soluciones

http://wiki.eclipse.org/index.php/ATL_Language_Troubleshooter