4 Model-Driven-Architecture
4.6 Mapeamento e Transformação de Modelos
4.6.3 Mapeamentos e Templates
Um template pode conter muitas marcações, que especificam como um modelo deve ser transformado. Por exemplo, pode haver um template para o mapeamento de um modelo de sistema para web. O template deste modelo para a plataforma J2EE define as marcações para transformar este modelo em um modelo que abrigue características da plataforma J2EE. Outro
template deste mesmo modelo, porém agora para a plataforma .NET, pode conter marcações
distintas, que especificam necessidades que devem ser obedecidas na sua transformação para esta plataforma. Xdoclet (Xdoclet Tutorial 2006) é um exemplo de ferramenta e linguagem de marcação que opera com templates. Ela define algumas marcações que podem ser utilizadas e especializadas nos códigos do sistema, gerando o código de acordo com as marcações definidas nas linhas de um programa. É possível utilizar OCL e outras linguagens para definir
templates.
4.6.5 As Etapas de Mapeamento e Transformação de Modelos
A cada mapeamento de um modelo, originalmente um PIM, e a transformação deste para um outro modelo, implica no mesmo tornar-se cada vez mais específico de uma ou mais plataformas. Quando são feitos mapeamentos em um modelo e transformações lhe são aplicadas, ele passa a abrigar as características especificadas no mapeamento. Isto significa dizer que o modelo vai recebendo características de implementação da arquitetura para a qual foi transformado. O último modelo, PSM, sempre é o modelo do sistema especificado para refinamento em uma arquitetura específica, ou seja, o modelo que abriga as características de uma plataforma. Um modelo pode ser mapeado e transformado muitas vezes, até que ele assuma todas as características necessárias para tornar-se um modelo válido para uma plataforma, um PSM. As etapas de mapeamentos e transformações de modelos podem ser visualizadas na Figura 8.
Almeida et al. (2004) introduziram o conceito de plataformas abstratas, para indicar modelos de nível intermediário entre um PIM e um PSM. Para representar estes modelos intermediários, foi utilizada, na Figura 8, a denominação “Modelo Intermed”. Os mesmos
recebem características não funcionais, como as de arquiteturas de desenvolvimento, mais detalhadas do que as contidas no PIM.
Figura 8 - Etapas de Mapeamento e Transformação
Um mapeamento é a especificação de um PIM em determinadas características de plataformas. O PIM pode ser transformado em outro modelo, mais concreto que o PIM, que especifica um determinado sub-conjunto de uma plataforma específica. Assim, o PIM é transformado para um modelo de nível intermediário e este último é transformado para um PSM (Figura 8) (Miller e Mukerji 2003, Tekinerdogan et al 2004, Willink 2004).
As relações entre as visões PIM e PSM da MDA são realizadas em etapas de mapeamento e de transformação de modelos. Estas etapas são o cerne da MDA, sendo possível estabelecer relações entre os modelos e regras para originar um novo modelo, que possa gerar código específico para implementação em uma determinada plataforma. No entanto, a MDA não determina as etapas de mapeamento e transformação. Estas etapas ainda estão em fase de pesquisa e estabelecimento de padrões pela OMG (Miller e Mukerji 2003).
A MDA também sugere que os modelos de sistemas sejam transformados de uma visão para outra. Por exemplo, de uma visão PIM o modelo de um sistema pode ser transformado para um outro modelo na visão PSM. Czarnecki e Simon (2004) classificam abordagens de MDA para transformação e divide-as em duas categorias: Model-to-Code (M2C) e Model-to-Model (M2M). Em transformações M2C o objetivo é gerar código
diretamente a partir de modelos. Em transformações M2M, um objetivo é transformar um modelo de entrada (PIM) em um outro modelo (PSM).
Na MDA, as entradas e saídas de uma transformação definem um mapeamento. Por exemplo, um PIM pode ser um modelo em que seus elementos estão decorados com marcações de um Perfil UML. Este modelo é usado como uma entrada de uma transformação, que deve gerar como saída um modelo alvo ou código para uma aplicação. Então um mapeamento descreve um modelo fonte e um modelo alvo, enquanto a transformação refina o modelo fonte no modelo alvo.
4.6.6 Categorização de Transformações
Czarnecki e Simon (2003) categorizam abordagens para transformação em dois grandes grupos: model-to-code (M2C) e model-to-model (M2M). Segundo os mesmos autores, “muitas ferramentas oferecem ambas transformações model-to-model e model-to- code (exemplos são Jamda, XDE, e OptimalJ)” (Czarnecki e Simon 2003). Em transformações M2C, o objetivo é gerar código diretamente de modelos ou templates. Em transformações deste tipo, o modelo do sistema pode representar as características da plataforma alvo. Por exemplo, o modelo do sistema contém características da linguagem de programação Java.
Abordagens para transformações da categoria M2C informam que os modelos prontos para a geração de código (PSMs) são transformados em código por um compilador de modelos. Um compilador de modelos processa os elementos do modelo de entrada e gera uma saída. O processamento busca elementos do modelo fonte e efetua nos elementos encontrados algumas transformações. Estas transformações podem modificar um elemento, criar novos elementos e associá-los com outros elementos.
A saída de um compilador de modelos é composta por: a) um ou mais arquivos, que podem ser representados em qualquer formato, incluindo os utilizados para intercâmbio de modelos como XMI; b) objetos que são instancias do MOF, que estão na memória do computador e podem ser persistidos de alguma maneira.
Para as abordagens de transformações da categoria Model-to-Model (M2M) o objetivo é gerar um novo modelo. O modelo gerado por transformações M2M pode ser mais detalhado que o modelo anterior (recebido como entrada pela transformação), ou até mesmo ser outro modelo contendo novos elementos de um sistema. Algumas abordagens para transformação de modelos da categoria M2M determinam que os elementos de um modelo, quando transformados por algum compilador de modelos, recebem marcações com estereótipos e restrições (Becker, Höltz e Pereira 2002).
Czarnecki e Simon (2003) salientam que transformações M2M são necessárias para preencher grandes lacunas de abstrações entre PIMs e PSMs. É mais fácil gerar modelos intermediários do que gerar diretamente, a partir de um PIM, um PSM (Czarnecki e Simon 2003). Além disso, para os mesmos autores, os modelos intermediários podem ser necessários para estabelecer otimização e ajustes no modelo (para propósitos de debugging) e oferecem uma visão do modelo do sistema mais especificamente para uma plataforma (Czarnecki e Simon 2003).
Czarnecki e Simon (2003) dividem abordagens para transformações M2M em outras cinco categorias:
Transformação de Manipulação Direta de Modelo (TMD): abordagens desta categoria
oferecem mecanismos para manipular os elementos de um modelo. Os elementos de um modelo, tipicamente, são representados utilizando o MOF. Para manipulá-los, as abordagens com foco em transformações desta categoria oferecem uma linguagem para a manipulação de modelos;
Relacional: o objetivo é relacionar dois elementos de um ou mais modelos. Esta relação
pode ser seguida de uma regra para transformação que determina a conversão de um modelo para o outro;
Baseadas em transformações de grafos: por exemplo, o objetivo é converter um modelo
representado em UML para um que use outra representação como SLOOP (Zhu, Matsuda e Shoji 2002);
Dirigidas por uma Estrutura de Transformações: o objetivo é estruturar as
transformações dos modelos;