SlideShare a Scribd company logo
1 of 30
Download to read offline
Jesús Sánchez Cuadrado
Grupo modelum
http://www.modelum.es
Universidad de Murcia




        Lenguajes de Transformación de Modelos




                                            Eclipse Day
                          2 de Diciembre de 2008, Valencia
Transformación de modelos
  Manipulación de un modelo
  Ejemplos
          Relaciones entre lenguajes
             Sincronización de vistas en Eclipse
          Lenguaje de alto nivel a artefactos de bajo nivel
             Desarrollo basado en DSLs
          Refactorizar modelos
             Introducir superclase
          Ingeniería inversa
             Descubrir relaciones entre módulos
          Manipulación en general de un modelo
             El código fuente también es un modelo!


  Utilizamos lenguajes de transformación de modelos

2/12/08                   Jesús Sánchez Cuadrado              2
Transformación de modelos



                               Lenguaje
          MMorigen          Transformación           MMdestino

 <<conforma>>        <<conforma>>             <<conforma>>


           Morigen                                   Mdestino

     transforma                                              genera
                             Definición de
                            transformación




2/12/08              Jesús Sánchez Cuadrado                           3
Transformación de modelos
                                                                                      Metamodelo
                                             Classifier                               Simple UML
                                                            type
            PrimitiveDataType               name: String
                                                            1




             Package                    *         Class                   *
                                                                                 Attribute
           name: String          elems isPersistent: Bool           attrs




                                                          Mapping

                                              Table        0..1      1
            Schema                  *                                            Column
          name: String           tbls name: String                 pkey
                                                                              name: String
                                                                   cols       type: String
                                   refs       *


                                              FKey                                Metamodelo
                                                                                  Simple RDBMS

2/12/08                         Jesús Sánchez Cuadrado                                             4
Lenguajes de transformación
  Restricciones

          self.license   = #FreeSoftware and
          self.metamodel->include('Ecore')


  Selección

          Set { Java/EMF, ATL, QVTr, QVTo,
                Tefkat, Epsilon, Viatra,
                RubyTL }




2/12/08           Jesús Sánchez Cuadrado       5
Características
  Tipo = { Imperativo, Declarativo, Híbrido }
  Usabilidad
          Entorno, instalación, etc.
          Tipado
          Manejo de errores
  Bidireccional o unidireccional
  Mecanismos de modularidad
          Grano fino
          Grano grueso
  Consistencia incremental
  Eficiencia
          Compilación incremental


2/12/08                   Jesús Sánchez Cuadrado   6
EMF + Java
  Usar Java para manipular modelos Ecore
          Aproximación de manipulación directa
  Imperativo
          El modelo se manipula con sentencias Java
          Se puede crear un pequeño framework de soporte
  Unidireccional
  Usabilidad
          Funciona. Eficiente.
          Detalles de bajo nivel. Verboso.
  Mecanismos de modularidad
          Herencia, composición




2/12/08                  Jesús Sánchez Cuadrado            7
EMF + Java

protected void rulePackage2Schema() {                            Recorrer
  for( EObject pkg : allObjectsOf(IN, quot;Packagequot;) ) {
    EObject newSchema = createObject(OUT, quot;Schemaquot;);
    addToResource(OUT, newSchema);                                 Crear

        ruleClass2Table(pkg, newSchema);                         Invocar
    }
}

protected void ruleClass2Table(EObject pkg, EObject schema) {
  List<EStructuralFeature> classifiers = getMulFeature(pkg, quot;classifiersquot;);
  List<EStructuralFeature> tables      = getMulFeature(pkg, quot;tablesquot;);

    for( EObject classifier : classifiers ) {
      EObject newTable = createObject(OUT, quot;Tablequot;);

        if ( isKindOf(classifier, quot;Classquot;) ) {
          setFeature(newTable, quot;namequot;, getFeature(classifier, quot;namequot;));
          tables.add(newTable);
          ...
        }
    }
}

                                    Framework de soporte



