Tutorial: Desenvolvimento de Software Baseado em Modelos na Prática com Epsilon, Parte 1

O MDD (Model-Driven Development) pode ser utilizado na prática seguindo o processo de criação e aplicação de uma DSML (Domain Specific Language). Para isso, como foi descrito aqui, primeiramente é necessário satisfazer três requisitos:
Epsilon, ferramenta utilizada para
criação de modelos e geração de código.
  • Sintaxe Abstrata: o metamodelo que descreve conceitos e regras de modelagem da DSML, equivalente a uma gramática das linguagens de programação;
  • Sintaxe Concreta: a notação gráfica da DSML, seus elementos representativos;
  • Semântica: o significado de cada elemento gráfico da DSML.
Após estes requisitos serem atendidos, o gerador de código é implementado e, consequentemente, deve ser possível utilizar modelos executáveis, através de uma ferramenta CASE, produto do MDD, finalizando as etapas.

Nesta publicação irei mostrar como criar a sintaxe abstrata, a sintaxe concreta, e a semântica, utilizando como exemplo um Sistema de Arquivos. A implementação deste exemplo utiliza a Epsilon, uma família de linguagens e ferramentas para geração de código, transformações modelo-modelo, validação de modelo, comparação, migração e refatoramento que funciona com o EMF (Eclipse Modelling Framework) e outros tipos de modelos.
Resultado final da ferramenta criada.

Instalação
Faça o download do Epsilon. Após isso, basta extraí-lo em algum diretório do seu sistema. É preciso ter a JDK instalada no OS para que seja possível executar a Epsilon.

Criando a Sintaxe Abstrata na Epsilon
No menu "File > New > Project..." selecione, em "Eclipse Modeling Framework", "Empty EMF Project". A janela ilustrada na imagem a seguir deve ser exibida, e o nome do projeto deve ser inserido.
Criação do projeto EMF.
Com o projeto criado, é hora de criar o arquivo .emf que irá conter o metamodelo. Para isso, selecione a pasta "model", e com o botão direito crie um novo arquivo Emfatic, "New > Other > 'digite Emfatic' > Emfatic file". Na janela exibida, insira o nome do metamodelo, aqui "filesystem.emf", base da ferramenta CASE ser gerada.
Estrutura do projeto.
Criação do arquivo .emf.
Este arquivo é codificado com a sintaxe da linguagem Emfatic, uma linguagem desenhada para representar modelos EMF Ecore de forma textual. Apenas para fins de esclarecimento, é possível alinhar a linguagem e o arquivo .emf codificado com a sintaxe abstrata da DSML a ser definida. Os elementos Ecore que veremos a seguir podem ser visualizados como a sintaxe concreta desta DSML.

Com o arquivo "filesystem.emf" aberto no Epsilon, adicione o seguinte trecho de código:

@namespace(uri="filesystem", prefix="filesystem")
@gmf
package filesystem;

@gmf.diagram
class Filesystem {
    val Drive[*] drives;
    val Sync[*] syncs;
}

class Drive extends Folder {

}

class Folder extends File {
    @gmf.compartment
    val File[*] contents;
}

class Shortcut extends File {
    @gmf.link(target.decoration="arrow", style="dash")
    ref File target;
}

@gmf.link(source="source", target="target", style="dot", width="2")
class Sync {
    ref File source;
    ref File target;
}

@gmf.node(label = "name")
class File {
    attr String name;
}

Não entrarei em detalhes da sintaxe do Emfatic, mas o código acima apenas define os conceitos do domínio (sistema de arquivos) e como estes conceito estão relacionados. Caso deseje mais informações, acesse a documentação oficial da linguagem.

Com apenas alguns cliques já será possível executar a ferramenta criada e visualizar como é possível criar modelos a partir da Epsilon. Clique com o botão direito no metamodelo que definimos, "filesystem.emf", e selecione "Eugenia > Generate GMF Editor". Após isso, vários arquivos serão criados automaticamente e já será possível executar o editor. Execute uma nova instância Eclipse a partir do menu "Run > Eclipse Application", utilizando "-XX:PermSize=64M -XX:MaxPermSize=128M -Xms512M -Xmx1024M" como argumentos da VM em "Run Configurations".
Configuração de execução do editor.
Na nova instância do Eclipse, basta criar um novo projeto e depois um arquivo de diagrama baseado no "Filesystem" em "New > Other > Examples > Filesystem Diagram".
Arquivo para criação do diagrama de um
sistema de arquivos.
Após a realização destes passos, você deve visualizar uma tela semelhante a que está ilustrada a seguir. Os passos para criar uma versão standalone do editor eu deixarei para o processo de descoberta do leitor. Mas adianto que não é nada difícil.
Editor de modelo para um sistema de arquivos.
Desta forma, a sintaxe abstrata foi criada, e até mesmo uma sintaxe concreta, sem muita semântica, também foi implementada automaticamente pelo gerador do EuGENia. Na parte 2 deste tutorial, você vai ver que, além de definir uma sintaxe concreta a partir de representações gráficas, é possível realizar customizações no editor, restrições à criação dos modelos, e inclusive validações para verificar a consistência de modelos.

Disponibilizei o projeto "filesystem" na minha conta do github para quem quiser fazer checkout (https://github.com/felipealencar/filesystem). Espero que tenham gostado. Até mais.



Felipe Alencar

Felipe Alencar é doutorando em Ciência da Computação na UFPE, professor, desenvolvedor e acredita que só não virou jogador de futebol, surfista ou músico profissional por falta de tempo e talento.

Nenhum comentário:

Postar um comentário