A transformação transforma vários tipos de relacionamentos UML em
elementos C++. O modo como a transformação transforma os relacionamentos depende do
tipo de relacionamento.
Relacionamentos de Associação UML
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 |
Relacionamentos de Generalização UML
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. É possível especificar o escopo da
herança, e se a herança é ou não virtual, configurando as
propriedades do estereótipo «cpp_generalization».
Relacionamentos de Dependência UML
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.
Relacionamentos de Realização de Interface UML
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
|
Parâmetros de Modelo UML
A transformação gera
uma classe de modelo a partir de uma classe UML que tenha parâmetros de modelo.
Relacionamentos de Ligação UML (Classes Instanciadas)
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.
No
exemplo a seguir, TemplateClass1 é uma classe de modelo com um parâmetro de
modelo chamado T1. Binding1 é uma instanciação de modelo que substitui
T1 para ParamClass1 no relacionamento de ligação entre Binding1 e TemplateClass1.
UserClass1 tem um atributo do tipo Binding1. A transformação transforma
Binding1 em um typedef, entretanto, neste exemplo, UserClass1 utiliza a instanciação
de modelo Binding1 em vez de typedef. No código, é possível utilizar
o typedef que a transformação gera ou a instanciação de modelo.
A transformação gera um typedef compatível com versões anteriores
da transformação UML-para-C++.
| 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
|