Linguagens de Transformação de Modelos - Presentation Transcript
Universidade Federal do Maranhão
Linguagens de Transformação
de Modelos
Denivaldo LOPES
São Luís – MA
2006
Sumário
Problemática
Motivação
Modelos e Linguagens de Modelagem
MDA - Arquitetura Dirigida por Modelos
Transformação de modelos
MOF RFP Q/V/T
Linguagem ATL
Linguagem YATL
Comparativo entre ATL, YATL e BOTL
Exemplos com ATL
Conclusões
2
Problemática
Os sistemas de software estão cada vez
mais complexos.
Fatores geradores da complexidade:
Novos requisitos e evolução das tecnologias.
Característica distribuída dos novos sistemas.
A evolução e as velhas tecnologias.
Uma mesma versão de sistema de software
para várias plataformas heterogêneas.
3
Problemática
Como assegurar?
Desenvolvimento de software;
Manutenção de software;
Evolução de software.
4
Motivação
No passado, a complexidade no
desenvolvimento, manutenção e
evolução de software foram resolvidos
através da abstração.
Abstração significa considerar somente
os aspectos relevantes para a solução
do problema, desconsiderando-se
detalhes não pertinentes.
Advento de montadores e compiladores.5
Motivação
Compiladores
#?!
Linguagem de alto nível x=y
Compiladores
Mnemônicos MOV A,B
010101 Montadores
Código de Máquina 0110101010
6
Linguagem de
Solução modelagem
presente
Linguagem de
transformação
Modelos
O elo
Motor de transformação perdido?
Linguagem de alto nível x=y
passado
Compilador
Mnemônicos MOV A,B
Montador
Código de Máquina 0110101010 7
Modelos e
Linguagens de Modelagem
Considerações sobre modelo:
Diferentes pontos de vista de um mesmo modelo.
8
Modelos e
Linguagens de Modelagem
O que é um modelo?
Algo que é proposto a imitação de outra.
É uma abstração de um sistema físico que
distingue o que é pertinente do que não é.
Um modelo contém todos os elementos
necessários a representação de um sistema
real.
Uma simplificação de um sistema criado com
um objetivo específico.
9
Modelos e
Linguagens de Modelagem
Considerações sobre modelo:
Um modelo é criado em um contexto com
um objetivo específico.
Um modelo não é uma descrição completa
de um sistema físico, mas permite a
elaboração de raciocínios sobre o sistema em
estudo em um contexto limitado.
Os modelos permitem simular os sistemas
físicos antes de sua construção.
10
Modelos e
Linguagens de Modelagem
Linguagem de modelagem
É uma especificação formal bem definida
que contém os elementos de base para
construir modelos.
UML (Unified Modeling Language)
EDOC (Enterprise Distributed Object
Computing)
UEML (Unified Enterprise Modeling
Language) 11
UML
AirLines
Travel Agency
AirLinesService
CarHire
TravelService RentingCarService
Customer
Hotel
HotelService
Bank
BankService
12
MDA – Arquitetura Dirigida por Modelos
MOF
conformsTo conformsTo
conformsTo
transformation language
conformsTo
source transformation target
metamodel rules metamodel
from to
exec conformsTo
conformsTo
source source transformation target target
model engine model
PIM PSM 15
MDA – Arquitetura Dirigida por Modelos
self-described
Level M0 Level M1 Level M2 Level M3
The MOF MMM
conformsTo conformsTo conformsTo
The UPM MM The UML MM The CWM MM
conformsTo conformsTo
A UML model A UML model
m1 m2
conformsTo conformsTo
A particular Another use of
use of m1 m1
MMM : metametamodel MM : metamodel m : model
16
MDA – Arquitetura Dirigida por Modelos
Linguagem de metamodelagem: MOF
17
MDA – Arquitetura Dirigida por Modelos
Linguagem de metamodelagem: Ecore
18
MDA – Arquitetura Dirigida por Modelos
XMI (XML Metadata Interchange)
<?xml version = '1.0' encoding = 'UTF-8' ?>
<XMI xmi.version = '1.2' xmlns:UML = 'org.omg.xmi.namespace.UML' ***>
<XMI.content>
<UML:Model xmi.id = 'a1' name = 'model 1' ***>
***
<UML:Class xmi.id = 'a4' name = 'Polygon' visibility = 'public'
isSpecification = 'false' isRoot = 'false' isLeaf = 'false'
Polygon isAbstract = 'false' isActive = 'false'>
</UML:Class>
<UML:Class xmi.id = 'a6' name = 'Point' visibility = 'public'
isSpecification = 'false' isRoot = 'false' isLeaf = 'false'
isAbstract = 'false' isActive = 'false'>
***
Contains Point <UML:Classifier.feature>
3..* +x:int <UML:Attribute xmi.id = 'a8' name = 'x' visibility = 'public'
+vertex +y:int isSpecification = 'false' ownerScope = 'instance'>
***
</UML:Attribute>
<UML:Attribute xmi.id = 'a12' name = 'y' visibility = 'public'
isSpecification = 'false' ownerScope = 'instance'>
***
</UML:Attribute>
</UML:Classifier.feature>
</UML:Class>
<UML:Association xmi.id = 'a15' name = 'Contains'
isSpecification = 'false' isRoot = 'false' isLeaf = 'false'
isAbstract = 'false'>
***
</UML:Association>
***
</XMI.content> 19
</XMI>
Uma ferramenta conforme MDA:
CASE versão 2.0
Requisitos de uma ferramenta MDA:
Preserva a lógica do negócio (PIM)
independentemente da plataforma alvo (PSM,
código, ...).
Implementa mapeamentos de MOF para plataformas
(import/export).
Exemplo: JMI (mapeamento de MOF em Java)
Usa MOF/XMI internamente.
Implementa algumas formas de QVT.
Linguagem de transformação.
Segue outros padrões: UML, EDOC, CWM, ... 20
Uma ferramenta conforme MDA:
CASE versão 2.0
Ferramentas existentes:
ATL (ATLAS Transformation Language) is language for
general transformation within the MDA framework.
MIA Model-in-Action is a tool that implements the concepts
of MDA.
OptimalJ is a MDA tool for J2EE.
MTL Model transformation at Inria ModelWare.
AndroMDA is an open source code generation framework
that follows the model driven architecture (MDA) paradigm.
JAMDA (Java Model Driven Architecture) is an open-source
framework for building applications generators which create
Java code from a model of the business domain. 21
RFP MOF QVT
Em 2002, a OMG fez uma chamada para
propostas de uma linguagem de
transformação.
Resultou em várias linguagens de
transformação criadas por universidades
e/ou empresas.
Oito propostas foram submetidas em
resposta ao RFP MOF QVT.
Uma especificação adotada (ptc/05-11-01).
22
Linguagem de transformação
de modelos
Definição:
É uma linguagem que define
operacionalmente a transformação de um
modelo fonte em um modelo alvo.
Uma linguagem de transformação manipula
elementos de modelos, considerando os
metamodelos utilizados na construção dos
mesmos.
23
Linguagem de transformação de modelos
Taxonomia:
mandatory Model Transformation
optional
Directionality
Transformation Rules
Tracing
Rule Application Scoping Rule organization
Source-Target Relationship Rule Scheduling
Rule Application Strategy
Fonte: K. CZARNECKI et S. HELSEN. Classification of Model Transformation
Approaches. Proceedings of the 2nd OOPSLA’03 Workshop on GTCM, 2003. 24
Linguagem de transformação
de modelos
Exemplos de linguagens:
ATL (Atlas Transformation Language)*
YATL (Yet Another Transformation Language)#
BOTL (Basic Object-oriented Transformation Language )§
*Jean BÉZIVIN, Grégoire DUPÉ, Frédéric JOUAULT et al., First Experiments with the ATL Model
Transformation Language: Transforming XSLT into XQuery, Workhop on Generative Techniques
in the context of MDA, 2003.
# Octavian PATRASCOIU. Model Transformations in YATL. Studies and Experiments – Reference Manual
Version 1.0. Rapport technique 3-04, March 2004.
§ Peter BRAUN et Frank MARSCHALL. BOTL The Bidirectional Object Oriented Transformation Language,
TUM-INFO-05-I0307-0/1.-FI. Institut fur Informatik, Technische Universitat Munchen, May 2003.
25
Linguagem ATL
ATL é uma linguagem para a realização de
transformação de modelos em geral no
contexto de MDA.
Linguagem desenvolvida por F. Jouault e J.
Bézivin na Universidade de Nantes - França.
O compilador e o motor de transformação
de modelos para ATL pode ser obtido:
http://www.sciences.univ-nantes.fr/lina/atl/atldemo/
26
Linguagem ATL
Principais características:
Baseada em OCL.
Relacional.
Linguagem híbrida: declarativa e imperativa.
Motor e interpretador escritos em Java.
Modularidade e bibliotecas.
Utiliza repositórios:
MOF -> MDR
Ecore -> EMF
27
Linguagem ATL
Sintaxe abstrata de ATL.
Fonte: *Jean BÉZIVIN, Grégoire DUPÉ, Frédéric JOUAULT et al., First
Experiments with the ATL Model Transformation Language:
Transforming XSLT into XQuery, Workhop on Generative Techniques in 28
the context of MDA, 2003.
Linguagem ATL
Padrões de elementos (Sintaxe abstrata).
Fonte: *Jean BÉZIVIN, Grégoire DUPÉ, Frédéric JOUAULT et al., First
Experiments with the ATL Model Transformation Language:
Transforming XSLT into XQuery, Workhop on Generative Techniques in 29
the context of MDA, 2003.
Linguagem ATL
A parte declarativa de ATL:
As construções declarativas são constituídas
de:
InPattern representada pela palavra-chave form.
outPattern representada pela palavra-chave to.
Um conjunto de ligações (bindings) representadas
pelo símbolo <-.
30
Linguagem ATL
Uma regra de transformação declarativa em ATL
module UML2Java ;
create OUT : Java from IN :UML ;
rule Class2JClass{
from uclass : UML!Class
to
jclass : Java!JClass(
uclass.name <- jclass.name
)
} 31
Linguagem ATL
A parte imperativa de ATL:
Declarações condicionais:
if ... then ... else ... endif à la OCL.
if (condition) {
-- statement 1
}else if (condition 2){
-- statement 2
}else{
-- statement 3
} 32
Linguagem ATL
Declarações condicionais:
switch (expression){
case expression 1:
--statement 1
break;
case expression 2:
--statement 2
break;
default:
--statement 3
break;
} 33
Linguagem ATL
Declarações de loop:
while (condition) {
-- statement
}
do{
–statement
}while(condition);
foreach element in collection{
--statement
}
34
Linguagem ATL
Helpers (funções)
module UML2Java ;
create OUT : Java from IN :UML ;
helper existsAttributes (s:Sequence(UML!Attribute)):
Integer= if s-> size()>0 then 1 else 0 endif;
rule Class2JClass{
from c: UML!Class
to jclass:Java!JClass(
jclass.name <- c.name;
[…] if (existsAttributes(c.getFeature()) then
--statement1
else
--statement 2
endif;
)
} 35
Linguagem YATL
YATL é uma linguagem de
transformação desenvolvida para KMF
(Kent Modelling Framework).
Linguagem desenvolvida por Octavian
PATRASCOIU na Universidade de Kent –
Reino Unido.
36
Linguagem YATL
Principais características:
Baseada em OCL;
Processo de transformação determinístico;
Linguagem híbrida;
Modularidade com namespace;
Compilador e interpretador implementados
em Java.
37
Linguagem YATL
Fonte: # Octavian PATRASCOIU. Model
Transformations in YATL. Studies and
Experiments – Reference Manual Version 38
1.0. Rapport technique 3-04, March 2004.
Linguagem YATL
Parte declarativa: usa expressões OCL.
Parte imperativa:
Declaração de variável:
let varName : oclType = oclExpression ;
Declaração de atribuição:
oclExpression1 := oclExpression2 ;
Instruções de instanciação: new e delete.
varName := new pathname ;
delete oclExpression ;
39
Linguagem YATL
Parte declarativa: usa expressões OCL.
Parte imperativa:
Declaração condicional:
if condition then statement else statement endif
Declaração de loop:
while ...do, do...until et foreach...in ...do
Declaração nativa:
native {
code for the host platform (Java, C#, etc.) }
40
Linguagem ATL
Exemplo de programa em YATL
start kmf::uml2java::main;
namespace kmf(uml, javaModel) {
transformation uml2java {
-- 1-1 Mappings
-- Map a UML class to a Java class
rule umlClass2JavaClass match uml::Foundation::Core::Class () {
let jClass: javaModel::JavaClass;
jClass := new javaModel::JavaClass;
jClass.name := self.name.body_;
track(self, class2class, jClass);
}
41
Comparativo entre ATL, YATL e BOTL
Características ATL YATL BOTL
transformation rule Distinção entre LHS et Distinção entre Distinção entre
RHS LHS e RHS LHS e RHS
- LHS/RHS sintaxe idêntica sintaxe idêntica sintaxe idêntica
Syntatic Separation
- Bidirectionality não explicitamente unidirecional bidirecional
- Source-Target modelos distintos modelos modelos
Relationship distintos distintos
Rule Application Strategy determinista determinista Não
determinista
Rule organization modularidade modularidade nenhuma
Tracing (Traceability) indiretamente sim indiretamente
Directionality unidirecional unidirecional bidirectional
Direct-manipulation não Possibilidade não
com native
Relational sim sim sim
Graph-transformation-based Não Não parcialmente
Structure-based não não não
Hybrid-based Sim sim não, unicamente
declarativa 42
Exemplos com ATL
Transformação de um modelo UML em um modelo
Concept
Processo de Transformação
Metamodelo UML
Modelo UML Conforme à
Transformação modelo-à-modelo
Metamodelo Concept
Modelo Concept Conforme à
Transformação modelo-à-código Gramática EBNF
de Concept
Código Concept Conforme à
43
Exemplos com ATL
Transformação de um modelo UML em um modelo
Concept
Metamodelo UML Metamodelo Concept
Element
+name : String
<<enumeration>>
Vis
+cp_public : int
+cp_private : int
Concept
+visibility : Vis
1 +concept
* +property
Property
+value : String
+type : String
44
Exemplos com ATL
Transformação de um modelo UML em um modelo
Concept
module UML2METACON;
create OUT:METACON from IN:UML;
rule Class2Concept{
from class: UML!Class
to concept: METACON!Concept(
name <- class.name,
visibility <- if class.visibility = #vk_public then #cp_public
else #cp_private endif)
}
rule Attrib2Property{
from attr: UML!Attribute
to prop : METACON!Property(
name <- attr.name,
concept <- attr.owner)
} 45
Exemplos com ATL
Transformação de um modelo UML em um modelo
Concept: PSM
<?xml version = '1.0' encoding = 'ISO-8859-1' ?>
<XMI xmi.version = '1.2' timestamp = 'Tue Feb 10 15:17:53 GMT-03:00
2004'>
<XMI.header>
***
</XMI.header>
<XMI.content>
<METACON.Concept xmi.id = 'a1' name = 'String' visibility = 'cp_public'/>
<METACON.Concept xmi.id = 'a2' name = 'A' visibility = 'cp_public'>
<METACON.Concept.property>
<METACON.Property xmi.id = 'a3' name = 'attr1'/>
</METACON.Concept.property>
</METACON.Concept>
</XMI.content>
</XMI>
46
Exemplos com ATL
Transformação de um modelo UML em um modelo
Concept
query Concept2Code_query = METACON!Concept.allInstances()->
collect(x | x.toString().writeTo('C:/Exemplo/' + x.name.replaceAll('.', '/') +
'/' + x.name + '.cpt'));
uses x_ConceptToCode;
library x_ConceptToCode;
helper context METACON!Concept def: toString() : String =
'public Concept '+ self.name + '{'+ '\\n' +
'\\t property' +
'}';
47
Exemplos com ATL
Transformação de um modelo UML em um modelo
Concept
Modelo UML
<?xml version = '1.0' encoding = 'ISO-8859-1' ?>
<XMI xmi.version = '1.2' timestamp = 'Tue Feb 10 15:17:53 GMT-
03:00 2004'>
Transformação modelo-à-modelo <XMI.header>
***
</XMI.header>
<XMI.content>
<METACON.Concept xmi.id = 'a1' name = 'String' visibility =
'cp_public'/>
Modelo Concept <METACON.Concept xmi.id = 'a2' name = 'A' visibility =
'cp_public'>
<METACON.Concept.property>
<METACON.Property xmi.id = 'a3' name = 'attr1'/>
</METACON.Concept.property>
</METACON.Concept>
Transformação modelo-à-código </XMI.content>
</XMI>
public Concept A{
Código Concept property attr1:String
}
48
Conclusões
As linguagens de transformação estão
ganhando maturidade.
Trabalhar com linguagem de transformação
ainda é uma tarefa de programação.
Uma linguagem padrão irá harmonizar as
diversas vertentes de MDA (ptc/05-11-01).
Advento de ferramentas CASE para gerar
correspondências e definições de
transformação. 49
Referências
Jean BÉZIVIN, Grégoire DUPÉ, Frédéric JOUAULT, Gilles
PITETTE et Jamal Eddine ROUGUI. First Experiments with the
ATL Model Transformation Language: Transforming XSLT into
XQuery. 2nd OOPSLA Workhop on Generative Techniques in the
context of Model Driven Architecture, October 2003.
Peter BRAUN et Frank MARSCHALL. BOTL The Bidirectional
Object Oriented Transformation Language, TUM-INFO-05-I0307-
0/1.-FI. Institut fur Informatik, Technische Universitat Munchen,
May 2003.
Krzysztof CZARNECKI et Simon HELSEN. Classification of Model
Transformation Approaches. proceedings of the 2nd OOPSLA’03
Workshop on Generative Techniques in the Context of MDA,
October 2003.
OMG. MDA Guide Version 1.0.1, Document Number: omg/2003-
06-01. OMG, June 2003.
50
Referências
OMG. XML Metadata Interchange (XMI) Specification, Version
1.2, January 2002.
Octavian PATRASCOIU. Mapping EDOC to Web Services using
YATL. 8th IEEE International Enterprise Distributed Object
Computing Conference (EDOC 2004), pages 286–297,
September 2004.
51
Oportunidades
1 (uma) bolsa de Iniciação Científica:
Área: Engenharia de Software e Sistemas Dist.
Duração: 12 (doze) meses
Valor: 300,00 (trezentos) reais
Iniciação científica sem bolsas.
Área: Engenharia de Software e Serviços Web.
Duração: 12 (doze) meses
Mestrado em Eng. de Software e SD.
Contato: denivaldo.lopes@gmail.com 52
0 comments
Post a comment