2/12/08                   Jesús Sánchez Cuadrado                              8
EMF + Java (Valoración)

  :-)     Siempre funciona

  :-)     Modularidad, reutilización, compilación...


  :-(     Muy verboso

  :-(
          Falta de mecanismos de registro de trazas, evitar
          ciclos, consultas de modelos, etc.




2/12/08             Jesús Sánchez Cuadrado                    9
ATL
  Atlas Transformation Language
          Lenguaje oficial del proyecto Eclipse M2M
          http://www.eclipse.org/m2m/atl/

  Híbrido
          Parte declarativa. Reglas y bindings.
          Parte imperativa. Poco desarrollada.
  Unidireccional. No incremental.
  Modularidad: reglas abstractas, superimposición
  Plugin para Eclipse
          Editor
          Depurador : objeto.debug('salida:')




2/12/08                  Jesús Sánchez Cuadrado       10
ATL

                                                             Origen

rule Class2Table {                                           Destino
  from c : Class!Class
  to out : Relational!Table (
    name <- c.name,                                          Binding
    cols <- Sequence {key}->union(c.attributes),
    key <- Set {key}                                    Recorrido implícito
  ),
  key : Relational!Column (
   name <- 'id',
   type <- Class!DataType.allInstances()->any(e | e.name = 'Integer')
  )
}

rule DataTypeAttribute2Column {                                OCL
  from a : Class!Attribute (
    a.type.oclIsKindOf(Class!DataType)
  )                                                          Filtro
  to out : Relational!Column (
    name <- a.name,
    type <- a.type
  )
}



2/12/08                Jesús Sánchez Cuadrado                                 11
ATL (Valoración)

  :-)     Es el estándar de facto por su simplicidad.

  :-)     Bastante documentación.


  :-(
          Necesidad de muchas consultas con OCL Tuple
          cuando la complejidad crece un poco.
  :-(     Mal reporte de errores




2/12/08             Jesús Sánchez Cuadrado              12
QVT Relational
  Query Views Transformations (OMG)
          Estándar OMG
  Declarativo. Bidireccional.
          Relaciones entre los metamodelos. Patrones.
          Sintaxis gráfica de QVT.
  Usabilidad – depende de la implementación
          Tipado estático. ¿Es suficiente el estándar como guía?
  Ningún mecanismo de modularidad.
  Implementaciones
          MediniQVT. Implementación IKV++
          http://projects.ikv.de/qvt

  Consistencia y compilación incremental

2/12/08                  Jesús Sánchez Cuadrado                    13
QVT Relational
                                                    Variable
top relation PackageToSchema {

    pn : String;

    checkonly domain uml p : UML::Package {          Patrón
      name = pn
    };

    enforce domain rdbms s : Relational::Schema {
      name = pn
    };
}


                     Var. ligada

    Una relación : declaraciones de dominio.
    Un dominio : establece un patrón.
    En la ejecución las relaciones se comprueba, y si
    es necesario se fuerzan.
    La clave está en ligar variables.
2/12/08                 Jesús Sánchez Cuadrado                 14
QVT Relational
relation ClassToTable {
  cn : String;
  prefix : String;

    checkonly domain uml c : UML::Class {
      package = p : UML::Package { },               Navegación
      name = cn
    };                                               implícita

    enforce domain rdbms t : Relational::Table {
      schema = s : Relational::Schema { },
      name = cn,
      columns = cl : Relational::Column {
        name = 'id',
        type = 'NUMBER'
      },
      key = k : Relational::Key {
        column = cl : Relational::Column { }
      }
    };
    when {                       “matching”        Precondición
      PackageToSchema(p, s);
    }
    where {                     “una llamada”      Postcondición
      ClassToPkey(c, k);
      prefix = cn;
      AttributeToColumn(c, t, prefix);                 Parámetro
    }
}

    2/12/08               Jesús Sánchez Cuadrado                   15
QVT Relacional - Valoración

  :-)     Paso de parámetros en where

  :-)     Clausulas en when son consultas de la traza


  :-(
          Abuso del opposite en los patrones, típicamente
          con variables del when
  :-(     ¿Es esto declarativo?
                        relation AttributeToColumn {
                          checkonly domain uml c : UML::Class { };
 Son parámetros...        enforce domain rdbms t : Relational::Table { };

                          primitive domain prefix : String;

                          where {
                            ComplexAttributeToColumn(c, t, prefix);
¿Cuál se ejecuta?           PrimitiveAttributeToColumn(c, t, prefix);
                            SuperAttributeToColumn(c, t, prefix);
                          }}
2/12/08             Jesús Sánchez Cuadrado                              16
Tefkat
  The Engine Formerly Known As Tarzan
          DSTC submission for QVT RFP
          http://tefkat.sourceforge.net/
  Declarativo, basado en
          Reglas
          Patrones (al contrario que QVT, están separados)
  Una transformación satisface las restricciones para
  crear un modelo destino
          Modelo origen: se puede leer
          Modelo destino: se establecen restricciones
          Tracking extent: se puede leer, se pueden establecer
          restricciones.
  Tracking classes permiten establecer relaciones
  nombradas entre el origen y el destino
2/12/08                  Jesús Sánchez Cuadrado                  17
Tefkat
CLASS ClsToTbl {
  Class class;
  Table table;                “traza explícita”             Tracking
};                                                           classes
CLASS AttrToCol {
  Class class;
  Attribute attr;
  Column col;
};

RULE ClassAndTable(C, T)
  FORALL Class C { name: Name; }                           Crear traza
  MAKE   Table T { name: Name; }
  LINKING ClsToTbl WITH class = C, table = T;
                                                           Restricción
RULE MakeColumns                                           sobre patrón
  WHERE ClassHasAttr(Class, Attr, Name, IsKey)
    AND ClsToTbl LINKS class = Class, table = Table        Restricción
  MAKE Column Col FROM col(C, N) {                          sobre traza
         name: Name;
         type: Attr.type.name;
  }
  SET Table.cols = Col,
      IF IsKey = true
      THEN
        SET Table.pkey = Col
      ENDIF
  LINKING AttrToCol WITH class = C, attr = A, col = Col;


2/12/08                Jesús Sánchez Cuadrado                             18
Tefkat
PATTERN   ClassHasAttr(Class, Attr, Name, IsKey)
  WHERE   ClassHasSimpleAttr(Class, Attr, Name, IsKey)     Patrón
     OR   ClassHasIncludedAttr(Class, Attr, Name, IsKey)
     OR   ClassChildHasAttr(Class, Attr, Name, IsKey)
;

PATTERN ClassHasSimpleAttr(Class, Attr, Name, IsKey)
  FORALL Class Class {
           attrs: Attribute Attr {
             type: PrimitiveDataType _PT;
             name: Name;
           };
         }
  WHERE IsKey = Attr.is_primary;




2/12/08                  Jesús Sánchez Cuadrado                     19
Tefkat

  :-)     Tracking classes

  :-)     Patrones separados de reglas


  :-(     Muy poco eficiente

  :-(     Dificil hacerlo funcionar




2/12/08             Jesús Sánchez Cuadrado   20
QVT Operacional
  Query Views Transformations (OMG)
          Estándar OMG
  Imperativo. Unidireccional.
          Llamadas explícitas a reglas.
          Manipulación de la traza: resolve
  Usabilidad – depende de la implementación
          Tipado estático. ¿Es suficiente el estandar como guía?
  Mecanismo de modularidad a nivel de regla.
  Implementaciones
          SmartQVT.
          Proyecto Eclipse M2M.
          Open Canarias



2/12/08                   Jesús Sánchez Cuadrado                   21
QVT Operacional

main() {                                               Punto de
  uml.objectsOfType(Package)->map packageToSchema();
}                                                       entrada

mapping Package::packageToSchema() : Schema
  when { self.name.startingWith <> “_” }                 Filtro
{
  name := self.name;
  table := self.classifiers->map class2table();
}                                                      Llamada a
mapping Class::class2table() : Table                      regla
{
  name := self.name;
  columns := self.attributes->map attr2col();
}




2/12/08                Jesús Sánchez Cuadrado                      22
QVT Operacional

  :-)     Intuitivo en principio

  :-)     Potente para abordar transformaciones complejas


  :-(     Muchas maneras de hacer lo mismo

  :-(     No encuentro implementaciones que funcionen




2/12/08              Jesús Sánchez Cuadrado                 23
Epsilon y Viatra
  Epsilon
          Framework de lenguajes
          http://www.eclipse.org/gmt/epsilon/
          Interacción con el usuario (integración con GMF)
          Utilidad: pequeñas refactorizaciones, scripting


  Viatra
          Basado en grafos
          http://www.eclipse.org/gmt/VIATRA2/




2/12/08                   Jesús Sánchez Cuadrado             24
RubyTL
  RubyTL
          Universidad de Murcia :-)
          http://gts.inf.um.es/age
  DSL embebido en Ruby
          Reutilizamos la infraestructura de Ruby
  Híbrido
          Parte declarativa. Reglas y bindings.
          Parte imperativa. Muy potente. Ej. .map, cadenas, etc.
  Concepto novedoso: phases
  Usabilidad
  Acompañado de otros DSLs
          Validación, generación de código, creación de sintaxis
          concreta, etc.

2/12/08                  Jesús Sánchez Cuadrado                    25
RubyTL

phase 'class2table' do                                           Fase
 top_rule 'class2table' do
   from ClassM::Class                                           Binding
   to    TableM::Table
   mapping do |class, table|
     table.name = class.name
     table.cols = class.attrs
   end
 end

 rule 'property2column' do
   from    ClassM::Attribute
   to      TableM::Column
   filter { |attr| attr.type.is_a? ClassM::PrimitiveType }
   mapping do |attr, column|
     column.name = attr.name
     column.type = attr.type.name

     if attr.is_primary
       column.owner.pkeys << TableM::PKey.new(:col => column)
     end
   end
 end

end                                                       Código Ruby




2/12/08                  Jesús Sánchez Cuadrado                           26
RubyTL

import 'm2m://class2table', :as => 'class2table'                Importar
phase 'fkeys' do
  top_rule 'attribute2fkey' do
    from    ClassM::Attribute
    to      TableM::FKey
    filter { |attribute| attribute.reference? }
    mapping do |attribute, fkey|
      fkey.owner      = trace_query(attribute.owner).one(TableM::Table)
      fkey.references = trace_query(attribute.type).one(TableM::Table)
      fkey.cols       = trace_query(attribute).all(TableM::Column)
    end
  end
end
                                         Consultar
                                              la traza
scheduling do
  execute 'class2table'
  execute 'fkeys'
end


  Constructos: refinement_rule y trace_query
  Resolver dependencias “dificiles”
  Composición de transformaciones independientes

2/12/08                   Jesús Sánchez Cuadrado                           27
RubyTL

  :-)     Muy potente. Usable.

  :-)     Mecanismo de modularidad. Phases.


  :-(     No escala bien con modelos grandes.

  :-(     Hay que instalar Ruby.




2/12/08            Jesús Sánchez Cuadrado       28
Modularidad
           superimposition vs. phases

                                          Sobreescribir
                                              reglas

                                            No permite
                                           herencia de
                                               reglas




      T1   T2             T3             Transformaciones
                                          independientes

                        <<import>>        “Comunicación”
                                          a través de la
           Tm                                  traza


2/12/08         Jesús Sánchez Cuadrado                      29
Valoración personal
  Faltan implementaciones realmente estables
          ± estables : ATL, RubyTL, Epsilon
  Reutilización muy limitada
          Superimposición y phases
  Buenas ideas como tracking classes poco
  desarrolladas
  ¿Es QVT el lenguaje definitivo?
  ¿Ha sido QVT perjudicial para la investigación?




2/12/08                  Jesús Sánchez Cuadrado     30

More Related Content

What's hot (20)

Taller completo
Taller completoTaller completo
Taller completo
 
Java xml
Java xml Java xml
Java xml
 
Scala Overview
Scala OverviewScala Overview
Scala Overview
 
Comandos java
Comandos javaComandos java
Comandos java
 
Semana9b Vbr
Semana9b VbrSemana9b Vbr
Semana9b Vbr
 
Lenguaje de programacion
Lenguaje de programacionLenguaje de programacion
Lenguaje de programacion
 
Scala: un vistazo general
Scala: un vistazo generalScala: un vistazo general
Scala: un vistazo general
 
Unidad 1 introduccion
Unidad 1 introduccionUnidad 1 introduccion
Unidad 1 introduccion
 
C++
C++C++
C++
 
Clases abstractas e interfaces (AlexandraPerez)
Clases abstractas e interfaces (AlexandraPerez)Clases abstractas e interfaces (AlexandraPerez)
Clases abstractas e interfaces (AlexandraPerez)
 
Equivalencias Vb Net Y C
Equivalencias Vb Net Y CEquivalencias Vb Net Y C
Equivalencias Vb Net Y C
 
Programacion en java
Programacion en javaProgramacion en java
Programacion en java
 
Polimorfismo en Java
Polimorfismo en JavaPolimorfismo en Java
Polimorfismo en Java
 
Diseño web clase03
Diseño web clase03Diseño web clase03
Diseño web clase03
 
P1C5 Lenguaje de Expresiones
P1C5 Lenguaje de ExpresionesP1C5 Lenguaje de Expresiones
P1C5 Lenguaje de Expresiones
 
Clase n°1 java
Clase n°1 javaClase n°1 java
Clase n°1 java
 
Fundamentos de programacion en java
Fundamentos de programacion en javaFundamentos de programacion en java
Fundamentos de programacion en java
 
Documento Margarita
Documento MargaritaDocumento Margarita
Documento Margarita
 
Clase iv
Clase ivClase iv
Clase iv
 
2) introduccion al lenguaje java
2) introduccion al lenguaje java2) introduccion al lenguaje java
2) introduccion al lenguaje java
 

