Buscar

Transformacoes de Modelos

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 8 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 8 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

1 
Transformações de Modelos 
Franklin Ramalho 
Universidade Federal de Campina Grande - 
UFCG 
 DDM- UFCG 
2 
Agenda 
• Motivação e Contexto 
• Transformações de Modelos 
• Técnicas de transformações 
– Exemplos 
• Requisitos para uma Linguagem de transformação 
• Linguagens 
– Java 
– Flora 
– XSLT 
– QVT 
– ATL 
Detalhadas na aula de hoje 
Detalhadas nas próximas aulas 
 DDM- UFCG 
3 
Transformações para quê? 
• CIM -> PIM -> PSM; PSM -> Código 
• Código -> PSM; PSM -> PIM; PIM -> PSM 
• CIM-> CIM; PIM -> PIM; PSM -> PSM; Código -> Código 
• Refinamento de modelos 
• Refatoramento de modelos 
• Engenharia reversa 
• Geração de visões 
• Derivação de produtos em uma linha de produtos 
• Geração de código 
• Migração de tecnologias 
• Execução de leis de transformação em geral 
 DDM- UFCG 
4 
Tipos de Modelos 
Modelo de requisitos: 
Define o domínio onde o 
sistema será desenvolvido, 
serviços e entidades 
envolvidas 
Modelo de análise e 
Projeto: define a 
arquitetura do sistema 
Modelo de realização: 
define como o sistema é 
desenvolvido 
Código do sistema 
[Fig. Blanc] 
 DDM- UFCG 
5 
Transformação entre modelos 
PIM 
PSM PSM 
code code 
CIM 
transformação 
transformação 
transformação 
transformação transformação 
transformação 
transformação 
transformação 
transformação 
transformação 
 DDM- UFCG 
6 
MDA - Ciclo de Vida 
requisitos 
análise 
testes 
CIM 
PIM 
código 
PSM 
 
Transformações 
PIM-PSM 
 
TOOL 
 
Transformações 
PSM-código 
 
TOOL 
A 
U 
T 
O 
M 
A 
T 
 I 
C 
A 
 
Processo 
Iterativo 
PIM parcial 
 
Transformações 
CIM-PIM 
 
TOOL 
2 
 DDM- UFCG 
7 
Arquitetura MDA 
Aplicação 
Engenho de 
transformação 
Engenho de 
transformação 
Engenho de 
transformação 
Definições de 
transformação 
Rule 
X{...} 
Definições de 
transformação 
Rule 
X{...} 
Definições de 
transformação 
Rule 
X{...} 
PIM PSM 
Código CIM 
Meta- 
mo delo 
Meta- 
mo delo 
MOF 
 DDM- UFCG 
8 
Transformação entre modelos 
• Grande esforço é empregado nas transformações 
 
• Regra de transformação: descrição de como um ou mais 
elementos do modelo fonte pode ser transformado em 
um ou mais elementos do modelo destino 
 
• Definição de transformação: conjunto de regras que 
juntas descrevem como um modelo fonte é 
transformado em um modelo destino 
 
• Linguagem de transformação: Linguagem na qual as 
definições de transformações são escritas 
 DDM- UFCG 
9 
Transformação entre modelos 
PIM PSM code 
• Podem ocorrer transformações entre linguagens idênticas: 
– Refactoring (modelo ou código) 
– Normalização (modelos E-R) 
Definições de 
 transformação 
Definições de 
 transformação 
Engenho de 
transformação 
Engenho de 
transformação 
[Fig., Kleppe et al.] 
 DDM- UFCG 
10 
Transformação de Modelos 
• Transformação de modelos não são transformações 
semânticas 
 DDM- UFCG 
11 
Transformação entre modelos 
• Técnicas de transformação de modelos: 
– Baseada em programação 
• Transformações de modelos são programas OO 
• Interfaces de manipulação (reflexiva e sob encomenda) 
 
– Baseada em templates 
• Transformações de modelos são templates 
• Escritos em uma linguagem dedicada 
• Parâmetros determinam o modelo destino 
 
