Uma transformação é um conjunto de transfigurações que você pode configurar, especificar como público no arquivo de manifesto de plug-ins e executar utilizando uma configuração de transformação.
O relacionamento entre os elementos de origem e de destino é definido por um conjunto de regras contido em uma transformação. A aplicação dessas regras baseia-se em extratores que especificam como passar pelo conjunto de origem de elementos. A transformação pode depender de um perfil para aplicar mais informações a suas regras.
As transformações permitem a conversão de modelos UML em código, a conversão de código em modelos UML e a conversão de modelos em modelos, em um nível diferente de abstração. Há quatro categorias de transformações:
Além disso, as transformações podem implementar padrões para converter elementos de um formulário para outro.
O ponto de início mais comum de uma transformação é um modelo independente de plataforma (PIM), como um modelo de classe. Um modelo de classe contém elementos de design sem referência a características de implementação. Você pode criar, modificar e anotar modelos de classe e, em seguida, utilizar as transformações para gerar um modelo específico da plataforma (PSM), como um diagrama de tópicos ou texto em nível de código Java™.
Como parte de seu pacote, os padrões também podem definir e fornecer extensões de transformação que definem regras adicionais a serem aplicadas ao cruzarem níveis específicos de abstração ou metamodelos específicos. Uma implementação comum desse conceito é um padrão de design que fornece regras de transformação para gerar código específico. Essas regras estenderiam uma transformação de código, por exemplo, uma transformação Java ou C++, para fornecer código específico do padrão para a saída gerada.
Um processo básico de transformação de modelo inclui as seguintes etapas, que podem ser executadas iterativamente:
O resultado de uma transformação completa é o modelo de destino, ou texto, e um registro da transformação com fins de rastreabilidade. Em transformações de modelo em texto, a saída poderia ser código Java ou C++, arquivos Data Definition Language (DDL) para criação e ocupação de banco de dados, testes de unidade ou diagramas de visualização que correspondam a diagramas de modelagem. O registro de transformações inclui um mapa do elemento no modelo de origem para os elementos correspondentes do destino e mostra quais partes do mapeamento foram utilizadas para cada parte da transformação.
Você pode criar novas transformações utilizando a API de transformação. Para criar uma transformação que você pode configurar utilizando uma configuração de transformação, é necessário incluir a extensão com.ibm.xtools.transform.core.transformationProviders no arquivo plugin.xml no plug-in que contém a transformação. O provedor de transformação define extensões do tipo Transformação para cada transformação fornecida. A inclusão dessas extensões registra automaticamente a transformação, ou transformações, no serviço de transformação. O serviço de transformação é genérico e não faz suposições sobre o modelo de origem, o modelo de destino, ou a implementação da própria transformação. Embora o serviço de transformação contenha um mecanismo de transformação padrão, um autor de transformação poderia utilizar um mecanismo completamente diferente. No entanto, construindo transformações no mecanismo padrão, os autores de transformações podem tirar vantagem do ambiente de depuração lógico, do mecanismo de extensibilidade e de aperfeiçoamentos futuros para essa arquitetura.
Uma configuração de transformação é uma instância de uma transformação que inclui informações utilizadas por todas as transformações, como um nome exclusivo, a origem e o destino da transformação; também pode incluir propriedades específicas de uma determinada transformação. Uma configuração de transformação possui .tc como uma extensão de nome de arquivo. Quando você executa uma transformação, ela utiliza as informações fornecidas na configuração de transformação.
Antes de poder executar uma transformação, você deve criar uma configuração de transformação. Quando você aplica uma configuração de transformação, uma instância da transformação é criada e executada com as propriedades definidas nessa configuração, gerando a saída esperada.
É possível compartilhar propriedades em uma configuração de transformação com outras configurações de transformação estabelecendo relacionamentos hierárquicos programaticamente. Esse recurso permite configurações de transformação para herdar seus valores de propriedade das propriedades em uma configuração de transformação padrão. Uma configuração de transformação pode ter múltiplos pais, e a ordem na qual você especifica os relacionamentos usando a API pública determina a prioridade de uma configuração quando múltiplas configurações especificam as mesmas propriedades. Portanto, se um conjunto de propriedades padrão é alterado, todas as configurações de transformação no sistema que usam esse conjunto de propriedades herdam as mudanças.