Quando você configura a transformação para criar relacionamentos derivados entre elementos de modelo de origem, a transformação inclui um identificador exclusivo para cada elemento transformado no código-fonte gerado.
| Elemento de Modelo | Mudança | Impacto no Código Gerado Anteriormente ao Reexecutar a Transformação |
|---|---|---|
| Atributo | Renomear ou mover | Se a tag @generated for excluída do atributo, nenhuma
mudança será feita no atributo. Nenhuma mudança será feita nos métodos getter e
setter, se gerados. Se a tag @generated não for excluída do atributo,
as seguintes ações ocorrerão:
|
| Classe ou interface | Renomear | Se a tag @generated for excluída da classe ou interface,
o arquivo para a classe não será renomeado. Se a tag @generated não for excluída,
as seguintes ações ocorrerão:
|
| Classe ou interface mais alta | Mover | Se a tag @generated for excluída da classe ou interface
mais alta, o arquivo para classe não será alterado. Se a tag @generated
não for excluída, as seguintes ações ocorrerão:
|
| Operação | Renomear, mover ou modificar um tipo de retorno ou assinatura | Se a tag @generated for excluída a operação, nenhuma
mudança será feita na operação. Se a tag @generated não for excluída,
as seguintes ações ocorrerão:
|
| Pacote | Renomear ou mover | Os arquivos na pasta original gerada serão movidos
para a nova pasta. As pastas e os arquivos obsoletos serão excluídos se a opção de exclusão de arquivo obsoleto for selecionada na configuração de transformação. |
| Pacote com «cpp_namespace» aplicado | Renomear a propriedade NamespaceName | O espaço de nomes é renomeado em todos os arquivos de origem gerados. As mudanças no código que se referirem ao espaço de nomes original não serão refatoradas. |
| Renomear o pacote | O código é refatorado e movido para o pacote renomeado porque o pacote não tem um identificador exclusivo. |
O exemplo a seguir mostra as mudanças no código quando você reexecuta a transformação, dependendo da existência de identificadores exclusivos e da tag @generated.
Suponha que o modelo de origem UML neste exemplo contenha a seguinte classe:

| Class1.h | Class1.cpp |
|---|---|
|
|
int Class1::Operation1(int Parameter1)
{
return Parameter1;
}
| Código com Identificadores Exclusivos |
|---|
| Tag @generated não excluída |
O código ilustra as seguintes mudanças:
Class1.h:
Class1.cpp:
|
| Tag @generated excluída de Class1.h ou Class1.cpp |
| A transformação utiliza identificadores exclusivos para determinar
que a Operation1 foi renomeada para Operation2 no modelo, mas como você excluiu
a tag @generated do método, a transformação preserva as mudanças
para Operation1. Portanto, a Operation1 não é alterada em Class1.h ou Class1.cpp,
e a transformação não gera um método chamado Operation2. Class1.h:
Class1.cpp:
|
A tabela a seguir mostra o código gerado pela transformação quando você reexecuta uma transformação que não está configurada para gerar relacionamentos derivados. Sem identificadores exclusivos, a transformação utiliza nomes completos e assinaturas de métodos para vincular elementos de modelo a elementos de código-fonte; além disso, a refatoração não é suportada.
| Código sem Identificadores Exclusivos |
|---|
| Tag @generated não excluída |
O código ilustra as seguintes mudanças:
Class1.h:
Class1.cpp:
|
| Tag @generated excluída de Class1.h ou Class1.cpp |
| Sem identificadores exclusivos, a transformação determina
que a Operation2 é um novo método. O código ilustra as seguintes mudanças:
Class1.h:
Class1.cpp:
|