Transformaci - PowerPoint PPT Presentation

1 / 113
About This Presentation
Title:

Transformaci

Description:

Title: Presentaci n de PowerPoint Last modified by: Pau Created Date: 1/1/1601 12:00:00 AM Document presentation format: A4 (210 x 297 mm) Other titles – PowerPoint PPT presentation

Number of Views:42
Avg rating:3.0/5.0
Slides: 114
Provided by: usersDsi3
Category:

less

Transcript and Presenter's Notes

Title: Transformaci


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

2
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

3
Introducción
  • MDD sitúa los modelos en el centro del desarrollo
    de software
  • Necesidad de operaciones para
  • Mezclar A,B ? AB
  • Modificar A?B
  • Relacionar A??B

4
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
5
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

6
Tipos de Transformaciones de Modelos
  • Model Merging
  • Model Modification
  • Model Transformation
  • Model Weaving/Linking
  • Model Marking

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

8
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

9
Ejemplo
  • Eliminación de relaciones de herencia redundantes

10
Ejemplo
  • Aplicación de patrones

11
Model Transformation
  • Un modelo se transforma en otro. El modelo fuente
    se mantiene sin cambios.
  • Modelos separados y metamodelos diferentes.

12
Ejemplo
  • Modelo de proceso de negocio a redes de Petri
    para validación

13
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.

14
Ejemplo
  • Trazabilidad

15
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.

16
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

17
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

18
Herramientas
  • 3GL contra la API del Modelo (JavaEMF/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

19
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

20
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

21
Ejemplo
22
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

23
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

24
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

25
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

26
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.

27
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.

28
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

29
Ejemplo de regla
  • Las Clases marcadas como persistentes, se
    transformarán en Tablas cuyo nombre será el
    nombre de la clase original

30
Ejemplo de regla
  • Metamodelos
  • Origen Diagrama de Clases
  • Destino Modelo Relacional
  • Patrón origen
  • Elementos
  • c Clase
  • Guarda
  • c.persistente
  • Patrón destino
  • Elementos
  • tTabla
  • Inicialización
  • t.nombre ? c.nombre

31
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

32
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

33
ATL Cabecera
  • module module_name
  • create output_models fromrefines 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

34
ATL Librerías
  • uses lib_name
  • Permiten la modularización y reutilización de
    helpers
  • uses string

35
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 helper context Liga!Partido def nombre
    String self.local.nombre ' -
    'self.visitante.nombre

36
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

37
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

38
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.

39
Perspectiva, Editor y Recursos
40
Launch configuration
41
Depurador
42
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

43
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.

44
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

45
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-gtcollect(cc.nbPages).sum()
  • Los contextos se expresan como Metamodelo!Elemento
  • Book!Book La clase Book del metamodelo Book

46
Reglas
  • rule Book2Publication
  • from b Book!Book
  • to out Publication!Publication(
  • title lt- b.title,
  • nbPages lt- b.getSumPages()
  • )

47
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() gt 2)
  • to
  • out Publication!Publication (
  • title lt- b.title,
  • nbPages lt- b.getSumPages()
  • )

48
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) gt 2

49
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()-gtsize().
    toString()
  • El método writeTo(ficheroString) permite
    escribir la cadena a un fichero

50
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

51
Tutorial 2 Liga2Quiniela
  • Liga
  • Equipos
  • Jornadas
  • Partidos
  • Quiniela
  • Quiniela
  • Resultados JugadosPendientes

52
Metamodelos
Quiniela.ecore
Liga.ecore
53
Mappings
54
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

55
ATL al detalle
  • Sistema de tipos
  • Comentarios
  • Expresiones declarativas
  • Helpers
  • Reglas

56
Sistema de tipos
57
OclType
  • Sus instancias son los distintos tipos
  • Operaciones
  • allInstances()
  • Devuelve el conjunto de las instancias de un tipo
  • Book!Chapter.allInstances()
  • allInstancesFrom(metamodelString)
  • Devuelve las instancias contenidas en el modelo
  • Book!Chapter.allInstancesFrom(IN)

58
OclAny
  • Cualquier objeto pertenece a OclAny
  • Operaciones
  • Comparación ltgt
  • 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(toclType)
  • Indica si self es instancia directa del tipo t
  • 3. oclIsTypeOf(Integer)

59
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

60
ATL Module
  • Representa el módulo y solo tiene una instancia
    thisModule
  • Permite definir helpers y atributos globales
  • Operaciones
  • resolveTemp(varoclAny, targetString)
  • Permite determinar que patrón target se aplicará
    a un objeto origen var.
  • Útil cuando no se desea aplicar el patrón por
    defecto