– Baseada em modelos 
• Transformações são modelos de transformações 
 DDM- UFCG 
12 
Baseada em programação 
Programa 
Fidelidade 
Programa 
Fidelidade 
EJB 
UML EJB API 
UML 
API 
EJB 
Programa 
Java 
read write 
[Blanc, 2005] 
3 
 DDM- UFCG 
13 
Baseada em templates 
Programa 
Fidelidade 
Programa 
Fidelidade EJB 
UML EJB 
Interpretador 
Template 
UML2EJB
Template 
[Blanc, 2005] 
 DDM- UFCG 
14 
Baseada em modelos 
Programa 
Fidelidade 
Programa 
Fidelidade 
EJB 
UML EJB 
Programa 
 
Modelo ATL 
ATL 
 DDM- UFCG 
15 
Estudo de Caso 
 DDM- UFCG 
16 
Meta-modelo simplificado para UML 
 DDM- UFCG 
17 
Meta-modelo simplificado para 
Esquemas relacionais de BD 
 DDM- UFCG 
18 
UML2BD 
1. Todo pacote UML corresponde a um esquema 
2. Toda classe dentro de um pacote UML corresponde à 
uma tabela do esquema relacional 
3. Toda propriedade de uma classe corresponde à uma 
coluna dentro da tabela 
• Se o tipo da propriedade é uma classe UML, a coluna deve ser 
uma chave estrangeira 
• Se o tipo da propriedade é um tipo de dados UML, a coluna é 
do tipo correspondente 
4. Todo tipo de dados UML dentro de um pacote 
apresenta um tipo de dados correspondente dentro do 
esquema 
4 
 DDM- UFCG 
19 
Transformação baseada em programação 
• Linguagem: Java 
 
• Framework provendo interfaces: EMF 
 
• Necessário: Transformar meta-modelos MOF em Ecore 
 
• Aplicação das regras de geração de interfaces 
 DDM- UFCG 
20 
Interfaces geradas p/ meta-modelo UML 
• UMLPackage – obtido a partir da EClass UMLPackage 
– getElements() 
 
• Classifier – obtido a partir da EClass Classifier 
– getName() 
– setName() 
 
• Class – obtido a partir da EClass Class 
– getProps() 
– getName() 
– setName() 
 DDM- UFCG 
21 
Interfaces geradas p/ meta-modelo UML 
• DataType – obtido a partir da EClass DataType 
– getName() 
– setName() 
 
• Property – obtido a partir da EClass Property 
– getName() 
– setName() 
– getType() 
– setType() 
 
• UMLFactory – obtido a partir da EPackage UML 
– createClass(), createUMLPackage(), createProperty(), 
etc. 
 DDM- UFCG 
22 
Interfaces geradas p/ meta-modelo BD 
• Schema – obtido a partir da EClass Schema 
– getTables() 
 
• Table – obtido a partir da EClass Table 
– getColumns() 
– setColumns() 
 
• Column – obtido a partir da EClass Colums 
– getType() 
– setType() 
– getName() 
– setName() 
 DDM- UFCG 
23 
Interfaces geradas p/ meta-modelo BD 
• Type – obtido a partir da EClass Type 
– getName() 
– setName() 
 
• ForeignKey – obtido a partir da EClass ForeignKey 
– getRefTable() 
– setRefTable() 
 
• BDFactory – obtido a partir da EPackage BD 
– createSchema(), createTable(), createColumn(), etc. 
 DDM- UFCG 
24 
Transformação baseada em programação 
public void UMLPackage2Schema(UMLPackage pc){ 
Schema sh = BDFactoryImpl.eINSTANCE.createSchema(); 
for (Iterator it = pc.getElements().iterator(); it.hasNext();){ 
 Object next = it.next(); 
 if ( next instanceOf uml.Class) { 
 sh.getTables().add(Class2Table((uml.Class) next)); 
 } 
 else if (next instanceOf DataType) { 
 dataType2Type((DataType) next); 
 } 
} 
} 
Mapeando um pacote UML para um esquema relacional 
[Blanc, 2005] 
5 
 DDM- UFCG 
