A transformação
UML em Java transforma
elementos de modelo UML em código Java™ e gera código compatível
com o Java 2 Platform, Standard Edition 1.4 (J2SE 1.4) e
o Java 2
Platform, Standard Edition 5.0 (J2SE 5.0).
Importante: A
transformação UML em Java 1.4 está reprovada e agora é chamada de transformação UML em Java (reprovado).
A transformação UML em Java (reprovado) não
contém nova funcionalidade e o comportamento da transformação é diferente da
transformação UML em Java 5.0, que é agora é chamada de transformação UML em Java.
Você deverá utilizar a transformação UML em Java,
se um aplicativo contiver código compatível com o J2SE 5.0 ou com o
J2SE 1.4 ou posterior.
Se a configuração de transformação implementar o Design Contract Management Protocol (DCMP) de Modelagem Reconciliada, você deverá especificar os elementos
de origem e destino válidos para as transformações UML em Java e Java em UML.
Origens
de Transformação Válidas
A transformação
UML em Java
gera classes Java a partir das seguintes origens UML:
- modelos UML
- Pacotes e seu conteúdo
- Classes não aninhadas e seu conteúdo
- Interfaces não aninhadas e seu conteúdo
- Enumerações não aninhadas
A transformação transforma o conteúdo de modelos, pacotes,
classes e interfaces UML. Por exemplo, ao transformar uma
classe, a transformação também transforma as operações e propriedades
da classe.
Se você selecionar um modelo ou elementos de modelo
na visualização Explorador de Projetos em vez de utilizar o editor de
Configuração de Transformação, o modelo ou elementos selecionados substituirão o modelo
ou elementos de origem especificados na configuração de transformação. A
configuração de transformação não é afetada e a origem especificada
na página Origem e Destino do editor de configuração de transformação
ou no assistente de Nova Configuração de Transformação não é alterada.
Destinos de Transformação Válidos
É possível especificar um projeto Java, ou uma pasta de origem em um projeto Java,
como o destino para a saída da transformação UML em Java.
Nomes Alternativos para a Saída Gerada
É
possível criar um modelo de mapeamento para especificar nomes alternativos para os elementos
gerados pela transformação, sem modificar o modelo de origem. Você poderá
especificar nomes alternativos se desejar incluir detalhes específicos do Java, como
restrições de nomenclatura em modelos independentes da plataforma, ou se a organização lógica
do modelo de origem não for apropriada como pacote de destino.
É possível especificar um nome qualificado, como com.ibm.NewName, ou um nome não qualificado,
como NewName. A especificação de nomes alternativos para pacotes afeta todos os classificadores
nesse pacote, a menos que o classificador especifique um nome completo. Também é
possível especificar locais alternativos no mesmo projeto para os elementos
gerados pela transformação.
Suporte para Enumerações Customizadas
É possível ativar a
geração de enumerações Java que preservam o nome e os valores
dos literais de enumeração como sequências recuperáveis. Para ativar esse recurso, selecione o UML para Java Custom Enumeration Extension quando configurar uma
transformação UML em Java.
Transformação de Máquinas de Estado de Classe Passiva
É possível ativar a
geração de código Java para máquinas de estado de classe passiva. Para ativar esse recurso, selecione a extensão
correspondente quando configurar uma transformação UML em Java. Após a execução da transformação, é possível executar o código de máquina de estado gerado como um aplicativo Java.
Transformação de Tipos de Dados XSD
Se você aplicar a
biblioteca de modelos de Tipos XSD a um modelo UML, quando executar a transformação UML em Java,
os tipos de dados XSD serão transformados em nomes qualificados Java
correspondentes. Para obter informações detalhadas de mapeamento, consulte o tópico de referência a seguir.
Tipos Parametrizados que a Transformação UML em Java Suporta
É possível especificar os seguintes tipos de coleta Java como a interface genérica
para tipos parametrizados, ou genéricos, ao criar ou configurar uma transformação
UML em Java:
- AbstractCollection
- AbstractList
- AbstractMap
- AbstractSequentialList
- AbstractSet
- ArrayList
- BitSet
- Collection
- HashMap
- HashSet
- Hashtable
- LinkedList
- List
- Map
- Conjunto
- SortedMap
- SortedSet
- Stack
- TreeMap
- TreeSet
- WeekHashMap
- Vector
A transformação não gera informações de tipos parametrizados
para outras coletas Java.
Tipos de Coleção de UML e Java varargs
O tipo de coleta
UML é determinado pelas seguintes propriedades dos elementos de modelo:
- Na visualização Propriedades, na página Geral, as propriedades Ordenado e Exclusivo
especificam o tipo de coleta UML.
- Na visualização Propriedades, na página Avançado, as propriedades É Ordenado e É Exclusivo
especificam o tipo de coleta UML.
Nota: Para especificar o tipo de coleta Java que a transformação
gera, você também pode aplicar o estereótipo «JavaCollection» ou «JavaArray»
ao atributo, associação ou operação UML. A aplicação do estereótipo substitui
as coletas padrão que você seleciona na configuração de transformação. Esses estereótipos estão disponíveis no perfil de transformação UML em Java.
Por
padrão, se o último parâmetro em uma lista de parâmetros de operação tiver
multiplicidade * ou x..*, a transformação gerará uma Java vararg. Para substituir este comportamento
padrão e gerar uma coleção Java:
- Selecione a extensão de transformação correspondente na configuração de
transformação. Consulte o tópico da tarefa relacionado abaixo para obter informações sobre
como configurar uma transformação do UML em Java.
- Aplique o estereótipo «JavaCollection» ao parâmetro ou à propriedade de UML
correspondente e configure a propriedade collectionType
do estereótipo.
Para criar uma Java vararg,
é possível aplicar a palavra-chave vararg no parâmetro
ou é possível permitir que a transformação transforme o último parâmetro
em uma lista em um vararg por padrão.
Anotação de Código-fonte Java
com Informações de Coleta UML
Se você não configurar a
transformação para gerar código compatível com o J2SE 5.0, a transformação UML em Java incluirá
comentários sobre tipos de coleta UML nos tipos de coleta Java gerados por ela. Esses comentários possibilitam que as ferramentas de desenvolvimento visual criem representações
visuais exatas dos tipos de coleta Java.
Se você especificar
uma multiplicidade de * em um atributo UML e não alterar as informações de coleta Java
na configuração de transformação, por padrão, a transformação UML em Java gerará
um conjunto Java.
A
tabela a seguir mostra um exemplo de um relacionamento de associação entre Class1
e Class2; o relacionamento de associação especifica uma multiplicidade de 1..*. A tabela também mostra trechos do código-fonte que a transformação gera
utilizando os valores padrão na configuração de transformação e a representação
visual do relacionamento de associação.
Suponha que a transformação
não esteja configurada para criar relacionamentos de rastreio entre os elementos de modelo de origem
e o código gerado.
| Elementos UML |
Saída da Transformação UML em Java |
Representação Visual da Saída da Transformação |
 |