Similar to Lenguajes de Transformación

MOSKitt: Transformaciones de modelos en gvMétrica (UML2DB)
MOSKitt: Transformaciones de modelos en gvMétrica (UML2DB)MOSKitt: Transformaciones de modelos en gvMétrica (UML2DB)
MOSKitt: Transformaciones de modelos en gvMétrica (UML2DB)Begoña Bonet
 
7 Stl Y Los Contenedores Basicos
7 Stl Y Los Contenedores Basicos7 Stl Y Los Contenedores Basicos
7 Stl Y Los Contenedores BasicosUVM
 
Framework .NET 3.5 05 Tipo y jerarquía de objetos
Framework .NET 3.5 05 Tipo y jerarquía de objetosFramework .NET 3.5 05 Tipo y jerarquía de objetos
Framework .NET 3.5 05 Tipo y jerarquía de objetosAntonio Palomares Sender
 
Objeto relacional bases datos 2
Objeto relacional bases datos 2Objeto relacional bases datos 2
Objeto relacional bases datos 2Velmuz Buzz
 
Tema 1 2_poo
Tema 1 2_pooTema 1 2_poo
Tema 1 2_poodemon_628
 
Analisis y Diseño de Sistemas II Orientado a objetos
Analisis y Diseño de Sistemas II Orientado a objetosAnalisis y Diseño de Sistemas II Orientado a objetos
Analisis y Diseño de Sistemas II Orientado a objetosGloria Gonzales
 