25 
Transformação baseada em programação 
public Table Class2Table(uml.Class c){ 
Table tab = BDFactoryImpl.eINSTANCE.createTable(); 
tab.setName(c.getName());for (Iterator it = c.getProps().iterator(); it.hasNext();){ 
 Property next = (Property) it.next(); 
 tab.getColumns().add(property2Column(next)); 
} 
ClassTable.put(c, tab); 
if (keyRef.containsKey(c)){ 
 Vector keys = (Vector) keyRef.get(c); 
 for (Iterator it = keys.iterator(); it.hasNext();){ 
 ForeignKey current = (ForeignKey) it.next(); 
 current.setRefTable(tab) 
 } 
} 
return tab; 
} 
Mapeando uma classe UML para uma tabela relacional 
[Blanc, 2005] 
 DDM- UFCG 
26 
Transformação baseada em programação 
public Column Property2Column(Property prop){ 
if (prop.getType() instanceOf uml.Class){ 
 ForeignKey key = BDFactoryImpl.eINSTANCE.createForeignKey(); 
 key.setName(prop.getName()); 
 if (ClassTable.containsKey(prop.getType())) { 
 key.setRefTable((Table) classTable.get(prop.getType))) 
 } 
 else{ 
 if (keyRef.containsKey(prop.getType())) 
 ((Vector) keyRef.get(prop.getType())).add(key); 
 else { 
 ((Vector vec = new Vector(); 
 vec.add(key); 
 keyRef.put(prop.getType(), vec); 
 } 
 } 
 return key; 
} 
Mapeando uma propriedade de uma classe UML 
 para uma coluna de uma tabela relacional 
[Blanc, 2005] 
 DDM- UFCG 
27 
Transformação baseada em programação 
else{ //Datatype 
 Column col = BDFactoryImpl.eINSTANCE.createColumn(); 
 col.setName(prop.getName()); 
 if (datatypeType.containsKey(prop.getType())) 
 col.setType((Type) datatypeType.get(prop.getType())); 
 else { 
 if (colType.containsKey(prop.getType())) 
 ((Vector) keyRef.get(prop.getType())).add(col); 
 else{ 
 ((Vector vec = new Vector(); 
 vec.add(col); 
 colType.put(prop.getType(), vec); 
 } 
 } 
 return col; 
} 
} 
Mapeando uma propriedade de uma classe UML 
para uma coluna de uma tabela relacional (cont.) 
 
[Blanc, 2005] 
 DDM- UFCG 
28 
Transformação baseada em programação 
public Type dataType2Type(DataType dt){ 
Type t = BDFactoryImpl.eINSTANCE.createType(); 
t.setName(dt.getName()); 
datatypeType.put(dt, t); 
if (colType.containsKey(dt)){ 
 Vector keys = (Vector) colType.get(dt); 
 for (Iterator it = keys.iterator(); it.hasNext();){ 
 Column current = (Column) it.next(); 
 current.setType(t); 
 } 
} 
return t; 
} 
Mapeando um tipo de dados UML para um tipo de 
dados em um esquema relacional 
[Blanc, 2005] 
 DDM- UFCG 
29 
Transformação baseada em templates 
• Transformações parametrizadas 
 
• Templates são definidos sobre o modelo destino 
 
• Parâmetros são substituídos por informação contida 
nos modelos fonte 
<Name> 
<n:type> 
 DDM- UFCG 
30 
Transformação baseada em templates 
<tables name=“<%clazz.getName()%>”> 
 <%for (Iterator it = clazz.getPropos().iterator(); it.hasNext();){ 
 Property next = (Property) it.next(); %> 
 <columns name = “<%next.getName()%>”> 
 <type name = “<%next.getType().getName()%>”> 
 <columns> 
 <%}%> 
</tables> 
Mapeando uma classe UML para uma tabela relacional 
6 
 DDM- UFCG 
31 
Baseada em modelos 
rule Class2Table { 
 from 
 c : UML!Class 
 to 
 t : DB!Table ( 
 name <- c.name, 
 ) 
} 
 
 DDM- UFCG 
32 
Transformação entre modelos 
• Características desejáveis em uma linguagem de transformação: 
 
– Linguagem de consulta 
– Linguagem para definição de transformações 
– Sintaxe abstrata 
– Sintaxe concreta 
– Ser declarativo 
– Ser imperativo 
– Operar sobre modelos 
 
– Bidirecional 
– Rastreamento 
– Suporte ao reuso e extensão 
– Suporte à transformações transacionais 
– Suporte a dados adicionais 
– Harmonia 
– Consistência incremental 
– Semântica formal 
– Executável 
OMG classifica 
Como obrigatórios 
 DDM- UFCG 
33 
Linguagens de Transformação 
• Baseada em programação 
– Java 
– Flora 
 
• Baseada em templates 
– XSLT 
 
• Baseada em modelos 
– ATL 
– QVT 
 DDM- UFCG 
34 
XSLT 
• XSL foi projetada para definir a formatação e 
apresentação de documentos XML 
 
• Este processo consiste de dois estágios: 
– Transformação Estrutural – os dados são convertidos de uma 
estrutura do documento XML para uma outra estrutura de saída. 
– Formatação – um formato requerido (HTML, PDF, p.e.) é 
aplicado à árvore resultado 
 
• Os estágios de transformação estrutural e de formatação 
foram reconhecidos como independentes, o que fez com 
que XSL fosse dividida em: 
– XSLT (eXtensible Stylesheet Language: Tranformations) – para 
definição das transformações 
– XSL-FO (XSL Formatting Objects) para formatação 
 DDM- UFCG 
35 
XSLT 
 
• XSLT é uma linguagem projetada para transformar um 
documento XML em outro documento XML 
– Transformar um elemento XML 
– Adicionar novos elementos 
– Remover elementos 
– Gerar texto 
 
• XSLT transforma uma árvore origem em uma árvore 
resultado 
 
• Padrão publicado pela W3C 
 DDM- UFCG 
36 
Documento 
Fonte 
XSL 
Processor 
Documento 
Destino 
XSLT 
Stylesheet 
XSLT 
7 
 DDM- UFCG 
37 
XSLT 
• Linguagem declarativa 
– Você descreve a transformação que deseja, ao invés de prover 
uma seqüência de instruções procedimentais 
 
• XSLT é essencialmente uma “ferramenta” para 
transformar documentos XML 
 
• XSLT manipula árvores 
 
 DDM- UFCG 
38 
XSLT 
• Elemento raiz de um documento XSL é <xsl:stylesheet> ou 
<xsl:transform> 
<xsl:stylesheet version=“1.0” 
xmlns:xsl=http://www.w3.org/1999/XSL/Transform> 
<?xml version=“1.0” encoding=ISO-8859-1”?> 
<xsl:stylesheet version=“1.0” xmlns:xsl=http://www.w3.org/1999/XSL/Transform> 
 <xsl:template match=“”> 
 corpo do template 
 </xsl:template> 
 … 
 <xsl:template match=“”> 
 corpo do template 
 </xsl:template> 
</xsl:sylesheet> 
• Documento XSL: Cabeçalho XML + <xsl:stylesheet> ou 
<xsl:transform> + Conjunto de regras de template 
 DDM- UFCG 
39 
XSLT 
• O processo de transformação é baseado em um conjunto 
de regras de template 
– Cada regra é composta de um padrão e uma ação. 
– Cada uma descreve como um elemento deve ser processado 
– Não existe uma ordem pré-definida 
– Não têm que casar a ordem de entrada com a ordem de saída 
– São definidas a partir do elemento <xsl:template>, que possui o 
atributo match para associar o template com um elemento XML. 
 
 <xsl:template match=“title”> 
 ... 
 </xsl:template> 
 <xsl:template match=“/”> 
 ... 
 </xsl:template> 
 
 DDM- UFCG 
40 
XSLT 
• O corpo das regras de template é constituído por: 
– Expressões XPath 
– Elementos XSLT 
– Funções XSLT e XPath 
 
• Manipular partes de um documento 
 
• Fazer a ligação de um documento com o outro 
 
• Duas formas de utilizar um arquivo xsl: 
– Através de uma linha de comando, que referencia os documentos 
envolvidos na transformação (p.e, o xml origem, o html resultado e 
o xslt) 
– Incluindo uma referência no próprio arquivo xml 
 DDM- UFCG 
41 
XSLT - Transformações 
XML 
Documento 1 
XMLS 
Documento 1 
Valido 
XSLT 
Document 
Engenho 
XSLT 
 
XML 
Documento 2 
XMLS 
Documento 2 
Valido 
 DDM- UFCG 
42 
XSLT 
<model xmlns:uml="http://www.eclipse.org/uml2/1.0.0/UML"xmlns:xmi="http://www.omg.org/XMI"> 
 <package id="pck1" name=“library"> 
 <class id="c1" name="Book"> 
 <association aggregationType="composite" id="c1_ass1" name="chapters" 
targetClass="c2"/> 
 <attribute cardinality="1..1" id="c1_atr1" name="title" type="dt1"/> 
 </class> 
 <class id="c2" name="Chapter"> 
 <attribute cardinality="1..1" id="c2_atr1" name="nbPages" type="dt2"/> 
 <attribute cardinality="1..1" id="c2_atr2" name="title" type="dt1"/> 
 <attribute cardinality="1..1" id="c2_atr3" name="author" type="dt1"/> 
 <association aggregationType="none" id="c2_ass1" name="book" 
 targetClass="c1"/> 
 </class> 
 </package> 
</model> 
Source file: book.xmi 
[Teles e Teixeira] 
8 
 DDM- UFCG 
43 
eXtensible Stylesheet Language 
Transformation (XSLT) 
<model xmlns:uml="http://www.eclipse.org/uml2/1.0.0/UML" 
xmlns:xmi="http://www.omg.org/XMI"> 
 <package id="pck1" name=“library"> 
 <class id="c1" name="Publication"> 
 <attribute cardinality="1..1" id="c1_atr1" name="title" type="dt1"/> 
 <attribute cardinality="1..1" id="c1_atr2" name="nbPages" type="dt2"/> 
 <attribute cardinality="1..1" id="c1_atr3" name="authors" type="dt1"/> 
 </class> 
 <datatype id="dt1" name="String"/> 
 <datatype id="dt2" name="Integer"/> 
 </package> 
</model> 
Target file: publication.xmi 
[Teles e Teixeira] 
 DDM- UFCG 
44 
eXtensible Stylesheet Language 
Transformation (XSLT) 
<?xml version="1.0" encoding="UTF-8"?> 
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > 
 <xsl:output method="xml" /> 
 <xsl:template match=“class" > 
 … 
 <xsl:variable name="title" select="@title" /> 
 <xsl:variable name="authors" select="concat(@chapters.author, ',')"/> 
 <xsl:variable name="nbPages" select="sum(@chapters.nbPages)"/> 
 
 <xsl:call-template name="createPublication"> 
 <xsl:with-param name="title" select="$title"/> 
 <xsl:with-param name="authors" select="$authors"/> 
 < xsl:with-param name="nbPages" select="$nbPages"/> 
 </xsl:call-template> 
 </xsl:template> 
</xsl:transform> 
XSLT file: book2Publicartion.xslt 
[Teles e Teixeira] 
 DDM- UFCG 
45 
Linguagens de transformação 
JMI FLORA XSLT QVT ATL 
Concisão X X X 
Linguagens conhecidas X X +- +- 
Eficiência X X ? X 
Executável X X X +- X 
Expressiva X X X X 
Meta-modelo X X X X X 
Semântica Formal X +- +- 
Padrão X X +- 
Conceitos OO/MOF X X X X 
Ferramentas X X X X X 
 DDM- UFCG 
46 
Referências e Bibliografia 
• OMG Specifications. http://www.omg.org 
 
• MDA explained (The model-driven architecture: practice and 
promise). Kleppe, A., Warmer, J. and Bast, W. Object-
Technology Series. Addison-Wesley. 2003. 
 
• MDA en action (Ingénérie logicielle guidée par les modèles). 
Blanc, X. Eyrolles. 2005.

Outros materiais