A transformação gerará o seguinte código-fonte
se você desmarcar a caixa de opção Utilizar Java 5 na configuração
de transformação:public class Class1 {
/**
* <!-- begin-UML-doc -->
* <!-- encerrar-doc-UML -->
* @uml.annotations para <code>class2</code>
* collection_type="Package1.Class2"
* @generated "UML to Java (com.ibm.xtools.transform.uml2.java5.internal.UML2JavaTransform)"
*/
private Set class2;
}
|
 |
A transformação gerará o seguinte código-fonte
se você selecionar a caixa de opção Utilizar Java 5 na configuração
de transformação:public class Class1 {
/**
* <!-- begin-UML-doc -->
* <!-- encerrar-doc-UML -->
* @generated "UML to Java (com.ibm.xtools.transform.uml2.java5.internal.UML2JavaTransform)"
*/
private Set<Class2> class2;
}
|
Se você executar a transformação Java em UML utilizando o
código gerado no exemplo acima como a origem da transformação, os seguintes itens
serão gerados:
- Em Class1, a transformação gera um atributo UML chamado class2
com o estereótipo «JavaCollection» aplicado; a propriedade collectionType
é configurada como java.util.Collection e a multiplicidade é configurada como *.
- Em Class2, a transformação gera um atributo UML do tipo Class
chamado class1, com uma multiplicidade configurada como 1 e nenhum estereótipo aplicado.
A seguinte imagem mostra a representação visual da classe UML
gerada pela transformação Java em UML:
Geração de Informações de Javadoc
Ao configurar a transformação
UML em Java para gerar código J2SE 5.0, a transformação
gera informações de Javadoc para os elementos Java que ela suporta. As
informações de Javadoc geradas são compostas dos seguintes componentes:
- O conteúdo da propriedade documentation para um elemento UML, que a transformação coloca entre
as seguintes tags:
/*
* <!-- begin-UML-doc -->
* <!-- encerrar-doc-UML -->
*/
- Anotações que a transformação gera
- Informações geradas pelo modelo de comentários JDT para o tipo Java
correspondente
Nota: Para customizar as informações de Javadoc que um modelo JDT gera, clique em
; e depois expanda
Comentários, selecione um tipo Java, e no campo
Padrão para esse tipo, customize o comentário
Java.
Preservação de Informações de Javadoc de Releases Anteriores de Rational Software Architect
Para preservar as informações entre as tags
Javadoc que foram geradas em liberações anteriores do
produto, execute a transformação Java para UML uma vez para migrar
as informações de Javadoc para a propriedade da documentação
do elemento correspondente no modelo UML.Nota: Para gerar tags Javadoc que foram geradas em releases anteriores do produto, é possível modificar os modelos de código no Java Development Toolkit.
Documentação de Relacionamentos
na Saída da Transformação
A transformação
UML em Java
transforma a documentação de relacionamentos UML em informações Javadoc para os
seguintes relacionamentos UML:
- Associações
- Generalizações
- Implementações
- Realizações
Para transformar a documentação de relacionamentos de uso em informações Javadoc,
é necessário configurar a transformação
UML em Java para
gerar código J2SE 5.0.
A transformação inclui a documentação para
relacionamentos de generalização, implementação e realização com a documentação UML
para a classe de origem em cada relacionamento.
A transformação também inclui
a documentação para esses relacionamentos com as informações Javadoc para a
classe de destino gerada de cada relacionamento.
Para associações, a
transformação inclui a documentação UML para a documentação de cada propriedade
associada.
Preservação de Palavras-chave Java
Os modelos UML não podem
representar várias palavras-chave Java, tais como strictfp, native, transient
e volatile. Para preservar essas palavras-chave ao executar a transformação
UML em Java, você deve modelar essas palavras-chave como
palavras-chave UML.
Identificadores de Elementos de Modelo na Saída da Transformação
Quando você executa uma transformação que está configurada para
criar relacionamentos de rastreio, para cada elemento que suporta a tag @generated,
a transformação anexa um identificador exclusivo à tag @generated. Esse identificador especifica o elemento de modelo UML
a partir do qual o elemento Java foi gerado, como neste exemplo: *
@generated "sourceid:platform:/resource/UMLProject/SimpleModel.emx#_83GpoBtIEdyLaOwyRX_ZMQ". Se
você renomear os elementos no modelo UML de origem, esse identificador exclusivo ativará
a funcionalidade de mesclagem para refatorar e mesclar os elementos apropriados.
A transformação Java–para-UML, ou reversa, também pode
utilizar os identificadores para combinar elementos correspondentes entre o projeto Java
e o modelo UML. Se aplicáveis, as mudanças nos elementos do código-fonte Java serão tratadas como
modificações ou como refatoração de código em vez de inclusões e exclusões no
código gerado.
Representações Visuais de Elementos Java Gerados
Se
desejar que a saída da transformação
UML em Java seja
o artefato de engenharia primário, você poderá especificar que a transformação
implemente o Design Contract Management Protocol (DCMP) conhecido como
Modelagem Combinada.
Especificando esse DCMP, a transformação cria um relacionamento diferente
entre os objetos UML de origem e o código Java gerado. A criação de relacionamentos diretos
exclui os objetos UML de origem e os substitui pelas representações visuais
dos objetos de origem.
Nota: É possível configurar uma preferência de transformação
para especificar se deve exibir uma mensagem de aviso antes de substituir elementos
de modelo de UML de origem por ponteiros nos elementos gerados. Para obter
informações adicionais sobre como configurar preferências de transformação, consulte
o link para o tópico da tarefa relacionado denominado "Transformando Modelos" no final
deste tópico.
Se a transformação não puder transformar elementos UML,
tais como elementos aninhados, ela moverá esses elementos para o pacote mais próximo. Se
a transformação não puder mover um elemento de modelo para o pacote mais próximo, ela
excluirá o elemento.
Para evitar possíveis problemas, você deve colocar o
modelo de origem sob o controle de versão.
Relacionamentos
de Rastreio entre os Elementos de Modelo de Origem e a Saída da Transformação
É possível utilizar a transformação UML em Java para
criar relacionamentos de rastreio dos elementos de modelo de origem UML com as classes Java geradas. Depois,
é possível visualizar os relacionamentos de rastreio em um diagrama de tópicos, criando e executado
consultas do modelo.
A criação de
relacionamentos de rastreio é útil em projetos grandes que podem conter vários modelos
e várias configurações de transformação. Você também pode criar e executar consultas de
rastreabilidade que exibem como a saída da transformação está relacionada às especificações de software
e aos elementos de modelo.
Quando você executa uma transformação que está configurada para
criar relacionamentos de rastreio, para cada elemento que suporta a tag @generated,
a transformação anexa um identificador exclusivo à tag @generated. Se
você renomear os elementos no modelo UML de origem, esse identificador exclusivo ativará
a funcionalidade de mesclagem para refatorar e mesclar os elementos apropriados.Nota: Se mover um elemento UML fora do escopo
de sua classe de nível mais alto, quando você reexecutar a transformação, o algoritmo de mesclagem
não refatorará ou mesclará o elemento renomeado porque o escopo do elemento
foi alterado.
Quando você reexecutar a transformação, se necessário, a
transformação utilizará o identificador no código-fonte para combinar os elementos
correspondentes e, em seguida, alterará o código para refletir as mudanças no modelo. Por
exemplo, se você renomear uma operação UML no modelo de origem e reexecutar a transformação,
a transformação renomeará o método Java gerado anteriormente
e preservará o corpo do método, em vez de excluir o método gerado anteriormente
e incluir um novo método.
A transformação Java–para-UML, ou reversa, também pode
utilizar os identificadores para combinar elementos correspondentes entre o projeto Java
e o modelo UML. Se aplicáveis, as mudanças nos elementos do código-fonte Java serão tratadas como
modificações ou como refatoração de código em vez de inclusões e exclusões no
código gerado.
Para
visualizar os relacionamentos entre os elementos de modelo de origem e a saída da
transformação, é possível visualizar o elemento de modelo de origem em um diagrama e arrastar o
elemento de código gerado pela transformação para esse diagrama. A tabela
a seguir lista o seguinte: a representação UML para um elemento de modelo de
origem nomeado Class1, que contém um atributo de número inteiro nomeado attribute1
e duas operações nomeadas Operation1 e Operation2, que não possuem nenhum
parâmetro; o código gerado pela transformação; o diagrama de classes
que mostra o relacionamento de rastreio entre os elementos.| Elemento UML |
Saída da Transformação |
Relacionamento de Rastreio em
um Diagrama de Classes |
 |
