Estereótipos do Perfil de Transformação UML-para-C++

O perfil de transformação UML-para-C++ contém estereótipos que podem ser aplicados a parâmetros, propriedades, documentação, relacionamentos específicos, classes, pacotes e modelos. Cada estereótipo tem um conjunto de atributos e tipos válidos definidos.

A tabela a seguir lista os estereótipos do perfil e suas propriedades e tipos relacionados.

Estereótipo Aplica-se a Propriedades Tipo
«cpp_assignment» Operações isInline Booleano com um valor padrão de false
«cpp_body_comment» Comentários que você deseja que apareçam no código-fonte, tais como comentários para funções e variáveis estáticas    
«cpp_constructor» Operações isExplicit, isInline Booleano com um valor padrão de false
memberInitializers Cada sequencia especifica a lista inicializadora do construtor de uma classe. A lista especifica os valores iniciais dos atributos da classe ou da classe pai.
Por exemplo, especifique a seguinte sequencia para gerar uma lista inicializadora para um método de construtor de uma classe chamada Class1 que tenha um atributo de inteiro denominado attribute1 e um atributo de sequencia denominado name1:
attribute1(10),name1("Class1")
Não coloque a sequencia entre aspas simples. A transformação gera o seguinte construtor:
Class1::Class1() :
attribute1(10),name1("Class1")
{
//TAREFA A FAZER Stub de método gerado automaticamente
}
«cpp_copy_constructor» Operações isExplicit, isInline Booleano com um valor padrão de false
memberInitializers Cada sequencia especifica a lista inicializadora do construtor de uma classe. A lista especifica os valores iniciais dos atributos da classe ou da classe pai.
Por exemplo, especifique a seguinte sequencia para gerar uma lista inicializadora para um método de construtor de uma classe chamada Class1 que tenha um atributo de inteiro denominado attribute1 e um atributo de sequencia denominado name1:
attribute1(10),name1("Class1")
Não coloque a sequencia entre aspas simples. A transformação gera o seguinte construtor:
Class1::Class1() :
attribute1(10),name1("Class1")
{
//TAREFA A FAZER Stub de método gerado automaticamente
}
«cpp_dependency» Relacionamentos de Dependência isForwardReferenceInBody Booleano com um valor padrão false; se o valor for configurado como true, irá gerar uma declaração de encaminhamento do tipo de fornecedor no arquivo .cpp da classe de cliente e o valor da propriedade isForwardReferenceInHeader será ignorado.
Se a propriedade for configurada como true, a transformação não irá gerar uma referência de encaminhamento nas seguintes situações:
  • Se o fornecedor é um typedef, tipo aninhado ou enumeração
  • Se a classe do cliente contiver quaisquer tipos de não referência ou não ponteiro que sejam do tipo do fornecedor
isForwardReferenceInHeader Booleano com um valor padrão false; se o valor for configurado como true, irá gerar uma declaração de encaminhamento do tipo de fornecedor no arquivo de cabeçalho da classe de cliente.
Se a propriedade for configurada como true, a transformação não irá gerar uma referência de encaminhamento nas seguintes situações:
  • Se o fornecedor é um typedef, tipo aninhado ou enumeração
  • Se a classe do cliente contiver quaisquer tipos de não referência ou não ponteiro que sejam do tipo do fornecedor
isInclusionInBody Booleano com um valor padrão true; se o valor for configurado como true, irá gerar uma diretiva #include no arquivo .cpp da classe de cliente.
isInclusionInHeader Booleano com um valor padrão false; se o valor for configurado como true, irá gerar uma diretiva #include no arquivo de cabeçalho da classe de cliente e o valor da propriedade isInclusionInBody será ignorado.
«cpp_destructor» Operações isVirtual, isInline Booleano com um valor padrão de false
«cpp_enum» Enumerações isAnonymousEnum Booleano com um valor padrão de false; se o valor for configurado como true, a transformação gerará uma enumeração anônima
«cpp_external_inclusion» Classes, interfaces includeType Enumeração com valores que especificam como a transformação gera diretivas de inclusão quando a classe importada não faz parte da origem de transformação
relativeToFolderInput Sequência; obrigatório se você especificar o valor Gere diretivas de inclusão que sejam relativas a essa pasta na propriedade includeType
specificFileNameInput Sequência; obrigatório se você especificar o valor Gere uma diretiva de inclusão que contenha o seguinte nome de arquivo na propriedade includeType
«cpp_friend» Relacionamentos de Dependência   Gera uma diretiva #include no arquivo de cabeçalho e declara a classe do fornecedor como um amigo da classe do cliente
«cpp_generalization» Relacionamentos de generalização, relacionamentos InterfaceRealization GeneralizationKind Enumeração com valores público, protegido, privado e padrão (0-público, 1-protegido, 2-privado, 3-padrão)
isVirtual Booleano com um valor padrão de false; indica heranças virtuais
«cpp_globals» Classes   Aplicar esse estereótipo a uma classe indica que se trata de uma classe vazia; a transformação não gera uma classe C++ correspondente. A transformação gera apenas tipos globais C++ correspondentes, normalmente variáveis e métodos, para cada elemento especificado na classe estereotipada.
«cpp_internal_inclusion» Classes, interfaces includeType Enumeração com valores que especificam como a transformação gera diretivas de inclusão quando a classe de importação e a classe importada fazem parte da origem de transformação
relativeToFolderInput Sequência; obrigatório se você especificar o valor Gere diretivas de inclusão que sejam relativas a essa pasta na propriedade includeType
specificFileNameInput Sequência; obrigatório se você especificar o valor Gere uma diretiva de inclusão que contenha o seguinte nome de arquivo na propriedade includeType
«cpp_namespace» Pacotes NamespaceName Sequência
«cpp_operation» Operações isInline Booleano com um valor padrão de false; se o valor for configurado como true, gerará a operação como sequencial e incluirá o corpo da operação no arquivo de cabeçalho correspondente
isVirtual Booleano com um valor padrão de false; se o valor for configurado como true, gerará a operação como uma função virtual
isFriend Booleano com um valor padrão de false; se o valor for configurado como true, gerará uma operação amigável
isGlobal Booleano com um valor padrão false; se o valor for configurado como true, irá gerar uma função global e uma classe vazia que corresponderá à classe UML que contém a função global
«cpp_properties» Classes, interfaces, enumerações bodyFileExtension Arquivo de corpo C++ com a extensão especificada
headerFileExtension Arquivo de cabeçalho C++ com a extensão especificada
Por exemplo, para gerar código para uma classe de modelo C++ em um arquivo de cabeçalho que tenha .inc como uma extensão de nome de arquivo, é possível aplicar esse estereótipo à classe e configurar esta propriedade como ".inc".
Nota: Você deve associar a extensão de nome de arquivo .inc a um arquivo de cabeçalho C++ para que o C/C++ Development Tools reconheça .inc como uma extensão de nome de arquivo C++ válida.
«cpp_specialized_template» Classes que têm um relacionamento de ligação com uma classe de modelo   Todas as classes que especificarem um relacionamento de «ligação» com uma classe de modelo serão transformadas em tipos typedef que referenciam uma instância do modelo base.

