Transformação UML em Java


A transformação de UML para Java transforma as especificações UML 2.0 em classes Java. É possível utilizar a transformação para iniciar um projeto Java a partir das especificações de UML 2.0. Também é possível aplicar a transformação depois da inicialização para mesclar os modelos UML atualizados com o código Java existente.
 

1. Introdução

Antes de utilizar a transformação de UML em Java, você deve estar familiarizado com a criação e edição dos modelos de UML 2.0 e projetos Java.

O seguinte procedimento mostra a utilização mais simples da transformação Java.

Para transformar um modelo UML em Java:
1. Alterne para a perspectiva Modelagem.
2. Na visualização Explorador de Modelos, clique com o botão direito do mouse em uma classe UML (por exemplo, Class1).
3. Clique em Transformar > Executar Transformação > UML2 em Java.
4. A caixa de diálogo Executar Transformação é aberta. Clique no botão Criar Conteiner de Destino.
5. O diálogo Novo Projeto Java é aberto. Digite simples no campo Nome do Projeto e clique em Concluir.
6. Na caixa de diálogo Executar Transformação, clique em Concluir.

O novo projeto Java contém um pacote padrão que contém a nova classe Java: Class1.

A transformação também pode executar várias outras funções, mais complexas, como substituir nomes sem modificar o modelo de origem, substituindo o objeto UML com uma visualização, mesclando alterações no modelo UML e na origem Java e validando o modelo UML para potenciais problemas de transformação.
 

2. Detalhes da Transformação

2.1 Origem da transformação

É possível selecionar modelos, pacotes, classes não aninhadas, interfaces não aninhadas e enumerações de UML 2.0 como a origem para a transformação. A transformação continua se você selecionar outros itens como a origem, mas não transformar esses itens. Quando a transformação transforma um modelo, pacote, classe ou interface, também transforma todos os itens que esses objetos contêm. Por exemplo, quando a transformação transforma uma classe, também transforma todas as operações e propriedades dessa classe.
 

2.2 Destino da transformação

É possível selecionar qualquer projeto Java que tenha, pelo menos, uma pasta de origem como um destino de transformação.
 

2.3 Interpretação dos Objetos de Origem UML

UML Java 
Pacote Pacote Java com o mesmo nome*
Pacote estereotipado como <<perspectiva>> Ignorado
Pacote com a palavra-chave <<Análise>> ou <<análise>> Ignorado
Classe Classe Java com o mesmo nome* e visibilidade
(Classe) isLeaf  propriedade A classe Java é "final" se for true
(Classe) isAbstract propriedade A classe Java é "abstract" se for true
(Classe) Generalização A classe Java "estende" a superclasse especificada
Implementação A classe Java "implementa" a interface especificada
(Classe para Interface) Realização
A classe Java "implementa" a interface especificada
Interface Interface Java com o mesmo nome* e visibilidade 
(Interface) Generalização A interface Java "estende" a interface especificada
Enumeração
Interface Java com o mesmo nome* e visibilidade
EnumerationLiteral
O campo Java com o mesmo nome* e visibilidade
Operação Método Java com o mesmo nome* e visibilidade
(Operação) isStatic propriedade O método Java é "static" se for true
(Operação) propriedade isAbstract O método Java é "abstract" se for true
(Operação) propriedade isLeaf O método Java é "final" se for true
(Operação) como o mesmo nome de sua classe Construtor Java
(Operação) estereotipada <<criar>> Construtor Java
Parâmetro Parâmetro Java com o mesmo nome*
(Parâmetro) Digitar propriedade O parâmetro Java tem o tipo especificado que pode ser outra classe ou um tipo primitivo
(Parâmetro) Propriedade de direção O método Java tem o tipo "retornar <param>" se configurado para "retornar"; caso contrário, inclui o "tipo de <param> <nome de param>" para a assinatura do método
(Parâmetro) Propriedade de multiplicidade  Consulte a seguinte tabela que contém informações sobre multiplicidade
Propriedade  O campo Java com o mesmo nome* e visibilidade
(Propriedade) propriedade isStatic O campo Java é "static" se for true
(Propriedade) propriedade isLeaf O campo Java é "final" se for true
(Propriedade) Digitar propriedade O campo Java tem o tipo especificado que pode ser outra classe ou um tipo primitivo
(Propriedade) Propriedade de multiplicidade  Consulte a seguinte tabela que contém informações sobre multiplicidade

