geração de artefatos de texto utilizando a mda
DESCRIPTION
Mini-curso de geração semi-automática de codificação de artefatos de textos utilizando a Model-Driven Architecture ministrado na I Semana Acadêmica de Sistemas de Informação da Universidade Federal Rural do Rio de Janeiro (UFRRJ).TRANSCRIPT
Geração de Artefatos de Texto Utilizando a
MDA
Carlos Eduardo Pantoja
João Victor Guinelli
1. Introdução a Model-Driven Architecture (MDA)
2. Meta-Modelagem Utilizando o Ecore
3. A Especificação Model-To-Text (M2T)
4. Geração de Artefatos de Textos Usando O Acceleo
5. Desafio
6. Conclusão
7. Referências Bibliográficas
Sumário
1. Model-Driven Architecture (MDA)
A Model Driven Architecture (MDA) é uma arquitetura que permite a criação de
soluções de software utilizando meta-modelos que separam a especificação independente de modelo computacional da implementação em plataformas específicas [Mellor, 2004].
1
• Modelos De Abstrações [OMG 2003]
O Computation Independent Model (CIM) é uma visão independente de computação do sistema, que não mostra a estrutura do sistema e é o modelo de domínio da solução. O Platform Independent Model (PIM) é construído baseado nas operações
do sistema com independência de plataforma de implementação.
O Platform Specific Model (PSM) é um modelo do sistema com o ponto de
vista da plataforma utilizada, que combina as especificações do PIM com como o sistema utiliza as tecnologias da plataforma.
As regras de mapeamento provém especificações necessárias para a transformação do PIM no PSM; e do PSM em artefatos.
2
The MDA Architecture
Figura 1. The MDA Architecture [OMG 2012].
3
Aplicações Usando MDA
Figura 2. A ferramenta GEDBM Tool.
4
• GEDBM Tool [Guinelli et al. 2014]
Aplicações Usando MDA
Figura 3. A ferramenta PDT.
5
• Prometheus Design Tool [Sun et al. 2010]
Aplicações Usando MDA
6
• OMT-G Design [Schaly; Frozza 2010]
Figura 4. A ferramenta OMT-G Design.
Objetivo
Figura 5. O objetivo prático do curso.
7
2. Meta-Modelagem Utilizando o Ecore
O que é um modelo? O que é um Meta-modelo?
8
Meta Object Facility (MOF)
Figura 6. Classes do EMOF [OMG 2010].
9
Arquitetura de Quatro Camadas
Figura 7. Arquitetura de quatro camadas da OMG [OMG 2012].
10
Eclipse Modeling Framework (EMF)
O Eclipse Modeling Framework (EMF) [STEINBERG et al. 2008] é um
framework integrado ao ambiente de desenvolvimento Eclipse,
que gera ferramentas baseadas em modelos estruturados para geração de código.
Os metamodelos são criados usando a ferramenta Ecore, que gera um arquivo XMI com base nas construções do diagrama.
11
Abrindo um novo projeto do EMF no Eclipse
Figura 8. File > New > Other > EMF Project .
12
Adicionando um Ecore Diagram
Figura 9. File > New > Other > Ecore.
13
Criando Modelos Usando o Ecore Diagram
Criação de meta-classes
Criação de herança
Criação de associação
Criação de meta-atributos
Figura 10. Paleta de opções.
14
Criando Modelos Usando o Ecore Diagram
Meta-classes abstratas e interfaces
Figura 11. EClass > Properties.
15
Criando Modelos Usando o Ecore Diagram
Limites inferior e superior
Meta-tipo do atributo
Figura 12. EAttribute > Properties.
16
Criando Modelos Usando o Ecore Diagram
Limites inferior e superior
Criação de composição
Figura 13. EReference > Properties.
17
Criando o meta-modelo
Figura 14. O meta-modelo para banco de dados relacionais.
18
Criando o EMF Generator Model
Figura 15. File > New > Other > EMF Generator Model.
Figura 16. Escolha da pasta e do nome do arquivo.
19
Criando o EMF Generator Model
Figura 17. Seleção do tipo de Meta-modelo.
Figura 18. Seleção do meta-modelo a ser carregado.
20
Criando o EMF Generator Model
Figura 19. Seleção do pacote a ser gerado.
21
Gerando o Editor para o metamodelo
Figura 20. Seleção do pacote a ser gerado.
22
Gerando o Plug-in do Eclipse
Figura 21. Primeiro passo para exportação do plug-in.
23
Gerando o Plug-in do Eclipse
Figura 22. Tela de geração do plug-in.
24
Instalando o Plug-in do Eclipse
Figura 23. Pasta contendo os plugins gerados.
Os plug-ins gerados devem ser copiados e colados na pasta
plugins no local de instalação do eclipse. Após isso o eclipse
deve ser reiniciado.
25
Utilizando o Plug-in Instalado
Figura 24. File > New > Other > Ufrrj Model.
Figura 25. Seleção da pasta e do nome do arquivo.
26
Utilizando o Plug-in Instalado
Figura 26. Seleção do Model Object que servirá de base
para criação da instância do Meta-modelo.
Figura 27. O Editor do meta-modelo.
27
3. A Especificação Model-To-Text (M2T)
O Model-To-Text (M2T) [OMG 2008] é uma especificação da OMG, que
utiliza templates para transformar modelos PSM em representações
linearizadas de textos, como códigos e relatórios.
28
Figura 28. O meta-modelo adaptado do JaCaMo [Pantoja; Choren 2012].
Exemplo: O Meta-Modelo JaCaMo
29
A Sintaxe de Templates M2T
[template] Qualquer Inserção de Caracteres [/template]
• Linguagem e Texto
30
A Sintaxe de Templates M2T
[module AgentToAsl('http://cefet-rj.br/metamodels/jacamo')/] [import files::agent::belief::BeliefToJason/] [template public AgentToAsl(aAgent : Sequence(Agent))] [/template]
• Criação de módulos, templates e importação de outros módulos
31
A Sintaxe de Templates M2T
[file (iAgent.name + '.asl', false, 'UTF-8')] [/file]
• Criação de um artefato de texto
32
A Sintaxe de Templates M2T
[for (iAgent : Agent | aAgent)] //Jason Agent [iAgent.name/] [/for]
• For
33
A Sintaxe de Templates M2T
[template private getJasonMessage(iInternal : InternalAction)] [if (iInternal.isBroadcast = false)] .send([iInternal.to/],[iInternal.force/],[iInternal.message/]) [else] .broadcast([iInternal.force/],[iInternal.message/]) [/if] [/template]
• If/Else
34
A Sintaxe de Templates M2T
[if (iType = ActionType::subGoal)] ! [elseif (iType = ActionType::newGoal)] !! [elseif (iType = ActionType::testGoal)] ? [elseif (iType = ActionType::removeBelief)] - [elseif (iType = ActionType::addBelief)] + [elseif (iType = ActionType::updateBelief)] -+ [/if]
• Elseif
35
A Sintaxe de Templates M2T
[if (iAction.followingSiblings()->isEmpty() = true)] . [else] ; [/if]
• Sintaxe Object Constraint Language (OCL) [OMG 2014]
36
A Sintaxe de Templates M2T
[for (iAgent : Agent | aAgent)] [BeliefToJason(iAgent.believeIn)/] [/for] [module BeliefToJason('http://cefet-rj.br/metamodels/jacamo')/] [template public BeliefToJason(aBelief : OrderedSet(Belief))] [for (iBelief : Belief | aBelief)] [if (iBelief.name <> null)] [iBelief.name/]. [/if] [/for] [/template]
• Chamada de métodos
37
Figura 29. A instância do JaCaMo [Pantoja; Choren 2012].
Exemplo: a instância do meta-modelo
38
Figura 30. O código gerado em Jason [Pantoja; Choren 2012].
Exemplo: a codificação gerada
39
4. Geração de Artefatos de Texto usando o Acceleo
A ferramenta Acceleo utiliza o M2T e foi projetada para permitir a
geração de código e artefatos de textos para o Eclipse.
40
Criando um novo projeto do Acceleo
Figura 31. File > New > Other > Acceleo Project .
41
Criando um novo Template
Figura 32. File > New > Other > Module File .
42
Gerando lançador gráfico para o Acceleo
Figura 33. File > New > Other > Acceleo UI Launcher Project.
Figura 34. Seleção do nome e localização do projeto.
43
Gerando lançador gráfico para o Acceleo
Figura 35. File > New > Other > Acceleo UI Launcher Project.
Figura 36. Seleção do nome das regras de transformação, do arquivo sobre o
qual irão ser aplicadas e a pasta de destino do arquivo gerado.
44
Executando os templates
Figura 37. File > New > Other > Acceleo UI Launcher Project.
45
Abrindo o Artefato de Texto Gerado
Figura 38. Artefato de texto gerado.
46
Gerando o Plug-in de Geração Automática
Figura 39. Primeiro passo para exportação do Plug-in Acceleo.
47
Gerando o Plug-in de Geração Automática
Figura 40. Tela de geração do plug-in.
48
5. Desafio
Dado um Diagrama de Classes da UML com associações básicas, construir um gerador de codificação semi-automática para a linguagem Java. Segue
um exemplo para facilitar o entendimento.
49
Figura 41. A classe Example.
5. Desafio
Figura 42. Um exemplo de código a ser gerado pelo plug-in.
50
6. Conclusão
Este curso apresentou a geração de artefatos de texto utilizando a MDA com o objetivo de se criar geradores semi-automáticos e
automáticos de codificação para diversas linguagens.
Além da geração de codificação através da M2T, também é possível criar
transformações entre meta-modelos usando a especificação Model-To-Model (M2M) [OMG 2011].
É possível a criação de ambientes gráficos que instanciam automaticamente os meta-modelos utilizando o Graphical Modeling
Framework (GMF).
51
7. Referências Bibliográficas
52
Guinelli JV, Rosa AS, Pantoja CE, Choren R. Uma Metodologia Para Apoio ao Projeto de Banco de Dados Geográficos Utilizando a MDA. In: X Simpósio Brasileiro de Sistemas de Informação, 2014, Londrina. Anais do IX Simpósio Brasileiro de Sistemas de Informação, 2014. Mellor SJ, Scott K, Uhl A, Weise D. MDA Destilada: Princípios de Arquitetura Orientada por Modelos. Ciência Moderna, 2005. Obeo. Acceleo: MDA generator – home [updated 2012 May; cited 2014 Oct]. Available from: http://www.acceleo.org/. OMG. MOF model to text transformation language, v 1.0 [updated 2008 May; cited 2014 Oct]. Available from: http://www.omg.org/spec/MOFM2T
53
OMG. Meta object facility (MOF) Query/View/Transfomation specification [updated 2011 May; cited 2014 Oct]. Available from: http://www.omg.org/spec/QVT/ OMG. MDA [updated 2014 May; cited 2014 Oct]. Available from: http://www.omg.org/mda/ OMG. Object Constraint Language (OCL) [updated 2014 May; cited 2014 Oct]. Available from: http://www.omg.org/spec/OCL/ Pantoja CE, Choren R. A MDA Approach for Agent-oriented Development using FAML. In Special Session on Model Driven Development for Information Systems: Techniques, Tools and Methodologies, 2012, Wroclaw. Proceedings of the 14th International Conference on Enterprise Information Systems. v. 2. p. 415-420.
54
Schaly KW, Frozza AA. Uma ferramenta para gerar bancos de dados geográficos a partir de diagramas omt-g. In XI Escola Regional de Banco de Dados; 2010; Santa Catarina, Brasil. Steinberg D, Budinsky F, Merks E, Paternostro M. Emf: Eclipse Modeling Framework. Pearson Education, 2008. Sun H, Thangarajah J, Padgham L. Eclipse-based Prometheus Design Tool. In Proceedings of the 9th International Conference on Autonomous Agents and Multiagent Systems; 2010 May 10-14; Toronto, Canada.