Todos os parâmetros formais no relacionamento de ligação devem estar ligados.

«cpp_struct» Classes    
«cpp_type» Propriedades, parâmetros arrayDimensions Essa é uma sequencia que é normalmente utilizada para especificar matrizes multidimensionais que o UML 2.0 não suporta.

Por exemplo, utilize essa sequencia para especificar uma matriz para uma propriedade: [10][20]; ou para um parâmetro do tipo sem retorno: [][10]

InitializerKind Essa é uma enumeração com valores de construtor e de designação (0-construtor).

Se a propriedade InitializerKind for definida como 0, a transformação gerará um inicializador de construtor.

Se a propriedade InitializerKind for definida como 1, a transformação gerará uma instrução de designação no construtor.

Consulte o Exemplo de como a transformação UML-para-C++ transforma elementos com o estereótipo «cpp_type» aplicado.

isAuto, isMutable, isRegister, isVolatile Booleano com um valor padrão de false
qualifier Essa é uma sequencia que contém a parte de um tipo C++ que não pode ser modelada no UML, e que aparece antes do nome da variável a após o tipo, como ** e &.
Por exemplo, const int **a[12][33] pode ser representado por estes itens:
  • Uma propriedade UML nomeada a
  • Propriedade de estereótipo isReadOnly definida como true
    Nota: A propriedade isReadOnly gera a palavra-chave const
  • O estereótipo «cpp_type» aplicado
  • Propriedade de estereótipo qualificador configurada como **
  • Propriedade de estereótipo arrayDimensions configurada como [12][33]
Atributos isGlobal Booleano com um valor padrão false; se o valor for configurado como true, irá gerar uma variável global e uma classe vazia que corresponderá à classe UML que contém a variável global
«cpp_typedef» Classes arrayDimensions Sequência
ImplementationType Essa sequencia especifica o tipo ao qual o tipo typedef se refere; ela pode ser de um tipo primitivo ou de um tipo definido pelo usuário.

Os tipos definidos pelo usuário podem ser completos ou não. Se um nome do tipo não for totalmente qualificado, o escopo do tipo typedef será aplicado ao tipo definido pelo usuário.

qualifier Essa sequencia especifica tipos de ponteiro, constantes etc.
Por exemplo, a transformação gera const int **Typedef1[12][13] para um elemento UML da seguinte descrição:
  • Uma classe nomeada Typedef1, estereotipada como «cpp_typedef»
  • ImplementationType int
  • arrayDimensions[12][13]
  • Const. de qualificador **
«cpp_union» Classes isAnonymousUnion Booleano com um valor padrão de false

Exemplo de como a transformação UML-para-C++ transforma elementos com o estereótipo «cpp_type» aplicado

Neste exemplo, uma classe UML nomeada Class1 contém os seguintes atributos:
  • Um atributo de inteiro denominado attribute1 com um valor padrão 5; a propriedade InitializerKind é definida como 0
  • Um atributo booleano denominado attribute2 com um valor padrão true; a propriedade InitializerKind é definida como 1
O estereótipo «cpp_type» é aplicado a ambos os atributos. A configuração de transformação UML-para-C++ é configurada para gerar construtores e nenhuma opção de rastreabilidade está ativada. A tabela a seguir lista o código C++ que é gerado pela transformação.
Elemento UML Saída da Transformação
Esta imagem ilustra a classe descrita no exemplo. 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)"
Class1::Class1() : 
attribute1(5)
{
    //TAREFA A FAZER Stub de método gerado automaticamente
    attribute2 = true;
}

Feedback