*  Alguns caracteres não são válidos nos identificadores Java (como um espaço). A transformação Java substitui automaticamente os caracteres inválidos com um underscore (_) para criar um identificador válido. Esta substituição pode causar conflitos de nome que evitam que a transformação gere classes e interfaces duplicadas. É possível utilizar o recurso de validação para detectar esses problemas. Para evitar esses problemas de substituição, renomeie os elementos ou utilize o recurso de mapeamento para especificar um nome alternativo que não modifica o modelo de origem.

Tipos java para propriedades e parâmetros
Multiplicidade UML Tipo Java Gerado
0..1 Atributo, ponteiro ou referência (por exemplo, String)
1 Atributo (por exemplo, String)
N (N > 1)  Matriz (por exemplo, String[])
1..*, * ou x..y  Coleta, consulte a seguinte tabela

Coletas Java para 1..*, * ou multiplicidades x..y

Propriedade isOrdered Propriedade isUnique Coleta UML
Tipo Java Gerado
Verdadeiro Verdadeiro Configurar Pedido
java.util.SortedSet
Verdadeiro Falso Seqüência
java.util.List
Falso Verdadeiro Conjunto
java.util.Set
Falso Falso Pacote
java.util.Collection

Note que os tipos gerados listados acima são padrões.  Eles podem ser substituídos na guia Avançado da configuração de transformação.

Avançado
A guia Avançado fornece algumas opções de geração de códigos.  Clique em Modelagem > Transformar > Configurar Transformações, selecione uma configuração UML em Java e selecione a guia Avançado .  A guia contém a caixa de opções Gerar getters e definidores e o grupo Coletas

Quando Gerar getters e definidores estiver selecionada, a transformação gerará um campo privado com métodos de getter e definidor para cada propriedade UML.  Se isLeaf (final) ou isReadOnly da propriedade estiverem configurados como verdadeiro, nenhum definidor é gerado. Se o isDerived da propriedade for verdadeiro, a implementação de definidor será vazia. 

Você pode especificar as coletas geradas pela transformação UML em Java no grupo Coletas .  Por exemplo, selecione "java.util.Vector" a partir do drop-downSeqüência e a transformação gerará vetores ao invés de listas.  Você também pode especificar classes de coleta customizadas, digitando o nome da classe no drop-down.  Se você digitar "custom.Bag" no drop-down Pacote , a transformação gerará pacotes ao invés de coletas. 

3. Suporte para Tecnologias de Transformação Comuns

3.1 Integração com o Suporte de Equipe

A transformação Java fornece integração com o Suporte de Equipe, permitindo registros automáticos de saída e inclusão de novos arquivos nos sistemas de controle de origem.
 

3.2 Mapeamento de transformação

É possível especificar nomes alternativos para os elementos de destino da transformação se você não deseja modificar um modelo de origem para uma transformação. Você também pode desejar especificar nomes alternativos se desejar incluir detalhes específicos para Java (como restrições de nomenclatura) nos modelos independentes da plataforma ou se a organização lógica do modelo de origem não estiver apropriada como o pacote de destino. Para suportar os nomes de destino alternativo sem modificar o modelo de origem, utilize o recurso de mapeamento de transformação.
Para utilizar o recurso de mapeamento de transformação:
1. Alterne para a perspectiva Modelagem.
2. Na visualização Explorador de Modelos, clique em um modelo UML.
3. Na barra de menu, clique em Modelagem > Transformar > Configurar Transformações.
4. Crie um novo UML2 para a Transformação Java (por exemplo, nomeie a transformação Criar mapeamento.)
5. Na página Mapeamento, clique em Criar somente modelo de mapeamento (sem transformação).
6. Especifique um nome de arquivo e clique em Executar.

