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 | Alteração | 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
alteração será feita no atributo. Nenhuma alteração 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
alteração 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 alterações 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 alterações 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 |
|---|---|
//@uml.annotationsderived_abstraction="platform:/resource/Bug-Fixes/GUIDs.emx#_0NWVMJy6EdueYKrofslx4A"
//@generated "UML para C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
class Class1
{
//Iniciar seção para Class1
//TAREFA A FAZER: Incluir atributos a serem preservados
//Encerrar seção para Class1
private:
//@generated "UML para C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
//@uml.annotationsderived_abstraction="platform:/resource/Bug-Fixes/GUIDs.emx#_0NWVMJy6EdueYKrofslw3S"
int attribute1;
public:
//@generated "UML para C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
//@uml.annotationsderived_abstraction="platform:/resource/Bug-Fixes/GUIDs.emx#_0NWVMJy6EdueYKrofsly5D"
int Operation1(int Parameter1);
}; //encerrar classe Class1
|
#include "Class1.h"
//Iniciar seção para o arquivo Class1.cpp
//TAREFA A FAZER: Incluir definições preservadas
//Encerrar seção para o arquivo Class1.cpp
//@generated "UML para C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
int Class1::Operation1(int Parameter1)
{
//TAREFA A FAZER Stub de método gerado automaticamente
return 0;
}
|
int Class1::Operation1(int Parameter1)
{
return Parameter1;
}
| Código com Identificadores Exclusivos |
|---|
| Tag @generated não excluída |
O código ilustra as seguintes alterações:
Class1.h: //@uml.annotationsderived_abstraction="platform:/resource/Bug-Fixes/GUIDs.emx#_0NWVMJy6EdueYKrofslx4A"
//@generated "UML para C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
class Class1
{
//Iniciar seção para Class1
//TAREFA A FAZER: Incluir atributos a serem preservados
//Encerrar seção para Class1
private:
//@generated "UML para C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
//@uml.annotationsderived_abstraction="platform:/resource/Bug-Fixes/GUIDs.emx#_0NWVMJy6EdueYKrofslw3S"
int attribute1;
public:
//@generated "UML para C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
//@uml.annotationsderived_abstraction="platform:/resource/Bug-Fixes/GUIDs.emx#_0NWVMJy6EdueYKrofsly5D"
int Operation2(int Parameter1);
}; //encerrar classe Class1
Class1.cpp:
#include "Class1.h"
//Iniciar seção para o arquivo Class1.cpp
//TAREFA A FAZER: Incluir definições preservadas
//Encerrar seção para o arquivo Class1.cpp
//@generated "UML para C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
int Class1::Operation2(int Parameter1)
{
return Parameter1;
}
|
| 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 alterações
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:
//@uml.annotationsderived_abstraction="platform:/resource/Bug-Fixes/GUIDs.emx#_0NWVMJy6EdueYKrofslx4A"
//@generated "UML para C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
class Class1
{
//Iniciar seção para Class1
//TAREFA A FAZER: Incluir atributos a serem preservados
//Encerrar seção para Class1
private:
//@generated "UML para C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
//@uml.annotationsderived_abstraction="platform:/resource/Bug-Fixes/GUIDs.emx#_0NWVMJy6EdueYKrofslw3S"
int attribute1;
public:
//@uml.annotationsderived_abstraction="platform:/resource/Bug-Fixes/GUIDs.emx#_0NWVMJy6EdueYKrofsly5D"
int Operation1(int Parameter1);
}; //encerrar classe Class1
Class1.cpp:
#include "Class1.h"
//Iniciar seção para o arquivo Class1.cpp
//TAREFA A FAZER: Incluir definições preservadas
//Encerrar seção para o arquivo Class1.cpp
int Class1::Operation1(int Parameter1)
{
return Parameter1;
}
|
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 alterações:
Class1.h:
#ifndef CLASS1_H
#define CLASS1_H
//Iniciar seção para o arquivo Class1.h
//TAREFA A FAZER: Incluir definições preservadas
//Encerrar seção para o arquivo Class1.h
//@generated "UML para C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
class Class1
{
//Iniciar seção para Class1
//TAREFA A FAZER: Incluir atributos a serem preservados
//Encerrar seção para Class1
private:
//@generated "UML para C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
int attribute1;
public:
//@generated "UML para C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
int Operation2(int Parameter1);
}; //encerrar classe Class1
Class1.cpp:
//Iniciar seção para o arquivo Class1.cpp
//TAREFA A FAZER: Incluir definições preservadas
//Encerrar seção para o arquivo Class1.cpp
//@generated "UML para C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
int Class1::Operation2(int Parameter1)
{
//TAREFA A FAZER Stub de método gerado automaticamente
return 0;
}
|
| 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 alterações:
Class1.h:
#ifndef CLASS1_H
#define CLASS1_H
//Iniciar seção para o arquivo Class1.h
//TAREFA A FAZER: Incluir definições preservadas
//Encerrar seção para o arquivo Class1.h
//@generated "UML para C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
class Class1
{
//Iniciar seção para Class1
//TAREFA A FAZER: Incluir atributos a serem preservados
//Encerrar seção para Class1
private:
//@generated "UML para C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
int attribute1;
public:
int Operation1(int Parameter1);
//@generated "UML para C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
int Operation2(int Parameter1);
}; //encerrar classe Class1
#endif
Class1.cpp:
#include "Class1.h"
//Iniciar seção para o arquivo Class1.cpp
//TAREFA A FAZER: Incluir definições preservadas
//Encerrar seção para o arquivo Class1.cpp
int Class1::Operation1(int Parameter1)
{
return Parameter1;
}
//@generated "UML para C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
int Class1::Operation2(int Parameter1)
{
//TAREFA A FAZER Stub de método gerado automaticamente
return 0;
}
|