5 Mecanismos Reuntilizacion Abstraccion Cont
5 Mecanismos Reuntilizacion Abstraccion Cont5 Mecanismos Reuntilizacion Abstraccion Cont
5 Mecanismos Reuntilizacion Abstraccion ContUVM
 
Introducción-a-Microsoft.NET-[parte3]
Introducción-a-Microsoft.NET-[parte3]Introducción-a-Microsoft.NET-[parte3]
Introducción-a-Microsoft.NET-[parte3]Kevin Reaño
 
Ambientedeprogramacinenpascal 111015091809-phpapp02
Ambientedeprogramacinenpascal 111015091809-phpapp02Ambientedeprogramacinenpascal 111015091809-phpapp02
Ambientedeprogramacinenpascal 111015091809-phpapp02kevinwm17
 
Java fundamentos 15 consejos prácticos - ITLA Tech Day 2018
Java fundamentos   15 consejos prácticos - ITLA Tech Day 2018Java fundamentos   15 consejos prácticos - ITLA Tech Day 2018
Java fundamentos 15 consejos prácticos - ITLA Tech Day 2018Eudris Cabrera
 

Similar to Lenguajes de Transformación (20)

Introducción A C# (VersióN Charla)
Introducción A C# (VersióN Charla)Introducción A C# (VersióN Charla)
Introducción A C# (VersióN Charla)
 