61
Primitive
  • Tipos primitivos
  • Boolean true, false
  • Operadores lógicos and, or, xor, not
  • implies(bBoolean) self ? b
  • Numerical (Integer, Real)
  • Comparación lt, gt, gt, gt
  • 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

62
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(lowerInteger, upperInteger)
  • Conversión toInteger, toReal, toSequence,
    toUpper, toLower
  • Salida
  • writeTo(fileString) escribe la cadena a un
    fichero
  • Las rutas relativas se consideran desde el
    directorio de eclipse
  • println() escribe en la salida estándar

63
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ónelementos
  • Set1,2,3
  • La invocación de operaciones se realiza
    utilizando -gt
  • 'Set1,2,3-gtsize()

64
Collection
  • Operaciones comunes
  • size()
  • includes(xoclAny)
  • Devuelve true si x pertenece a la colección.
  • excludes(xoclAny)
  • Devuelve true si x no pertenece a la colección.
  • count(xoclAny)
  • 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()

65
Sequence
  • union(c Colection)
  • Devuelve una colección con la unión de los
    contenidos
  • flatten()
  • SequenceSet1,2,Set3,4 ? Sequence1,2,3,4
  • append, prepend, insertAt(posInteger)
  • Inserción al final, inicio o posición determinada
  • first(), last(), at(posInteger)
  • Recuperación del primer, último o elemento
    indicado

66
Set
  • union, intersection
  • self (sSet)
  • Set con los elementos de self que no están en s
  • Including(xoclAny), excluding(xoclAny)
  • Devuelven un set con o sin el elemento x
  • symetricDifference(sSet)
  • Devuelve los elementos que están en self o en s
    pero no en ambos

67
Iterar sobre colecciones
  • Facilidades para recorrer colecciones
  • Colección-gtoperació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

68
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

69
Iterar sobre colecciones
  • Para casos más complejos
  • Iterate(iterador variableinicialización
    cuerpo)
  • Ejemplo
  • Set1,2,3-gtiterate(e resInteger0 rese)

70
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. dialt- Lunes
  • Si el nombre del literal coincide con alguna
    palabra reservada, se entrecomillará
  • Ej Integer

71
Tuple
  • Permiten definir valores compuestos
  • Definición
  • TupleType(var_name, var_type,)
  • Ej. TupleType(aMM!Author, titleString)
  • Uso
  • Tuplevar_namevar_typevalue,
  • Ej.TupletitleEl Aleph, authorb

72
Map
  • Define una tabla de mappings clave-valor
  • Definición
  • Map(key_type, value_type)
  • Ej. Map(Integer, MM!Author)
  • Uso
  • Map(key,value),
  • Ej. Map(1,aut1), (2,aut2)

73
Map
  • Operaciones
  • get(key) ? value
  • including(key,val)
  • Nuevo Map, que incluye el valor indicado si no
    contenía la clave key
  • Union(mMap)
  • Nuevo Map, que incluye los elementos de m
  • getKeys, getValues
  • Colección con las claves o los valores

74
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

75
Comentarios
  • Se usa el doble guión
  • Ejemplo --comentario
  • Hasta el final de la línea
  • En la primera línea del fichero, determinan el
    compilador
  • -- _at_atlcompiler atl2006
  • -- _at_atlcompiler atl2004

76
Expresiones declarativas
  • If
  • Permite definir expresiones condicionales
  • if condición then exp1 else exp2 endif
  • No se puede omitir ninguna parte
  • Representa decisiones sobre datos
  • No control de flujo
  • Ej if xgt3 then mayor que 3 else menor o igual
    que 3 endif

77
Expresiones declarativas
  • Let
  • Permite definir variables locales
  • let nombre tipo inicialización in exp
  • let a Integer 1 in a2
  • Se pueden encadenar
  • let aInteger1 inlet bInteger2 inab
  • Facilitan la legibilidad y la depuración

78
Expresiones declarativas
  • Cuidado!!
  • Las expresiones lógicas se evalúan completamente
  • Problema
  • not person.oclIsUndefined() and
    person.namePepe
  • 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.namePepe endif

79
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

80
Helpers
  • Helper
  • helper context context_type def
    helper_name(parameters) return_type exp
  • Attribute
  • helper context context_type def helper_name
    return_type exp

81
Helpers
  • Helper
  • Definición
  • helper context context_type def
    helper_name(parameters) return_type exp
  • helper context Integer def suma(bInteger)Intege
    r selfb
  • Uso 3.suma(2)
  • Attribute
  • Definición
  • Como el helper pero sin parámetros
  • helper context MM!Person def mayor Boolean
    self.agegt18
  • Uso p.mayor

