Relacionamentos entre os elementos do modelo UML e a saída da transformação de UML a Java

As opções de rastreabilidade possibilitam criar relacionamentos entre um modelo de origem e a saída da transformação.

As opções na configuração de transformação possibilitam especificar o tipo de relacionamento que a transformação gera entre um elemento de modelo e a saída da transformação. Por padrão, a transformação não cria relacionamentos rastreáveis.

Relacionamentos de Rastreio entre os Elementos de Modelo de Origem e a Saída da Transformação

Para entender como os elementos de um modelo de origem estão relacionados aos elementos em um projeto de destino, é possível permitir que uma transformação crie relacionamentos de rastreio dos elementos de modelo de origem com os elementos gerados no projeto de destino. Depois, é possível visualizar os relacionamentos de rastreio em um diagrama de tópicos, criando e executado consultas do modelo.

A criação de relacionamentos de rastreio é útil em projetos grandes que podem conter vários modelos e várias configurações de transformação. Você também pode criar e executar consultas de rastreabilidade que exibem como a saída da transformação está relacionada às especificações de software e aos elementos de modelo.

Quando você executa uma transformação que está configurada para criar relacionamentos de rastreio, para cada elemento que suporta a tag @generated, a transformação anexa um identificador exclusivo à tag @generated. Se você renomear os elementos no modelo UML de origem, esse identificador exclusivo ativará a funcionalidade de mesclagem para refatorar e mesclar os elementos apropriados.
Nota: Se mover um elemento UML fora do escopo de sua classe de nível mais alto, quando você reexecutar a transformação, o algoritmo de mesclagem não refatorará ou mesclará o elemento renomeado porque o escopo do elemento foi alterado.

Quando você reexecutar a transformação, se necessário, a transformação utilizará o identificador no código-fonte para combinar os elementos correspondentes e, em seguida, alterará o código para refletir as mudanças no modelo. Por exemplo, se você renomear uma operação UML no modelo de origem e reexecutar a transformação, a transformação renomeará o método Java™ gerado anteriormente e preservará o corpo do método, em vez de excluir o método gerado anteriormente e incluir um novo método.

A transformação Java–para-UML, ou reversa, também pode utilizar os identificadores para combinar elementos correspondentes entre o projeto Java e o modelo UML. Se aplicáveis, as mudanças nos elementos do código-fonte Java serão tratadas como modificações ou como refatoração de código em vez de inclusões e exclusões no código gerado.

Para visualizar os relacionamentos entre os elementos de modelo de origem e a saída da transformação, é possível visualizar o elemento de modelo de origem em um diagrama e arrastar o elemento de código gerado pela transformação para esse diagrama. A tabela a seguir lista o seguinte: a representação UML para um elemento de modelo de origem nomeado Class1, que contém um atributo de número inteiro nomeado attribute1 e duas operações nomeadas Operation1 e Operation2, que não possuem nenhum parâmetro; o código gerado pela transformação; o diagrama de classes que mostra o relacionamento de rastreio entre os elementos.
Elemento UML Saída da Transformação Relacionamento de Rastreio em um Diagrama de Classes
Esta imagem mostra a representação UML de Class1 descrita no parágrafo anterior.
/**
 * 
 */
package Package1;

import java.util.Collection;

/** 
 * <!-- begin-UML-doc -->
 * <!-- encerrar-doc-UML -->
 * @uml.annotations
 *     derived_abstraction="platform:/resource/UMLProject/Model.emx#_9YlH8CpPEdyn7_VFIWTp4A"
 * @generated "sourceid:platform:/resource/UMLProject/Model.emx#_9YlH8CpPEdyn7_VFIWTp4A"
 */
public class Class1 {
	/** 
	 * <!-- begin-UML-doc -->
	 * <!-- encerrar-doc-UML -->
	 * @generated "sourceid:platform:/resource/UMLProject/Model.emx#__8ptgOSnEdyXH8PWExuX2g"
	 */
	private Integer attribute1;

	/** 
	 * @return the attribute1
	 * @generated "sourceid:platform:/resource/UMLProject/Model.emx#__8ptgOSnEdyXH8PWExuX2g?GETTER"
	 */
	public Integer getAttribute1() {
		// iniciar-código-do-usuário
		return attribute1;
		// end-user-code
	}

	/** 
	 * @param theAttribute1 o attribute1 a ser configurado
	 * @generated "sourceid:platform:/resource/UMLProject/Model.emx#__8ptgOSnEdyXH8PWExuX2g?SETTER"
	 */
	public void setAttribute1(Integer theAttribute1) {
		// iniciar-código-do-usuário
		attribute1 = theAttribute1;
		// end-user-code
	}

	/** 
	 * <!-- begin-UML-doc -->
	 * <!-- encerrar-doc-UML -->
	 * @generated "sourceid:platform:/resource/UMLProject/Model.emx#_RDsjcOSnEdyXH8PWExuX2g"
	 */
	public void Operation1() {
		// iniciar-código-do-usuário
		// TAREFA A FAZER Stub de método gerado automaticamente

		// end-user-code
	}

	/** 
	 * <!-- begin-UML-doc -->
	 * <!-- encerrar-doc-UML -->
	 * @generated "sourceid:platform:/resource/UMLProject/Model.emx#_R04v0OSnEdyXH8PWExuX2g"
	 */
	public void Operation2() {
		// iniciar-código-do-usuário
		// TAREFA A FAZER Stub de método gerado automaticamente

		// end-user-code
	}
}
Esta imagem mostra um relacionamento de rastreio, com o estereótipo de derivação aplicado, entre a representação UML de Class1 e a saída da transformação.

A transformação não altera o modelo de origem quando você especifica para a transformação gerar relacionamentos de rastreio.

Referências Diretas entre os Elementos de Modelo e a Saída da Transformação

É possível orientar uma transformação para criar referências diretas entre os elementos de modelo de origem e a saída da transformação. A transformação substitui os elementos de modelo de origem por ponteiros para a saída da transformação. O código-fonte gerado pela transformação torna-se o artefato de engenharia primária e os elementos no modelo tornam-se representações visuais do código. Essa prática será útil se você desejar trabalhar no domínio de destino em vez de trabalhar com o modelo UML. As mudanças feitas nas representações visuais dos objetos no modelo ficam imediatamente visíveis no código.

A execução de uma transformação que cria referências diretas entre os elementos de modelo e a saída da transformação altera o modelo de origem. Para evitar possíveis problemas, você deve colocar o modelo de origem sob o controle de versão.

Para obter os benefícios de trabalho no domínio de destino, é necessário criar referências diretas ao fazer mudanças incrementais em um modelo UML e, então, converter o modelo em representações visuais de código. Se a transformação não puder transformar elementos UML, tais como elementos aninhados, ela moverá esses elementos para o pacote mais próximo. Se a transformação não puder mover um elemento de modelo para o pacote mais próximo, ela excluirá o elemento.

Para aprender a criar referências diretas entre os elementos de modelo e a saída da transformação, consulte o tutorial relacionado a esse tópico.


Feedback