MOSKitt: Transformaciones de modelos en gvMétrica (UML2DB)
MOSKitt: Transformaciones de modelos en gvMétrica (UML2DB)MOSKitt: Transformaciones de modelos en gvMétrica (UML2DB)
MOSKitt: Transformaciones de modelos en gvMétrica (UML2DB)
 
7 Stl Y Los Contenedores Basicos
7 Stl Y Los Contenedores Basicos7 Stl Y Los Contenedores Basicos
7 Stl Y Los Contenedores Basicos
 
Framework .NET 3.5 05 Tipo y jerarquía de objetos
Framework .NET 3.5 05 Tipo y jerarquía de objetosFramework .NET 3.5 05 Tipo y jerarquía de objetos
Framework .NET 3.5 05 Tipo y jerarquía de objetos
 
Baño
BañoBaño
Baño
 
Objeto relacional bases datos 2
Objeto relacional bases datos 2Objeto relacional bases datos 2
Objeto relacional bases datos 2
 
Tema 1 2_poo
Tema 1 2_pooTema 1 2_poo
Tema 1 2_poo
 
Tema2
Tema2Tema2
Tema2
 
Analisis y Diseño de Sistemas II Orientado a objetos
Analisis y Diseño de Sistemas II Orientado a objetosAnalisis y Diseño de Sistemas II Orientado a objetos
Analisis y Diseño de Sistemas II Orientado a objetos
 
Tipos de Datos Abstractos (TDA)
Tipos de Datos Abstractos (TDA)Tipos de Datos Abstractos (TDA)
Tipos de Datos Abstractos (TDA)
 
Sql tutor
Sql tutorSql tutor
Sql tutor
 
5 Mecanismos Reuntilizacion Abstraccion Cont
5 Mecanismos Reuntilizacion Abstraccion Cont5 Mecanismos Reuntilizacion Abstraccion Cont
5 Mecanismos Reuntilizacion Abstraccion Cont
 
Introducción-a-Microsoft.NET-[parte3]
Introducción-a-Microsoft.NET-[parte3]Introducción-a-Microsoft.NET-[parte3]
Introducción-a-Microsoft.NET-[parte3]
 
ATL
ATLATL
ATL
 
Ambiente
 Ambiente Ambiente
Ambiente
 
Ambiente de programación en pascal
Ambiente de programación en pascalAmbiente de programación en pascal
Ambiente de programación en pascal
 
Ambiente de programacin en pascal
Ambiente de programacin en pascalAmbiente de programacin en pascal
Ambiente de programacin en pascal
 
Ambiente de programación en pascal
Ambiente de programación en pascalAmbiente de programación en pascal
Ambiente de programación en pascal
 
Ambientedeprogramacinenpascal 111015091809-phpapp02
Ambientedeprogramacinenpascal 111015091809-phpapp02Ambientedeprogramacinenpascal 111015091809-phpapp02
Ambientedeprogramacinenpascal 111015091809-phpapp02
 
