A transformação gera variáveis de membros a partir dos relacionamentos de associação UML. Em associações sem composição, a transformação inclui o operador de ponteiro (*) no qualificador de tipo do atributo. A tabela a seguir lista as propriedades de extremidade da associação que a transformação utiliza para gerar elementos C++.
| Propriedade UML | Elemento C++ |
|---|---|
| Nome | Nova variável de membro |
| Visibilidade | Visibilidade da variável de membro |
A transformação gera uma herança para o destino de um relacionamento de generalização UML e suporta herança múltipla. A transformação inclui o arquivo de cabeçalho de destino no arquivo de cabeçalho gerado. Você pode especificar o escopo da herança, e se a herança é ou não virtual, configurando as propriedades do estereótipo «cpp_generalization».
Geralmente, um relacionamento de dependência referencia uma classe ou enumeração. Por padrão, a transformação gera uma referência avançada no arquivo de cabeçalho C++ e gera uma diretiva #include no arquivo de corpo.
Para transformar um relacionamento de dependência em uma diretiva #include em um arquivo de cabeçalho, configure o campo isInclusionInHeader do estereótipo «cpp_dependency» como true. A aplicação do estereótipo «cpp_friend» a um relacionamento de dependência também gera uma diretiva #include no arquivo de cabeçalho e inclui a palavra-chave friend antes do nome do elemento de dependência.
Uma classe UML pode implementar uma interface UML. A transformação transforma este relacionamento em uma herança em uma classe C++. A transformação aplicará a palavra-chave public à herança se o estereótipo «cpp_generalization» for aplicado ao relacionamento de realização e se o valor da propriedade GeneralizationKind for public.
A tabela a seguir lista o código que a transformação gera quando transforma o relacionamento de implementação entre Class2 e Interface1 e o relacionamento de dependência com o estereótipo «cpp_friend» é aplicado entre Class2 e Class1.
| Elementos UML | Saída da Transformação |
|---|---|
![]() |
#ifndef CLASS2_H
#define CLASS2_H
//Iniciar seção para o arquivo Class2.h
//TAREFA A FAZER: Incluir definições preservadas
//Encerrar seção para o arquivo Class2.h
#include "Interface1.h"
#include "Class1.h"
//@generated "UML para C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
class Class2 : Interface1
{
//Iniciar seção para Class2
//TAREFA A FAZER: Incluir atributos a serem preservados
//Encerrar seção para Class2
public:
friend class Class1;
}; //encerrar Classe Class2
#endif
|
A transformação gera uma classe de modelo a partir de uma classe UML que tenha parâmetros de modelo.
A transformação transforma uma classe UML que tenha um relacionamento de ligação com uma classe de modelo nomeada Class1 em uma instanciação da classe de modelo Class1. A transformação utiliza a substituição de parâmetros que o relacionamento de ligação especifica para resolver parâmetros formais em parâmetros reais.
Se uma classe for a consumidora em vários relacionamentos de ligação, a transformação transformará apenas o primeiro relacionamento de ligação encontrado.
A transformação inclui os tipos de dados dos parâmetros de modeloo na lista de inclusões de classes instanciadas.
A transformação não suporta padrões de uso complexo das classes de modelo, como a inclusão de variáveis estáticas em modelos e classe parametrizadas que são utilizadas como parâmetros formais.
| Elementos UML | Saída da Transformação |
|---|---|
![]() |
TemplateClass1.h:#ifndef TEMPLATECLASS1_H
#define TEMPLATECLASS1_H
//Iniciar seção para o arquivo TemplateClass1.h
//TAREFA A FAZER: Incluir definições preservadas
//Encerrar seção para o arquivo TemplateClass1.h
//@generated "UML para C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
template <class T1>
class TemplateClass1
{
//Iniciar seção para TemplateClass1
//TAREFA A FAZER: Incluir atributos a serem preservados
//Encerrar seção para TemplateClass1
private:
//@generated "UML para C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
T1 attribute1;
public:
//@generated "UML para C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
int Operation1(T1 Parameter1);
}; //encerrar Classe TemplateClass1
#endif
TemplateClass.cpp:
#include "TemplateClass1.h"
//Iniciar seção para o arquivo TemplateClass1.cpp
//TAREFA A FAZER: Incluir definições preservadas
//Encerrar seção para o arquivo TemplateClass1.cpp
//@generated "UML para C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
template <class T1> int TemplateClass1<T1>::Operation1(T1 Parameter1)
{
//TAREFA A FAZER Stub de método gerado automaticamente
return 0;
}
ParamClass1.h:
#ifndef PARAMCLASS1_H
#define PARAMCLASS1_H
//Iniciar seção para o arquivo ParamClass1.h
//TAREFA A FAZER: Incluir definições preservadas
//Encerrar seção para o arquivo ParamClass1.h
//@generated "UML para C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
class ParamClass1
{
//Iniciar seção para ParamClass1
//TAREFA A FAZER: Incluir atributos a serem preservados
//Encerrar seção para ParamClass1
}; //end Class ParamClass1
#endif
UserClass1.h:
#ifndef USERCLASS1_H
#define USERCLASS1_H
//Iniciar seção para o arquivo UserClass1.h
//TAREFA A FAZER: Incluir definições preservadas
//Encerrar seção para o arquivo UserClass1.h
#include "TemplateClass1.h"
#include "ParamClass1.h"
//@generated "UML para C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
class UserClass1
{
//Iniciar seção para UserClass1
//TAREFA A FAZER: Incluir atributos a serem preservados
//Encerrar seção para UserClass1
private:
//@generated "UML para C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"
TemplateClass1<ParamClass1> attribute1;
}; //encerrar Classe UserClass1
Binding1.h:
#ifndef BINDING1_H #define BINDING1_H //Iniciar seção para o arquivo Binding1.h //TAREFA A FAZER: Incluir definições preservadas //Encerrar seção para o arquivo Binding1.h #include "TemplateClass1.h" #include "ParamClass1.h" typedef TemplateClass1<ParamClass1> Binding1; #endif |