WebMedia 2009 – Minicurso 3 Parte 4: Transformações
TRANSFORMAÇÕES
Parte 4
1
WebMedia 2009 – Minicurso 3 Parte 4: Transformações
Modelos
� Abstrações do mundo real� Sistema e seu ambiente
� Com um propósito específicoSimulação, geração de código� Simulação, geração de código
� No MDD� Quem lê e entende o modelo é o computador
� Uma vez que o computador entenda o modelo...� O que fazer?
2
WebMedia 2009 – Minicurso 3 Parte 4: Transformações
Duas opções principais
Metamodelo MMA
Metamodelo MMB
Modelo A
Modelo B
Modelo A2
Transformação M2M3
WebMedia 2009 – Minicurso 3 Parte 4: Transformações
Exemplos típicos
� Modelo OO� Modelo E-R
� Mapeamento Objeto-Relacional
� Modelo de classes� Modelo de classes� Modelo específico de plataforma
� Modelo EJB
4
WebMedia 2009 – Minicurso 3 Parte 4: Transformações
Duas opções principais
Metamodelo MMA
Java, SQL, XML, HTML ...
Modelo A
Texto
Transformação M2T
5
WebMedia 2009 – Minicurso 3 Parte 4: Transformações
Exemplos típicos
� Modelo E-R� Scripts de definição de dados (CREATE TABLE ...)
� Modelo de classesEstrutura das classes (esqueletos)� Estrutura das classes (esqueletos)
� Atributos, heranças, protótipos dos métodos
6
WebMedia 2009 – Minicurso 3 Parte 4: Transformações
Como implementar
transformações?� Procedural
� Um programa realiza as transformações
� DeclarativaAs transformações são especificadas em uma DSL� As transformações são especificadas em uma DSL
� Um mecanismo interpreta e executa as transformações
7
WebMedia 2009 – Minicurso 3 Parte 4: Transformações
Opções
� Programação (Java, C++, C#)� Procedural� Utilizando API de metamodelagem (EMF, MetaGME)
� XSLT� Declarativa� Para modelos baseados em XML� Para modelos baseados em XML�� LimitadoLimitado pois não há um metamodelo explícito� Opera em nível de XML
� Eclipse ATL� Declarativa, textual, prática
� QVT� Declarativa, padrão OMG, implementações ainda estão surgindo
� xTend (Eclipse Modeling)� Declarativa, concisa, prática, suporte de IDE
8
WebMedia 2009 – Minicurso 3 Parte 4: Transformações
Transformações procedurais
Modelo A Código Modelo BModelo A Código Modelo B
Dificuldades:• Ler arquivo de origem• Escrever arquivo de destino• Manter consistência e formato do arquivo gerado• Lidar com as referências internas
9
WebMedia 2009 – Minicurso 3 Parte 4: Transformações
Transformações procedurais
Metamodelo MMA
API Metamodelagem Metamodelo MMB
Modelo A Código Modelo B
Vantagens:• Leitura / escrita fica por conta da API / Framework• Formato de saída é consistente• Referências são garantidas• É possível realizar transformações na memória
10
WebMedia 2009 – Minicurso 3 Parte 4: Transformações
Transformações declarativas
Metamodelo MMA
Metamodelo MMT
Metamodelo MMB
Modelo A Transformação Modelo B
Vantagens (mesmas DSL):• Alto nível de abstração• Próximo aos metamodelos / problema• Permite análises, otimizações, etc...
11
WebMedia 2009 – Minicurso 3 Parte 4: Transformações
Transformações
� Demonstração – Exemplos 3 e 4
12
WebMedia 2009 – Minicurso 3 Parte 4: Transformações
GERAÇÃO DE CÓDIGO
13
WebMedia 2009 – Minicurso 3 Parte 4: Transformações
14
WebMedia 2009 – Minicurso 3 Parte 4: Transformações
15
WebMedia 2009 – Minicurso 3 Parte 4: Transformações
Geração de códigopublic class GeradorDeCodigo {
public static void main(String args[]) {
System.out.println(“public class CodigoGerado {“);
System.out.println(“ public static void main(String args[]) {“);
for(int i=1;i<=5;i++) {
System.out.println(“ System.out.println(\”“+i+”\”);“);
}
System.out.println(“ } “);
System.out.println(“} “);
}
}}
public class CodigoGerado {
public static void main(String args[]) {
System.out.println(”1”);
System.out.println(”2”);
System.out.println(”3”);
System.out.println(”4”);
System.out.println(”5”);
}
}1
2
3
4
516
WebMedia 2009 – Minicurso 3 Parte 4: Transformações
Geração de código
public class GeradorDeCodigo {
public static void main(String args[]) {
System.out.println(“public class CodigoGerado {“);
System.out.println(“ public static void main(String args[]) {“);
System.out.println(“ System.out.println(\”Código gerado\”);“);
System.out.println(“ } “);
System.out.println(“} “);
}}
}
public class CodigoGerado {
public static void main(String args[]) {
System.out.println(”Código gerado!”);
}
}
Código gerado!
Difícil modificar o código dentro das
aspas
17
WebMedia 2009 – Minicurso 3 Parte 4: Transformações
Geração de código
public class GeradorDeCodigo {
public static void main(String args[]) {
System.out.println(“public class CodigoGerado {“);
System.out.println(“ public static void main(String args[]) {“);
System.out.println(“ System.out.println(\”Código gerado\”);“);
System.out.println(“ } “);
System.out.println(“} “);
}}
}
public class CodigoGerado {
public static void main(String args[]) {
System.out.println(”Código gerado!”);
}
}
Código gerado!
O código final só pode ser visto após a
geração
18
WebMedia 2009 – Minicurso 3 Parte 4: Transformações
Geração de código
public class GeradorDeCodigo {
public static void main(String args[]) {
System.out.println(“public class CodigoGerado {“);
System.out.println(“ public static void main(String args[]) {“);
System.out.println(“ System.out.println(\”Código gerado\”);“);
System.out.println(“ } “);
System.out.println(“} “);
} Consulta ao }
}
public class CodigoGerado {
public static void main(String args[]) {
System.out.println(”Código gerado!”);
}
}
Código gerado!
Consulta ao metamodelo deve ser
feita manualmente
19
WebMedia 2009 – Minicurso 3 Parte 4: Transformações
Abordagem mais utilizada
� Templates
� Estilo JSP, ASP, PHP, etc...
� Inversão:� Ao invés de colocar System.out.println(“ no começo
de cada linha,
� criar um arquivo separado, só com o texto a ser gerado ...
� ... e inserir System.out.println(“ automaticamente
20
WebMedia 2009 – Minicurso 3 Parte 4: Transformações
public class GeradorDeCodigo {
public static void main(String args[]) {
System.out.println(“public class CodigoGerado {“);
System.out.println(“ public static void main(String args[]) {“);
System.out.println(“ System.out.println(\”Código gerado\”);“);
System.out.println(“ } “);
public class CodigoGerado {
public static void main(String args[]) {
System.out.println(”Código gerado!”);
}
}
System.out.println(“ } “);
System.out.println(“} “);
}
}
Código gerado!
public class CodigoGerado {
public static void main(String args[]) {
System.out.println(”Código gerado!”);
}
}
21
WebMedia 2009 – Minicurso 3 Parte 4: Transformaçõespublic class CodigoGerado {
public static void main(String args[]) {
<% for(int i=1;i<=5;i++) { %>
System.out.println(”Código gerado <%=i%>”);
<% } %>
}
}
public class GeradorDeCodigo {
public static void main(String args[]) {
System.out.println(“public class CodigoGerado {“);
System.out.println(“ public static void main(String args[]) {“);
for(int i=1;i<=5;i++) {
System.out.println(“ System.out.println(\”Código gerado “+i+”\”);“);
public class CodigoGerado {
public static void main(String args[]) {
System.out.println(”Código gerado 1”);
System.out.println(”Código gerado 2”);
System.out.println(”Código gerado 3”);
System.out.println(”Código gerado 4”);
System.out.println(”Código gerado 5”);
}
}
System.out.println(“ System.out.println(\”Código gerado “+i+”\”);“);
}
System.out.println(“ } “);
System.out.println(“} “);
}
}
22
WebMedia 2009 – Minicurso 3 Parte 4: Transformações
Templates
� Independente do formato de saída
� Pode-se fazer de tudo!� Desde que seja possível em uma linguagem de
programaçãoprogramação
� Flexibilidade
� Maior legibilidade do código gerado
� Facilidade de manutenção
23
WebMedia 2009 – Minicurso 3 Parte 4: Transformações
Templates
� Diversas possibilidades
� Modularização� Um template para cada metaclasse
Um template para cada arquivo de saída� Um template para cada arquivo de saída
� Agrupar templates
� Dividir um template em vários
24
WebMedia 2009 – Minicurso 3 Parte 4: Transformações
Templates
� Tags / macros
� Vantagens� Código mais “limpo”
Focado no problema� Focado no problema
� Desvantagem� Dependência das funções existentes
25
WebMedia 2009 – Minicurso 3 Parte 4: Transformações
Templates
� Demonstração – Exemplos 5 e 6
26
WebMedia 2009 – Minicurso 3 Parte 4: Transformações
Recapitulando...
Modelo A
Modelo B1
- Nível de abstração+ Detalhes sobre
?
Modelo Bn
TemplatesTemplatesTemplatesTemplates
Código A Código B Código C
+ Detalhes sobre plataforma
+ Complexidade
27
WebMedia 2009 – Minicurso 3 Parte 4: Transformações
Manutenção
Modelo A
Modelo B1
?
Modelo Bn
TemplatesTemplatesTemplatesTemplates
Código A Código B Código C
28
WebMedia 2009 – Minicurso 3 Parte 4: Transformações
Manutenção
Modelo A
Modelo B1
?
Modelo Bn
TemplatesTemplatesTemplatesTemplates
Código A Código B Código C
29
WebMedia 2009 – Minicurso 3 Parte 4: Transformações
Manutenção
Modelo A
Modelo B1
?
Modelo Bn
TemplatesTemplatesTemplatesTemplates
Código A Código B Código C
30
WebMedia 2009 – Minicurso 3 Parte 4: Transformações
Manutenção
Modelo A
Modelo B1
?
Modelo Bn
TemplatesTemplatesTemplatesTemplates
Código A Código B Código C
31
WebMedia 2009 – Minicurso 3 Parte 4: Transformações
Recomendações
� Transformações M2M� Apenas para modularizar/facilitar a geração de
código!
� Customizações/informações adicionais� Customizações/informações adicionais� Arquivos/modelos externos
� Modificar código gerado� Evitar!
� Planejar a integração com código manual
� Padrões de projeto
32
WebMedia 2009 – Minicurso 3 Parte 4: Transformações
Fim da parte 4
� Perguntas?
Sugestões:
33
• Além dos templates, quais outras abordagens existem?• Quais as desvantagens dos templates?• É possível utilizar mais de um metamodelo em um template?• Alguém mais está com fome além de mim?• Quando eu vou começar a entender isso tudo?• O teste de Poincaré identifica esferas no espaço quadridimensional?• As liberdades política e econômica estão intimamente ligadas?• Por que a pobreza aumentou e a expectativa de vida diminuiu na África subsaariana?
Top Related