Java fundamentos 15 consejos prácticos - ITLA Tech Day 2018
Java fundamentos   15 consejos prácticos - ITLA Tech Day 2018Java fundamentos   15 consejos prácticos - ITLA Tech Day 2018
Java fundamentos 15 consejos prácticos - ITLA Tech Day 2018
 

Recently uploaded

CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudianteAndreaHuertas24
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfJulian Lamprea
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 

Recently uploaded (13)

CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 

Lenguajes de Transformación

  • 1. Jesús Sánchez Cuadrado Grupo modelum http://www.modelum.es Universidad de Murcia Lenguajes de Transformación de Modelos Eclipse Day 2 de Diciembre de 2008, Valencia
  • 2. Transformación de modelos Manipulación de un modelo Ejemplos Relaciones entre lenguajes Sincronización de vistas en Eclipse Lenguaje de alto nivel a artefactos de bajo nivel Desarrollo basado en DSLs Refactorizar modelos Introducir superclase Ingeniería inversa Descubrir relaciones entre módulos Manipulación en general de un modelo El código fuente también es un modelo! Utilizamos lenguajes de transformación de modelos 2/12/08 Jesús Sánchez Cuadrado 2
  • 3. Transformación de modelos Lenguaje MMorigen Transformación MMdestino <<conforma>> <<conforma>> <<conforma>> Morigen Mdestino transforma genera Definición de transformación 2/12/08 Jesús Sánchez Cuadrado 3
  • 4. Transformación de modelos Metamodelo Classifier Simple UML type PrimitiveDataType name: String 1 Package * Class * Attribute name: String elems isPersistent: Bool attrs Mapping Table 0..1 1 Schema * Column name: String tbls name: String pkey name: String cols type: String refs * FKey Metamodelo Simple RDBMS 2/12/08 Jesús Sánchez Cuadrado 4
  • 5. Lenguajes de transformación Restricciones self.license = #FreeSoftware and self.metamodel->include('Ecore') Selección Set { Java/EMF, ATL, QVTr, QVTo, Tefkat, Epsilon, Viatra, RubyTL } 2/12/08 Jesús Sánchez Cuadrado 5
  • 6. Características Tipo = { Imperativo, Declarativo, Híbrido } Usabilidad Entorno, instalación, etc. Tipado Manejo de errores Bidireccional o unidireccional Mecanismos de modularidad Grano fino Grano grueso Consistencia incremental Eficiencia Compilación incremental 2/12/08 Jesús Sánchez Cuadrado 6
  • 7. EMF + Java Usar Java para manipular modelos Ecore Aproximación de manipulación directa Imperativo El modelo se manipula con sentencias Java Se puede crear un pequeño framework de soporte Unidireccional Usabilidad Funciona. Eficiente. Detalles de bajo nivel. Verboso. Mecanismos de modularidad Herencia, composición 2/12/08 Jesús Sánchez Cuadrado 7
  • 8. EMF + Java protected void rulePackage2Schema() { Recorrer for( EObject pkg : allObjectsOf(IN, quot;Packagequot;) ) { EObject newSchema = createObject(OUT, quot;Schemaquot;); addToResource(OUT, newSchema); Crear ruleClass2Table(pkg, newSchema); Invocar } } protected void ruleClass2Table(EObject pkg, EObject schema) { List<EStructuralFeature> classifiers = getMulFeature(pkg, quot;classifiersquot;); List<EStructuralFeature> tables = getMulFeature(pkg, quot;tablesquot;); for( EObject classifier : classifiers ) { EObject newTable = createObject(OUT, quot;Tablequot;); if ( isKindOf(classifier, quot;Classquot;) ) { setFeature(newTable, quot;namequot;, getFeature(classifier, quot;namequot;)); tables.add(newTable); ... } } } Framework de soporte 2/12/08 Jesús Sánchez Cuadrado 8
  • 9. EMF + Java (Valoración) :-) Siempre funciona :-) Modularidad, reutilización, compilación... :-( Muy verboso :-( Falta de mecanismos de registro de trazas, evitar ciclos, consultas de modelos, etc. 2/12/08 Jesús Sánchez Cuadrado 9
  • 10. ATL Atlas Transformation Language Lenguaje oficial del proyecto Eclipse M2M http://www.eclipse.org/m2m/atl/ Híbrido Parte declarativa. Reglas y bindings. Parte imperativa. Poco desarrollada. Unidireccional. No incremental. Modularidad: reglas abstractas, superimposición Plugin para Eclipse Editor Depurador : objeto.debug('salida:') 2/12/08 Jesús Sánchez Cuadrado 10
  • 11. ATL Origen rule Class2Table { Destino from c : Class!Class to out : Relational!Table ( name <- c.name, Binding cols <- Sequence {key}->union(c.attributes), key <- Set {key} Recorrido implícito ), key : Relational!Column ( name <- 'id', type <- Class!DataType.allInstances()->any(e | e.name = 'Integer') ) } rule DataTypeAttribute2Column { OCL from a : Class!Attribute ( a.type.oclIsKindOf(Class!DataType) ) Filtro to out : Relational!Column ( name <- a.name, type <- a.type ) } 2/12/08 Jesús Sánchez Cuadrado 11
  • 12. ATL (Valoración) :-) Es el estándar de facto por su simplicidad. :-) Bastante documentación. :-( Necesidad de muchas consultas con OCL Tuple cuando la complejidad crece un poco. :-( Mal reporte de errores 2/12/08 Jesús Sánchez Cuadrado 12
  • 13. QVT Relational Query Views Transformations (OMG) Estándar OMG Declarativo. Bidireccional. Relaciones entre los metamodelos. Patrones. Sintaxis gráfica de QVT. Usabilidad – depende de la implementación Tipado estático. ¿Es suficiente el estándar como guía? Ningún mecanismo de modularidad. Implementaciones MediniQVT. Implementación IKV++ http://projects.ikv.de/qvt Consistencia y compilación incremental 2/12/08 Jesús Sánchez Cuadrado 13
  • 14. QVT Relational Variable top relation PackageToSchema { pn : String; checkonly domain uml p : UML::Package { Patrón name = pn }; enforce domain rdbms s : Relational::Schema { name = pn }; } Var. ligada Una relación : declaraciones de dominio. Un dominio : establece un patrón. En la ejecución las relaciones se comprueba, y si es necesario se fuerzan. La clave está en ligar variables. 2/12/08 Jesús Sánchez Cuadrado 14
  • 15. QVT Relational relation ClassToTable { cn : String; prefix : String; checkonly domain uml c : UML::Class { package = p : UML::Package { }, Navegación name = cn }; implícita enforce domain rdbms t : Relational::Table { schema = s : Relational::Schema { }, name = cn, columns = cl : Relational::Column { name = 'id', type = 'NUMBER' }, key = k : Relational::Key { column = cl : Relational::Column { } } }; when { “matching” Precondición PackageToSchema(p, s); } where { “una llamada” Postcondición ClassToPkey(c, k); prefix = cn; AttributeToColumn(c, t, prefix); Parámetro } } 2/12/08 Jesús Sánchez Cuadrado 15
  • 16. QVT Relacional - Valoración :-) Paso de parámetros en where :-) Clausulas en when son consultas de la traza :-( Abuso del opposite en los patrones, típicamente con variables del when :-( ¿Es esto declarativo? relation AttributeToColumn { checkonly domain uml c : UML::Class { }; Son parámetros... enforce domain rdbms t : Relational::Table { }; primitive domain prefix : String; where { ComplexAttributeToColumn(c, t, prefix); ¿Cuál se ejecuta? PrimitiveAttributeToColumn(c, t, prefix); SuperAttributeToColumn(c, t, prefix); }} 2/12/08 Jesús Sánchez Cuadrado 16
  • 17. Tefkat The Engine Formerly Known As Tarzan DSTC submission for QVT RFP http://tefkat.sourceforge.net/ Declarativo, basado en Reglas Patrones (al contrario que QVT, están separados) Una transformación satisface las restricciones para crear un modelo destino Modelo origen: se puede leer Modelo destino: se establecen restricciones Tracking extent: se puede leer, se pueden establecer restricciones. Tracking classes permiten establecer relaciones nombradas entre el origen y el destino 2/12/08 Jesús Sánchez Cuadrado 17
  • 18. Tefkat CLASS ClsToTbl { Class class; Table table; “traza explícita” Tracking }; classes CLASS AttrToCol { Class class; Attribute attr; Column col; }; RULE ClassAndTable(C, T) FORALL Class C { name: Name; } Crear traza MAKE Table T { name: Name; } LINKING ClsToTbl WITH class = C, table = T; Restricción RULE MakeColumns sobre patrón WHERE ClassHasAttr(Class, Attr, Name, IsKey) AND ClsToTbl LINKS class = Class, table = Table Restricción MAKE Column Col FROM col(C, N) { sobre traza name: Name; type: Attr.type.name; } SET Table.cols = Col, IF IsKey = true THEN SET Table.pkey = Col ENDIF LINKING AttrToCol WITH class = C, attr = A, col = Col; 2/12/08 Jesús Sánchez Cuadrado 18
  • 19. Tefkat PATTERN ClassHasAttr(Class, Attr, Name, IsKey) WHERE ClassHasSimpleAttr(Class, Attr, Name, IsKey) Patrón OR ClassHasIncludedAttr(Class, Attr, Name, IsKey) OR ClassChildHasAttr(Class, Attr, Name, IsKey) ; PATTERN ClassHasSimpleAttr(Class, Attr, Name, IsKey) FORALL Class Class { attrs: Attribute Attr { type: PrimitiveDataType _PT; name: Name; }; } WHERE IsKey = Attr.is_primary; 2/12/08 Jesús Sánchez Cuadrado 19
  • 20. Tefkat :-) Tracking classes :-) Patrones separados de reglas :-( Muy poco eficiente :-( Dificil hacerlo funcionar 2/12/08 Jesús Sánchez Cuadrado 20
  • 21. QVT Operacional Query Views Transformations (OMG) Estándar OMG Imperativo. Unidireccional. Llamadas explícitas a reglas. Manipulación de la traza: resolve Usabilidad – depende de la implementación Tipado estático. ¿Es suficiente el estandar como guía? Mecanismo de modularidad a nivel de regla. Implementaciones SmartQVT. Proyecto Eclipse M2M. Open Canarias 2/12/08 Jesús Sánchez Cuadrado 21
  • 22. QVT Operacional main() { Punto de uml.objectsOfType(Package)->map packageToSchema(); } entrada mapping Package::packageToSchema() : Schema when { self.name.startingWith <> “_” } Filtro { name := self.name; table := self.classifiers->map class2table(); } Llamada a mapping Class::class2table() : Table regla { name := self.name; columns := self.attributes->map attr2col(); } 2/12/08 Jesús Sánchez Cuadrado 22
  • 23. QVT Operacional :-) Intuitivo en principio :-) Potente para abordar transformaciones complejas :-( Muchas maneras de hacer lo mismo :-( No encuentro implementaciones que funcionen 2/12/08 Jesús Sánchez Cuadrado 23
  • 24. Epsilon y Viatra Epsilon Framework de lenguajes http://www.eclipse.org/gmt/epsilon/ Interacción con el usuario (integración con GMF) Utilidad: pequeñas refactorizaciones, scripting Viatra Basado en grafos http://www.eclipse.org/gmt/VIATRA2/ 2/12/08 Jesús Sánchez Cuadrado 24
  • 25. RubyTL RubyTL Universidad de Murcia :-) http://gts.inf.um.es/age DSL embebido en Ruby Reutilizamos la infraestructura de Ruby Híbrido Parte declarativa. Reglas y bindings. Parte imperativa. Muy potente. Ej. .map, cadenas, etc. Concepto novedoso: phases Usabilidad Acompañado de otros DSLs Validación, generación de código, creación de sintaxis concreta, etc. 2/12/08 Jesús Sánchez Cuadrado 25
  • 26. RubyTL phase 'class2table' do Fase top_rule 'class2table' do from ClassM::Class Binding to TableM::Table mapping do |class, table| table.name = class.name table.cols = class.attrs end end rule 'property2column' do from ClassM::Attribute to TableM::Column filter { |attr| attr.type.is_a? ClassM::PrimitiveType } mapping do |attr, column| column.name = attr.name column.type = attr.type.name if attr.is_primary column.owner.pkeys << TableM::PKey.new(:col => column) end end end end Código Ruby 2/12/08 Jesús Sánchez Cuadrado 26
  • 27. RubyTL import 'm2m://class2table', :as => 'class2table' Importar phase 'fkeys' do top_rule 'attribute2fkey' do from ClassM::Attribute to TableM::FKey filter { |attribute| attribute.reference? } mapping do |attribute, fkey| fkey.owner = trace_query(attribute.owner).one(TableM::Table) fkey.references = trace_query(attribute.type).one(TableM::Table) fkey.cols = trace_query(attribute).all(TableM::Column) end end end Consultar la traza scheduling do execute 'class2table' execute 'fkeys' end Constructos: refinement_rule y trace_query Resolver dependencias “dificiles” Composición de transformaciones independientes 2/12/08 Jesús Sánchez Cuadrado 27
  • 28. RubyTL :-) Muy potente. Usable. :-) Mecanismo de modularidad. Phases. :-( No escala bien con modelos grandes. :-( Hay que instalar Ruby. 2/12/08 Jesús Sánchez Cuadrado 28
  • 29. Modularidad superimposition vs. phases Sobreescribir reglas No permite herencia de reglas T1 T2 T3 Transformaciones independientes <<import>> “Comunicación” a través de la Tm traza 2/12/08 Jesús Sánchez Cuadrado 29
  • 30. Valoración personal Faltan implementaciones realmente estables ± estables : ATL, RubyTL, Epsilon Reutilización muy limitada Superimposición y phases Buenas ideas como tracking classes poco desarrolladas ¿Es QVT el lenguaje definitivo? ¿Ha sido QVT perjudicial para la investigación? 2/12/08 Jesús Sánchez Cuadrado 30