Por padrão, a transformação gera elementos UML com o mesmo nome e visibilidade dos elementos C++ de origem. Se a transformação não puder transformar um elemento C++, ela ignorará o elemento. A tabela a seguir lista a saída gerada pela transformação quando ela transforma elementos de código C++ em elementos de modelo UML.
| Elemento C++ | Elemento UML |
|---|---|
| Classe |
|
| Enumeração |
|
| Namespace |
|
| Classe aninhada, estrutura ou união |
|
| Instância de modelo especializado |
|
| Estrutura |
|
| Typedef |
|
| União |
|
Se um projeto C++ contiver um arquivo de cabeçalho que contenha variáveis globais e que não contenha uma classe com o mesmo nome que o próprio arquivo de cabeçalho, a transformação gera uma classe UML que tem o estereótipo «cpp_globals» aplicado. Para cada variável global no arquivo de cabeçalho, a transformação gera um atributo UML correspondente nessa classe UML. Para cada método global no arquivo de cabeçalho, a transformação gera uma operação UML correspondente nessa classe UML. A primeira linha na tabela a seguir fornece um exemplo desse cenário.
| Código C++ | Elementos UML gerados |
|---|---|
Código para um arquivo de cabeçalho chamado Class1.h:
|
![]() |
Código para um arquivo de cabeçalho chamado Class1.h:
|
![]() |
A transformação não transforma diretivas do pré-processador no código C++ porque esses elementos C++ não podem ser representados em UML. É necessário especificar diretivas do pré-processador definidas pelo usuário na seção definida pelo usuário nos arquivos de origem C++.
Se o projeto C/C++ Development Tools (CDT) de origem incluir uma instanciação de modelo que instancia uma classe que não existe no projeto CDT de origem, a transformação transformará a instanciação de modelo em um tipo primitivo UML. A transformação transformará as referências na instanciação do gabarito na referência apropriada para o tipo primitivo de UML no modelo de destino.
| Classe de gabarito C++ | Elemento UML |
|---|---|
| Definição da classe de gabarito |
|
| Instanciação da classe de gabarito em uma definição typedef |
|
| Instanciação da classe de gabarito ausente em uma definição typedef |
|
class Class1{
int x;
}
A transformação cria um mapeamento entre o tipo da
propriedade x na classe UML chamada Class1 e o tipo primitivo
int C++. A biblioteca de tipos C++ contém o tipo primitivo int.As tabelas a seguir listam como a transformação configurará a propriedade Type se o tipo da variável de membro C++ for um tipo definido pelo usuário.
Se o tipo da variável de membro C++ for um tipo definido pelo usuário, a transformação configurará a propriedade UML Type com o valor de um elemento UML correspondente ao tipo definido pelo usuário no modelo UML de destino. Se a transformação não puder determinar o elemento UML no modelo correspondente ao tipo definido pelo usuário, a transformação criará um tipo primitivo de UML com o mesmo nome do elemento UML e configurará o Tipo da propriedade UML com o mesmo nome do novo tipo primitivo de UML.
| Amostra de código C++ | Valor da propriedade Type |
|---|---|
|
A transformação configura o Tipo da propriedade chamada x1 na classe UML Class3 como Class2, criada pela transformação no modelo UML de destino. |
O exemplo da tabela a seguir lista como a transformação configura o valor da propriedade UML Type quando o tipo da variável do membro C++ referenciar um tipo que é definido em um projeto CDT diferente:
| Amostra de código C++ | Valor da propriedade Type |
|---|---|
| O projeto CDTProject1 contém uma classe chamada Class1. O projeto CDTProject2 contém uma classe chamada Class2:
|
A transformação cria um mapeamento entre o tipo da propriedade UML x para o elemento visual que corresponde à classe chamada Class1 no projeto de origem C++ chamado CDTProject1. |
A tabela a seguir lista informações adicionais geradas pela transformação para variáveis de membros específicas.
| Variável de membro C++ | Características adicionais da saída de transformação |
|---|---|
| const | A propriedade isStatic é true |
| mutable | A transformação aplica o estereótipo «cpp_type» à propriedade; a propriedade isMutable do estereótipo é configurada como true |
| estática | A propriedade isStatic é true |
| volatile | A transformação aplica o estereótipo «cpp_type» à propriedade; a propriedade isVolatile do estereótipo é configurada como true |
A transformação transforma uma função-membro C++ em uma classe, estrutura ou união em uma operação UML na classe UML correspondente. A operação UML gerada pela transformação tem o mesmo nome e visibilidade da função-membro C++. A tabela a seguir lista as informações adicionais geradas pela transformação para parâmetros de funções específicos.
| Função do membro C++ | Características adicionais da saída de transformação |
|---|---|
| Designação | A transformação aplica o estereótipo «cpp_assignment»; a operação gerada tem o mesmo nome e visibilidade do operador de designação = |
| Const | A transformação configura a propriedade isQuery como true |
| Construtor | A transformação aplica o estereótipo «cpp_constructor». Se os métodos do
construtor no código C++ forem sobrecarregados, para cada método do construtor no código, a transformação gera
um método de construtor correspondente no modelo de destino. Se a transformação encontrar métodos de construtor duplicados no código, a transformação gerará um método do construtor para o primeiro que encontrar. |
| CopyConstructor | A transformação aplica o estereótipo «cpp_copy_constructor». Se os métodos do
construtor de cópias no código C++ forem sobrecarregados, para cada método do construtor de cópias no código, a transformação gerará um método de construtor de cópias correspondente no modelo de destino. Se a transformação encontrar métodos de construtor de cópias duplicados no código, a transformação gerará um método do construtor de cópias para o primeiro que encontrar. |
| Destrutor | A transformação aplica o estereótipo «cpp_destructor». Se os métodos do
destruidor no código C++ forem sobrecarregados, para cada método do destruidor no código, a transformação gera
um método de destruidor correspondente no modelo de destino. Se a transformação encontrar métodos do destruidor duplicados no código, a transformação gerará um método do destruidor para o primeiro que encontrar. |
| Amigo | A transformação aplica-se ao estereótipo «cpp_operation» e configura a propriedade isFriend para true. |
| Sequencial | A transformação aplica-se ao estereótipo «cpp_operation» e configura a propriedade isInline para true. |
| Virtual inalterado | A transformação configura a propriedade isAbstract como true |
| Estático | A transformação configura a propriedade isStatic como true |
| Virtual | A transformação aplica-se ao estereótipo «cpp_operation» e configura a propriedade isVirtual para true. |
class one{
int op(int x=5);
}
A transformação configura o valor padrão do parâmetro UML
gerado x na operação op como 5.| Parâmetro da função C++ | Saída da Transformação |
|---|---|
| Referência | A transformação configura a propriedade Direction como inout |
| Retornar | A transformação configura a propriedade Direction como return |
| Regular (sem os parâmetros reference ou return) | A transformação configura a propriedade Direction como in |
Variáveis de membros, funções-membros e parâmetros C++ podem especificar modificadores de tipo, como ponteiros para tipos, tipos de referência e tipos de matrizes. Esses modificadores de tipo não podem ser representados em UML. A tabela a seguir lista como a transformação transforma modificadores de tipo.
| Modificador de tipo | Saída da Transformação |
|---|---|
| Ponteiro para um tipo C++ | A transformação aplica o estereótipo «cpp_type»
ao parâmetro ou propriedade UML gerada e configura o atributo
qualifier com um operador ponteiro. Considere o seguinte código C++:
A transformação gera uma classe UML chamada MyClass contendo uma variável de nome com as seguintes propriedades: ![]() |
| Referência a um tipo C++ | A transformação configura o atributo qualifier com um
operador de referência. A transformação só aplica o estereótipo «cpp_type» ao transformar vários tipos de referência no código-fonte. Se a transformação transformar um parâmetro C++ que é um tipo de referência, ela configurará o atributo direction do parâmetro UML como inout. Considere o seguinte código C++:
A transformação gera uma classe UML chamada MyClassClone contendo um parâmetro return com as seguintes propriedades: ![]() |
| Matriz | Para uma matriz de dimensão simples, a transformação configura a multiplicidade do parâmetro ou propriedade UML com o mesmo valor da dimensão simples. A transformação só aplica o estereótipo «cpp_type» ao transformar várias matrizes dimensionais no código-fonte. O exemplo a seguir mostra como a transformação configura a multiplicidade de um atributo do tipo int x[10]: ![]() A transformação configura os limites inferior e superior da propriedade multiplicity com o valor da dimensão simples do atributo. |