82
Helpers Limitaciones
  • No se puede definir una colección como contexto
  • Problema
  • helper context Set(MM!Person) def
    getYounger(ageInteger) Set(MM!Person)
  • Solución
  • helper def getYpunger(s Set(MM!Person,
    ageInteger)
  • En las librerías no se aceptan attributes
  • Se debe definir toda función como helper

83
Reglas ATL
  • Código imperativo
  • Matched Rules
  • Called Rules

84
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 lt- exp
  • Condición
  • if(condición) sentencias else
    sentencias?
  • Bucles
  • for(iterador in colección) sentencias
  • for(p in persons)

85
Matched Rules
Patrón origen
  • 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

Variables locales
Patrón destino
Bloque imperativo
86
From Patrón Origen
  • Determina los elementos origen sobre los que se
    aplicará la regla
  • Ejemplo
  • from pMM!Person
  • Puede incluir condiciones para afectar solo a un
    subconjunto de elementos
  • from pMM!Person( p.namePepe)

87
Using Variables locales
  • Permite definir variables locales a usar en
  • La propia sección using
  • Secciones to y do
  • Ejemplo
  • from cGeo!Circulousing piReal3.14 areaReal
    pic.radio.square()

88
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

89
Ejemplo Patrón destino Simple
  • from b Book!Book
  • to out Publication!Publication(
  • title lt- b.title,
  • nbPages lt- b.getSumPages()
  • )

90
Inicialización de referencias
  • Podemos inicializar una referencia con
  • Elemento destino creado por la propia regla
  • El elemento generado por defecto por otra regla
  • Elemento no generado por defecto de otra regla

91
Inicialización de referencias
  • Podemos inicializar una referencia con
  • Elemento destino creado por la propia regla
  • from cUML!Classto tablaDB!Table( name lt-
    c.name, primaryKey lt- pk)pkDB!PrimaryKey(
    )

92
Inicialización de referencias
  • Podemos inicializar una referencia con
  • El elemento generado por defecto por otra regla
  • rule model2schemafrom mUML!Modelto
    sDB!Schema( name lt- m.name, tableslt-
    m.classes)

rule class2table from c UML!Class to
tabla DB!Table( name lt- c.name )
93
Inicialización de referencias
  • Podemos inicializar una referencia con
  • Elemento no generado por defecto de otra regla
  • rule model2schemafrom mUML!Modelto
    sDB!Schema( name lt- m.name, tableslt-
    m.classes-gt collect(cthisModuleResolveTemp(c
    ,tabla))

rule class2table from c UML!Class to
o DB!Otro( ), tabla DB!Table( name lt-
c.name)
94
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)Sequencea,b,
    cto tablas distinct DB!Table foreach(e
    in nombres)( name lt- e)

95
Do Bloque Imperativo
  • Las matched rules permiten incluir opcionalmente
    bloques imperativos
  • Ejemplo
  • helper def id Integer0
  • rule class2tablefrom cUML!Classto
    tDB!Table()do thisModule.id lt-
    thisModule.id1 t.id lt-thisModule.id

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

97
Called Rules
  • Reglas que se llaman explicitamente
  • Sintaxis similar a las matched rules
  • No tienen sección from
  • La sección to es opcional
  • Pueden aceptar parámetros
  • Permiten definir un entrypoint
  • Se ejecutará antes de la fase de matching

98
Ejemplo Called Rules
  • helper def schemaDB!SchemaOclUndefined
  • entrypoint rule Schema()
  • to sDB!Schema
  • do
  • thisModule.schemalt-s

99
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

100
Tutorial 3 Library2Mindmap
101
Library
102
Mindmap
103
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

104
Modelo de ejemplo
105
Resultado Esperado
106
Transformación
107
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

108
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
  • -- _at_atlcompiler atl2006
  • No soporta (todavía) el modo de ejecución de
    refinamiento

109
Múltiples patrones origen
  • rule StructuralFeature
  • from
  • s KM3!StructuralFeature,
  • c KM3!Class (
  • c.allStructuralFeatures-gtincludes(s)
  • and not c.isAbstract
  • )
  • to
  • t ATL!Binding (
  • propertyName lt- s.name,
  • )
  • -- ...

110
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
  • -- ...

111
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.

112
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

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/chapter1
    0/
  • 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_Tro
    ubleshooter
Write a Comment
User Comments (0)
About PowerShow.com