A transformação
UML em Java (reprovado) e
a transformação
UML em Java
incluem
a tag @generated
em determinados elementos gerados. Quando você reexecuta uma transformação, ela
sobrescreve elementos com a tag @generated. A
transformação também sobrescreve qualificadores e membros de classes, além de qualificadores,
parâmetros e o corpo de métodos.Antes de executar uma transformação
UML em Java, você pode remover as tags @generated dos elementos
que a transformação não deve sobrescrever. Em vez disso, convém
editar as tags @generated inserindo caracteres após o caractere @;
por exemplo, @wasgenerated. A inserção de caracteres pode ajudá-lo a identificar
o código gerado que a transformação não sobrescreve quando você reexecuta
a transformação.
Elementos Gerados pela
Transformação
As transformações UML-to-Java incluem
a tag @generated nos
seguintes elementos gerados:- Classes
- Interfaces
- Campos
- Métodos
Protegendo o Código Gerado
Quando
você reexecuta uma transformação UML em Java, por padrão, a transformação não
sobrescreve corpos de métodos gerados por ela ou criados por um
usuário. A transformação sempre preserva os corpos de métodos entre os
comentários // iniciar-código-do-usuário e // end-user-code, independentemente
se você remover ou editar a tag @generated.
Embora a transformação
sempre preserve os corpos de métodos, a tag @generated deve ser removida ou editada
de um método para preservar as mudanças estruturais no método. Por exemplo, você
deve remover ou editar a tag @generated para o método se alterar a assinatura de método
ou renomear o método.
Se você não remover ou editar a tag @generated,
a transformação sobrescreverá os elementos aos quais a tag @generated
se aplica.
Nota: Para incluir o método no modelo UML de origem, execute a
transformação reversa.
Neste exemplo, o modelo UML de origem contém uma classe UML nomeada
Class1, que contém um atributo de número inteiro nomeado attribute e duas operações
nomeadas Operation1 e Operation2 que não possuem nenhum parâmetro. A tabela
a seguir lista exemplos de elementos que a transformação preserva e sobrescreve. A coluna Código Modificado lista o código que contém as seguintes mudanças:
- Em Class1.java, remova a tag @generated de Class1
- Em Class1.java, inclua uma herança para Class1
- Em Class1.java, altere a assinatura de método para o método Operation1,
mas não remova a tag @generated
- Em Class1.java, inclua uma implementação para o método Operation2
Ao ser reexecutada, a transformação faz o seguinte:
- Preserva a herança porque a tag @generated foi removida
- Sobrescreve as mudanças na assinatura de método para o método Operation1,
porque a tag @generated não foi removida
- Não preserva as mudanças para o corpo de método Operation1 porque a
transformação não pode localizar o método ao qual o novo corpo de método pertence
- Preserva as mudanças para o corpo de método Operation2
| Elemento de Modelo UML |
Código Gerado |
Código Modificado |
Código Gerado após a Reexecução da Transformação |
 |
Class1.java:/**
* @generated "UML para Java V5.0 (com.ibm.xtools.transform.uml2.java5.internal.UML2JavaTransform)"
*/
public class Class1 {
/**
* @generated "UML para Java V5.0 (com.ibm.xtools.transform.uml2.java5.internal.UML2JavaTransform)"
*/
private Integer attribute1;
/**
* @generated "UML para Java V5.0 (com.ibm.xtools.transform.uml2.java5.internal.UML2JavaTransform)"
*/
public void Operation1() {
// iniciar-código-do-usuário
// TAREFA A FAZER Stub de método gerado automaticamente
// end-user-code
}
/**
* @generated "UML para Java V5.0 (com.ibm.xtools.transform.uml2.java5.internal.UML2JavaTransform)"
*/
public void Operation2() {
// iniciar-código-do-usuário
// TAREFA A FAZER Stub de método gerado automaticamente
// end-user-code
}
}
|
Class1.java:/**
*/
public class Class1 extends MyClass {
/**
* @generated "UML para Java V5.0 (com.ibm.xtools.transform.uml2.java5.internal.UML2JavaTransform)"
*/
private Integer attribute1;
/**
* @generated "UML para Java V5.0 (com.ibm.xtools.transform.uml2.java5.internal.UML2JavaTransform)"
*/
public void Operation1(int parameter1) {
// iniciar-código-do-usuário
// TAREFA A FAZER Stub de método gerado automaticamente
int i = 2;
System.out.println(i);
// end-user-code
}
/**
* @generated "UML para Java V5.0 (com.ibm.xtools.transform.uml2.java5.internal.UML2JavaTransform)"
*/
public void Operation2() {
// iniciar-código-do-usuário
// TAREFA A FAZER Stub de método gerado automaticamente
int j = 2;
System.out.println(j);
// end-user-code
}
}
|
Class1.java:/**
*
*/
public class Class1 extends MyClass {
/**
* @generated "UML para Java V5.0 (com.ibm.xtools.transform.uml2.java5.internal.UML2JavaTransform)"
*/
private Integer attribute1;
/**
* @generated "UML para Java V5.0 (com.ibm.xtools.transform.uml2.java5.internal.UML2JavaTransform)"
*/
public void Operation1() {
// iniciar-código-do-usuário
// TAREFA A FAZER Stub de método gerado automaticamente
// end-user-code
}
/**
* @generated "UML para Java V5.0 (com.ibm.xtools.transform.uml2.java5.internal.UML2JavaTransform)"
*/
public void Operation2() {
// iniciar-código-do-usuário
// TAREFA A FAZER Stub de método gerado automaticamente
int j = 2;
System.out.println(j);
// end-user-code
}
}
|
Protegendo o Novo Código
A
transformação não sobrescreve os elementos Java™ que você inclui no código
gerado, a menos que inclua por engano a tag @generated nesses elementos.
Nota: Para
incluir elementos Java
no modelo UML de origem, execute a transformação reversa.
Embora
a tag @generated e as seções definidas pelo usuário ofereçam flexibilidade, para evitar possíveis
problemas, você deve fazer mudanças estruturais no modelo UML de origem em vez
do código gerado. Também é possível executar a transformação reversa para incluir
novos métodos ou atributos no modelo UML de origem.