• No results found

Del 2 – Sammenfatning

3.3 Design

Esta seção apresenta um resumo das principais tecnologias, incluindo

frameworks e linguagens, utilizadas para aplicação do método no estudo

exploratório realizado nesta dissertação. Desse modo, é apresentada uma visão geral do Eclipse Modeling Framework (EMF), que foi utilizado para especificação dos meta-modelos construídos durante o estudo e a linguagem xText, usada para implementação das gramáticas das DSLs. Além desses, é apresentado o framework para mapeamento de variabilidades entre modelos, FeatureMapper, e a linguagem QVT para especificação de transformações entre modelos.

2.4.1. Eclipse Modeling Framework

O Eclipse Modeling Framework (EMF) é um framework para criação de modelos do Eclipse. Construído em linguagem Java/XML é útil na geração de ferramentas e outras aplicações baseadas em modelos de classe simples (STEINBERG, BUDINSKY, et al., 2008). Uma das vantagens da sua utilização é a rápida validação de modelos em códigos Java, eficiente e facilmente customizáveis. Ele pretende fornecer os benefícios da modelagem formal, porém com um custo de entrada menor. Além da geração de código, EMF provê a capacidade de salvar objetos como documentos XML para estabelecimento de comunicação ou troca de dados com outras ferramentas e aplicações (STEINBERG, BUDINSKY, et al., 2008).

Um modelo é descrito no EMF usando conceitos que estão em um nível mais alto que classes e métodos simples. Para definir um modelo usando estes tipos de partes de modelo, nós precisamos de uma terminologia comum para descrever as partes, um modelo para descrever modelos EMF, chamado de Ecore. O Ecore é o modelo usado para representar modelos em EMF. É o que chamamos de modelo do modelo, ou meta-modelo. Quando instanciamos as classes definidas em Ecore para definir o modelo para nossa aplicação, nós estamos criando o que nós chamamos de modelo core. Um exemplo simplificado de um subconjunto do meta-modelo Ecore é mostrado na Figura 4.

Figura 4. Exemplo simplificado de um subconjunto de elementos do meta-modelo Ecore

Este diagrama apresenta um resumo das partes de Ecore necessárias para criação de um modelo. Para construí-lo utilizamos a ferramenta EMF, framework do Eclipse próprio para criação de modelos. O EMF dispõe de visualizações do modelo em forma de árvore ou em forma de diagrama, ambos definidos na pasta model do projeto.

2.4.2. xText

O xText (http://eclipse.org/xtext) é um framework para desenvolvimento de linguagens textuais baseado no meta-modelo Ecore e implementado sobre o ambiente Eclipse (BETTINI, 2011). Com isso, o xText possibilita a criação de DSLs textuais completas aproveitando os mecanismos e funcionalidades existentes no ambiente de desenvolvimento Eclipse. O xText permite validar modelos especificados com as gramáticas desenvolvidas no seu ambiente a partir da especificação de códigos em linguagem Java. Além disso, é possível representar/extrair ou gerar uma gramática xText a partir de um meta-modelo Ecore.

2.4.3. FeatureMapper

O FeatureMapper (http://featuremapper.org) é uma abordagem ferramental que combina técnicas do desenvolvimento dirigido por modelos com a engenharia de linha de produtos (HEIDENREICH, KOPCSEK e WENDE, 2008). A ferramenta permite representar features no espaço problema usando um modelo features, mapeando as features do FM para soluções de artefatos expressos em linguagem EMF, baseados no meta-modelo Ecore, tal como DSLs construídas no xText. A ferramenta provê ainda visualizações específicas do mapeamento, permitindo realizar transformações a partir de seleções de features que gerem como saída modelos personalizados, conforme seleção das features.

A ferramenta FeatureMapper consiste de múltiplos plug-ins construídos para a plataforma Eclipse que prover uma extensível interface que suporta desde a construção de modelos de features específicos até a derivação de modelos a partir de uma configuração de features.

2.4.4. Linguagem de transformação de modelos: QVT

Transformações de modelo para modelo (M2M) é um dos principais alicerces do desenvolvimento dirigido por modelos (model-driven development – MDD). A especificação QVT faz parte de um subprojeto da comunidade Eclipse que dispõe de soluções para transformações entre modelos. As iniciais QVT derivam do conjunto de ações que fundamentam a sua atuação: Query, View e Transformation (OMG, 2011). A especificação QVT tem uma natureza híbrida declarativo-imperativa, com a parte declarativa (QVTd) sendo dividida em uma arquitetura de dois níveis, que funcionam como base para a semântica de execução da parte imperativa. A função da QVTd é prover a parte estrutural, uma IDE baseada no Eclipse para as linguagens Core QVT (QVTc) e Relational QVT (QVTr). A Figura 5 mostra os relacionamentos entre elementos da linguagem QVT.

Além das relações declarativas e linguagens de núcleo, existem dois mecanismos que trabalham com implementações imperativas de transformações de relações ou núcleo: uma língua padrão para mapeamentos operacional (Operational

QVT – QVTo) e uma não padrão, chamada de caixa-preta, onde se pode plugar

outras implementações (OMG, 2011). A QVTo contém instruções detalhadas de execução, ao contrário da QVTr que omite estes passos explícitos e conta com a correspondência entre os elementos individuais da entrada e saída de domínio (OMG, 2011). Consequentemente, códigos QVTo requerem um algoritmo completo, ou seja, como produzir um modelo de saída a partir do modelo de entrada inteiro, enquanto o QVTr contém rotinas para elemento para elemento de mapeamento.

A QVTo permite especificar transformações operacionais, operações de mapeamento, etc., a partir de modelos de entrada. Uma transformação operacional representa a definição de uma transformação unidirecional que se expressa imperativamente. Possui uma assinatura que indica os modelos envolvidos na transformação e define uma operação de entrada, chamada principal, que representa o código inicial a ser executado para realizar a transformação. Uma operação de mapeamento é uma implementação de um mapeamento entre um ou mais elementos de origem do modelo em um ou mais elementos do modelo alvo.