A transformação transforma os relacionamentos de associação em váriaveis de membro no código C++. Para associações sem composição, a transformação inclui o sinal de ponteiro (*) para o qualificador de tipo do atributo. Se você especificar a multiplicidade e configurá-la para um número específico (com os mesmos intervalos altos e baixos) a transformação inclui uma especificação de matriz para o atributo.
A transformação utiliza as seguintes propriedades da extremidade de associação para gerar o código:
Propriedade |
C++ |
Nome |
Cria uma nova variável de membro com o nome especificado (executa a validação do nome) |
Visibilidade |
Determina a visibilidade da variável do membro gerado |
Por padrão, a transformação gera a herança pública para o destino do relacionamento de generalização de UML. A transformação automaticamente inclui o arquivo de cabeçalho para o destino no arquivo de cabeçalho gerado. A transformação C++ suporta múltiplas heranças.
É possível aplicar o estereótipo cpp_generalization para especificar a visibilidade (pública, protegida, particular e padrão) de determinado relacionamento de generalização.
Normalmente, um relacionamento de "Uso" indica a referência para a classe ou a enumeração. Por padrão, um relacionamento de uso se transforma em uma referência de redirecionamento no arquivo de cabeçalho gerado e uma diretiva de "inclusão" no arquivo de corpo.
Se você aplicar o estereótipo cpp_dependency e configurar seu atributo isInclusionInHeader como true, a transformação gera a diretiva de inclusão no cabeçalho.
É possível utilizar um relacionamento de "Uso" para indicar relacionamentos de "amizade" entre classes, aplicando o estereótipo cpp_friend no relacionamento. A transformação inclui a cláusula "amigo" no arquivo de cabeçalho gerado (por exemplo, "classe de amigo Class1;"). A transformação não gera um stub de corpo para as funções "amigas" e inclui automaticamente uma dependência na classe amiga do código gerado.
Uma classe UML pode implementar uma interface UML. Esse relacionamento torna uma herança pública em uma classe C++.
A transformação transforma uma classe UML com parâmetros de gabarito em uma classe de gabarito.
A transformação considera uma classe UML com um relacionamento de "Ligação" com um destino de Class1 como uma instanciação da Class1 da classe de gabarito. A transformação utiliza a substituição de parâmetro que o relacionamento de ligação especifica para resolver parâmetros formais em parâmetros verdadeiros.
Um aviso é exibido se uma classe tem mais de um relacionamento de "Ligação". Se uma classe tem mais de um relacionamento de ligação, a transformação utiliza o primeiro para gerar o código.
A transformação inclui tipos de dados de verdadeiros parâmetros para a lista de inclusão da classe instanciada.
A seguinte figura ilustra o relacionamento de instanciação que a transformação suporta em que uma classe é uma classe parametrizada e outra classe é uma classe instanciada.
A transformação não suporta padrões de uso mais complexo das classes de gabarito, incluindo variáveis estáticas nos gabaritos e classes parametrizadas que são utilizados como parâmetros formais.