/**
*
*/
package Package1;
import java.util.Collection;
/**
* <!-- begin-UML-doc -->
* <!-- encerrar-doc-UML -->
* @uml.annotations
* derived_abstraction="platform:/resource/UMLProject/Model.emx#_9YlH8CpPEdyn7_VFIWTp4A"
* @generated "sourceid:platform:/resource/UMLProject/Model.emx#_9YlH8CpPEdyn7_VFIWTp4A"
*/
public class Class1 {
/**
* <!-- begin-UML-doc -->
* <!-- encerrar-doc-UML -->
* @generated "sourceid:platform:/resource/UMLProject/Model.emx#__8ptgOSnEdyXH8PWExuX2g"
*/
private Integer attribute1;
/**
* @return the attribute1
* @generated "sourceid:platform:/resource/UMLProject/Model.emx#__8ptgOSnEdyXH8PWExuX2g?GETTER"
*/
public Integer getAttribute1() {
// iniciar-código-do-usuário
return attribute1;
// end-user-code
}
/**
* @param theAttribute1 o attribute1 a ser configurado
* @generated "sourceid:platform:/resource/UMLProject/Model.emx#__8ptgOSnEdyXH8PWExuX2g?SETTER"
*/
public void setAttribute1(Integer theAttribute1) {
// iniciar-código-do-usuário
attribute1 = theAttribute1;
// end-user-code
}
/**
* <!-- begin-UML-doc -->
* <!-- encerrar-doc-UML -->
* @generated "sourceid:platform:/resource/UMLProject/Model.emx#_RDsjcOSnEdyXH8PWExuX2g"
*/
public void Operation1() {
// iniciar-código-do-usuário
// TAREFA A FAZER Stub de método gerado automaticamente
// end-user-code
}
/**
* <!-- begin-UML-doc -->
* <!-- encerrar-doc-UML -->
* @generated "sourceid:platform:/resource/UMLProject/Model.emx#_R04v0OSnEdyXH8PWExuX2g"
*/
public void Operation2() {
// iniciar-código-do-usuário
// TAREFA A FAZER Stub de método gerado automaticamente
// end-user-code
}
}
|
 |
A
transformação não altera o modelo de origem quando você especifica para a transformação
gerar relacionamentos de rastreio.
Integração com a Equipe de Suporte
A UML em Java fornece funcionalidade
de integração com os sistemas de controle de versão
IBM®
Rational Team Concert,
CVS,
Rational
ClearCase,
e
Rational
ClearCase LT,
que possibilita efetuar o registro de saída dos arquivos automaticamente ou incluir novos arquivos. É necessário ativar os recursos de equipe
para trabalhar com os sistemas de gerenciamento de configuração.