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.
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 do modelo que instancie uma classe que não existe no projeto de origem CDT , a transformação transforma a instanciação do 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.
O exemplo da tabela a seguir lista como a transformação configura o valor da propriedade UML Type quando o tipo da variável de membro C++ referencia um tipo definido em um projeto 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: #include "CDTProject1/Class1"
class Class2{
Class1 x;
};
|
A transformação cria um mapeamento entre o tipo da propriedade UML x para o elemento visual correspondente à 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 é definida para true |
| static | A propriedade isStatic é true |
| volatile | A transformação aplica o estereótipo «cpp_type» à propriedade; a propriedade isVolatile do estereótipo é definida para 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++ são 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 do construtor duplicados no código, a transformação gera um método de 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ópia no código C++ são sobrecarregados, para cada método
do construtor de cópia no código, a transformação gera um método de construtor de cópia correspondente no
modelo de destino. Se a transformação encontrar métodos do construtor de cópia duplicados no código, a transformação gera um método de construtor de cópia 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++ são 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 gera um método do destruidor para o primeiro que encontrar. |
| Amigo | A transformação aplica o estereótipo «cpp_operation» e configura a propriedade isFriend para true. |
| Seqüencial | A transformação aplica o estereótipo «cpp_operation» e configura a propriedade isInline para true. |
| Virtual inalterado | A transformação define a propriedadeisAbstract para true. |
| Estático | A transformação define a propriedadeisStatic para true. |
| Virtual | A transformação aplica o 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++:class MyClass {
private: char* name;
};
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 qualificador para 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 de origem. 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++: class MyClassClone {
private:
MyClassClone clone(MyClassClone& copy);
};
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. |