Ao clicar em Criar Modelo de Mapeamento, a transformação Java cria um modelo de mapeamento que é  um modelo separado que tem um artefato para cada elemento transformável. O artefato se refere a tem o mesmo nome do elemento transformável original. Para especificar um nome alternativo para o elemento original, digite um novo nome na propriedade do nome do arquivo do artefato. Se você não alterar a propriedade do nome do arquivo do artefato, a transformação gera o elemento com o nome padrão do artefato. Se você especificar nomes alternativos para os pacotes, os nomes alternativos afetam todos os classificadores nesse pacote (a menos que o classificador especifique um nome completo). A seguinte tabela lista exemplos de nomes alternativos.
 
Origem UML Nome do arquivo do artefato de mapeamento Java Gerado
"Package1" ""  "Package1"
"Package2" "com.ibm.test" "com.ibm.test"
"Class1" em Package1  "" Package1.Class1
"Interface1" em Package2 "ITestable" com.ibm.test.ITestable
"Class2" em Package2 "com.ibm.test.Testable" com.ibm.test.Testable

Para utilizar um modelo de mapeamento, complete as seguintes etapas:
1. Alterne para a perspectiva Modelagem.
2. Na visualização Explorador de Modelos, clique em um modelo UML.
3. Na barra de menu, clique em Modelagem > Transformar > Configurar Transformações.
4. Crie uma nova Transformação UML2 para Java (por exemplo, nomeie a transformação Utilizar mapeamento.)
5. Na página Mapeamento, clique em Utilizar Modelo de Mapeamento.
6. Clique no modelo de mapeamento criado anteriormente e clique em Executar.
Quando a transformação é executada, utiliza nomes alternativos especificados no modelo de mapeamento.
 

3.3 Suporte de Visualização No Local

Se não desejar manter o modelo UML original, é possível utilizar os recursos de visualização da transformação para excluir os elementos UML e substituí-los com atalhos para elementos Java gerados. Para configurar a transformação para excluir os elementos de modelo UML, na janela Configurar Transformações, na página Comum, clique em Substituir Elementos UML. A transformação não substitui elementos se a substituição causar uma perda de dados. Por exemplo, se os elementos UML contêm diagramas, a transformação exclui os diagramas, então ela não substitui esses elementos.
 

3.4 Reaplicar

A transformação Java mescla alterações para o modelo de origem e o código de origem modificado utilizando tags "@generated" em javadocs gerados. A transformação possui elementos Java que são marcados com "@generated" e os substitui durante uma retransformação ou os exclui se forem removidos do modelo de origem. É possível reclamar a "propriedade" dos elementos, removendo a tag "@generated" que evita que a transformação sobrescreva ou exclua os elementos.
 

3.5 Validação

O plug-in de transformação Java fornece um perfil UML que você pode utilizar para validar modelos para potenciais problemas de transformação. Por exemplo, herança múltipla, generalizações circulares e conflitos de nomenclatura causam erros de compilação no código Java gerado. Para consultar uma lista de potenciais problemas que podem ocorrer no código gerado, aplique o perfil no modelo de origem e execute o recurso de validação.
 

3.6 Rastreabilidade

A transformação Java pode criar relacionamentos derivados a partir de elementos Java gerados para sua origem UML. Para criar relacionamentos derivados, na janela Configurar Transformações, na página Comum, clique em Criar origem para relacionamentos de destino. Quando o sistema visualiza o elemento Java gerado, o elemento tem um relacionamento derivado para seu elemento de origem.
 
Termos de uso | Feedback
(C) Direitos Autorais IBM Corporation 2004. Todos os Direitos Reservados.