Algumas vezes, especialmente nas fases preliminares do design, não é exatamente claro que elemento de modelo deve ser usado, assim é possível cometer um erro, por exemplo, usar uma classe UML em vez de um componente UML. Neste caso, anteriormente já foi necessário executar manualmente várias etapas para substituir um elemento por outro: criar um novo elemento, copiar a documentação e tudo que era possível copiar do elemento antigo para o novo, reorientar todos os relacionamentos, excluir o elemento antigo (o que também excluiu todas as referências a ele), recriar todas as referências ao novo elemento, e corrigir a forma e o layout do conector.
O recurso de conversão do elemento introduzido no IBM® Rational® Software Architect Versão 8.0.2 automatiza todas essas etapas, de modo que economiza tempo e reduz a chance de cometer erros associados ao processamento manual.
Observação: os widgets
Todos os exemplos neste
tutorial são baseados em um modelo UML, mas a mesma funcionalidade
funciona para modelos BPMN.
É possível converter os elementos do editor de diagrama ou o Explorador de Projetos. Em ambos os casos, como mostram as Figuras 1 e 2, o menu de elementos inclui um item Refactor que oferece um Convert to New Element .
Figura 1. Opção do menu Refactor na forma de diagrama ou conector
Figura 2. Opção Refactor em um elemento de modelo do Explorador de Projetos
O recurso de conversão também está disponível nas formas do diagrama e conectores que fazem referência a elementos semânticos de outro modelo. Se esse recurso não está no menu, isso significa que o elemento não pode ser automaticamente convertido, porque não há nenhuma opção conhecida para o novo tipo. Por exemplo, alguns elementos relacionados à sequência e diagramas de sincronização não podem ser convertidos automaticamente.
É possível selecionar vários elementos do mesmo tipo de uma vez para convertê-los ao mesmo novo tipo.
Configurar os Modelos a Serem Usados neste Exemplo Prático
A maior parte deste artigo usa os seguintes exemplos:
- Crie quatro modelos:
- PackageA e PackageB em um projeto denominado Project1
- PackageC e PackageD em um projeto denominado Project2
- Inclua elementos nesses modelos (mostrados na Figura 3):
- No PackageD:
- Crie um diagrama de classe e, usando a paleta, crie quatro classes com os seguintes nomes: MyName1D, Class1, Class2 e Class3.
- Inclua um atributo e uma operação na classe MyName1D
e aplique o estereótipo
realizationnele. - Crie uma associação entre MyName1D e Class3.
- Crie uma dependência entre Class2 e MyName1D.
- Crie um relacionamento de importação de elemento entre MyName1D e Class1.
- No PackageC:
- Crie um diagrama de classe e, usando a paleta, crie uma classe denominada Class1C.
- Arraste o nó MyName1D do Explorador de Projetos para esse diagrama.
- Crie uma associação entre Class1C e MyName1D.
- Arraste o nó Class1C do Explorador de Projetos para o diagrama criado na Etapa 1.
- Crie uma associação entre Class1C e MyName1D.
- No PackageB:
- Crie um diagrama de classe e, usando a paleta, crie uma classe denominada Class1B.
- Arraste o nó MyName1D do Explorador de Projetos para esse diagrama e altere a aparência da forma criada. Por exemplo, altere a cor de preenchimento para marrom e a cor da fonte para branco.
- Crie uma dependência entre Class1B e MyName1D.
- No PackageA:
- Crie um diagrama de classe e, usando a paleta, crie uma classe denominada Class1A.
- Inclua um atributo na Class1A e configure seu tipo para se MyName1D.
- No PackageD:
Figura 3. Configuração dos exemplos neste artigo
Selecione um novo tipo de elemento
- Clique com o botão direito do mouse na forma da classe MyName1D (no PackageD), e selecione Refactor > Convert to New Element no menu.
- No assistente Convert to New Element (Figura 4), selecione um novo tipo de elemento e o escopo de alteração.
Figura 4. Página do assistente de conversão de elemento para selecionar o tipo de elemento e escopo
Dica:
A árvore de seleção de tipo de elemento tem uma
estrutura similar à paleta do diagrama. É possível navegar manualmente a
árvore, ou inserir um nome de tipo de elemento, parcial ou inteiro, no
campo do filtro na parte superior, onde o prompt diz "Enter filter text
here." É possível usar o sinal de mais
para expandir o conteúdo da árvore, e o sinal de menos
para
reduzi-lo.
Observe que a árvore inclui somente aqueles tipos de elementos aos quais o elemento selecionado (em seu contêiner atual) pode ser convertido. Uma regra geral é que um tipo de elemento pode ser convertido apenas a um tipo de elemento do mesmo domínio de modelagem. Por exemplo, um elemento UML pode ser convertido para outro elemento UML, e um elemento BPMN pode ser convertido para outro elemento BPMN. Outra regra geral é que se você está convertendo um tipo de elemento relacionado à forma, poderá escolher apenas outro tipo de elemento relacionado à forma. Por exemplo, não é possível converter uma class para uma association. O mesmo acontece para relacionamentos; é possível converter um tipo de relacionamento em outro tipo de relacionamento. A única exceção é association class, que pode ser convertido para outro tipo de relacionamento ou para uma class. Neste exemplo, a conversão em elementos encontrados na gaveta Composite Structure Palette não pode ser executada; assim, esses elementos não são incluídos na árvore de tipo de elemento.
Selecionar o Escopo da Alteração
Quando um elemento é convertido para outro tipo, o identificador de elemento (ID) exclusivo não é mantido. Em vez disso, um novo ID é atribuído (consulte a nota do fim desta seção para obter uma breve explicação). Isso significa que todas as referências a esse elemento precisam ser atualizadas ou elas se tornarão não resolvidas. Essas referências podem pertencer ao mesmo modelo, a outro modelo no mesmo projeto, a outro projeto na área de trabalho ou a um modelo que está fora do espaço de trabalho. É possível controlar que modelos afetados serão atualizados pela opção escolhida na lista "Change Scope" e refinar posteriormente isso selecionando quais recursos afetados nesse escopo devem ser excluídos (consulte a seção a seguir para obter mais detalhes).
A lista "Change scope" na página do assistente de conversão de elemento, mostrada na Figura 4, concede estas opções:
- Área de trabalho
- Se você aceitar o escopo padrão da área de trabalho, as referências
ao elemento convertido serão atualizadas em todos os modelos afetados
no espaço de trabalho.
- Project
- Escolhendo o escopo Project, você restringe a atualização de
referência somente aos modelos afetados que estejam no mesmo projeto
que o modelo que contém o elemento convertido.
- Model
- Finalmente, é possível considerar apenas referências no mesmo modelo
que contém o elemento convertido. Neste caso, escolha o escopo Model.
As opções de escopo Project e Model são úteis para aqueles casos em que você está confiante de que não há nenhuma referência ao elemento convertido fora do escopo escolhido ou quando não se deseja atualizar as referências. Selecionar uma dessas duas opções reduzirá o escopo da pesquisa para referências e acelerará, desse modo, o processo de conversão (o que pode ser especialmente observável em uma área de trabalho grande). No entanto, todas as referências ao elemento convertido que não forem atualizadas durante a conversão não serão resolvidas. Atualmente, o único modo de reparar as referências não resolvidas é substituí-las manualmente pelas referências ao elemento convertido.
Observação: os widgets
Como
mencionado no início desta seção, o identificador de elemento (ID)
exclusivo não é mantido durante o processo de conversão. Isso se dá
porque usamos o termo "conversão", não "transmutação". O motivo para não
manter o valor do ID é que há um alto risco de dano para modelos que
fazem referência ao elemento convertido, mas não foram incluídos no
escopo da mudança de conversão. Se o novo elemento tinha o ID original,
essas referências não seriam resolvidas a não ser que incorretamente.
Isso pode ocasionar dano ao modelo, o que pode impedir a abertura do modelo
afetado ou de alguns de seus diagramas.
Verifique o relatório "Affected resources"
- No assistente de conversão, selecione o tipo de elemento Interface e deixe o escopo de mudança da área de trabalho padrão selecionado.
- Clique em Next.
É possível agora examinar e, possivelmente, desmarcar as caixas de seleção de algum recurso afetado. A Figura 5 mostra a lista de recursos afetados para esse exemplo, quando os modelos PackageA e PackageB estão fechados e PackageC e PackageD estão abertos.
Na Figura 5, observe que PackageC e PackageD estão marcados como obrigatórios. Isso significa que eles foram incluídos na conversão: PackageD porque ele contém o elemento de classe MyName1D a ser convertido e PackageC porque ele contém uma referência ao elemento MyName1D e está aberto.
Figura 5. Assistente de conversão de elemento, visualização "Affected resources"
PackageA e PackageB também contêm referências ao elemento convertido, mas eles são fechados, assim não é obrigatório atualizá-los. Fechar o modelo PackageC significaria que as mudanças nele não seriam mais obrigatórias. Mudanças no próprio modelo (PackageD) sempre seriam obrigatórias. É possível desmarcar as caixas de seleção de qualquer recurso não obrigatório da lista se não desejar atualizar suas referências. Se você desmarcar um ou mais recursos obrigatórios, obterá uma mensagem de erro e não será capaz de prosseguir com a conversão.
- Agora, clique no botão Back, selecione o escopo de mudança Model e clique em Next.
Como o escopo de mudança do modelo está selecionado, somente o PackageD está listado como um recurso afetado. Se você clicar em OK a esta altura, obterá uma mensagem de erro (veja a Figura 6), porque o PackageC -- um recurso afetado obrigatório -- não está incluído no escopo da mudança.
Figura 6. Resultados do erro porque o PackageC é obrigatório, mas não estão incluídos no escopo
- Clique em Cancel para fechar o assistente.
Revise os resultados da conversão
- Clique com o botão direito do mouse na configuração da classe MyName1D e selecione Refactor > Convert to New Element .
- Na árvore de seleção do tipo de elemento, expanda o nó Class e selecione Interface.
- Deixe o escopo de mudança Workspace padrão e clique em OK.
Se alguns dos recursos afetados forem de somente leitura, você será avisado para torná-los graváveis. Se optar por não fazê-lo, a conversão será cancelada.
Se você tiver grandes modelos na sua área de trabalho e não tiver executado uma procura ainda, poderá levar certo tempo até que a indexação da procura seja concluída, de modo que a procura por referências possa ser executada. É possível monitorar a barra de progresso. Quando o assistente fecha, a conversão do elemento é concluída. Observe os seguintes resultados:
- A classe MyName1D é agora a interface MyName1D.
- A forma específica da classe que estava apontando para a classe MyName1D é agora uma forma específica da interface que aponta para a interface MyName1D.
- Operation1() e attribute1 da classe convertida são movidos para a interface resultante.
- O estereótipo
realizationanteriormente aplicado na classe MyName1D também é aplicado à interface MyName1D convertida. - Todos os relacionamentos que têm MyName1D como origem ou destino são preservados. Suas representações nos diagramas (conectores) também são preservadas no PackageD e em outros modelos (PackageB e PackageC).
- Todas as formas de diagrama e conectores relacionados ao elemento convertido preservou seus layouts para formas (local e tamanho) e roteamento para conectores.
- No PackageC, a configuração da classe no diagrama que apontava para a classe MyName1D convertida do PackageD é agora uma forma de interface que aponta para a interface MyName1D.
- O mesmo acontece para a forma no PackageB. Observe também que sua aparência é preservada.
- No PackageA, o attribute1 da Class1A era a classe MyName1D da Classe, mas agora é a interface MyName1D.
Se não usar a operação de conversão neste exemplo, mas fizer as mudanças manualmente, você terá de fazer cada uma das mudanças acima manualmente.
Se obtiver avisos, decida se deseja continuar ou cancelar
No exemplo anterior, todos os valores dos recursos do elemento convertido foram preservados. No entanto, algumas vezes o elemento convertido tem recursos que não podem ser contidos pelo novo tipo de elemento. Por exemplo, você converterá agora uma classe em um pacote (não é muito provável a necessidade de fazer esse tipo de conversão, mas ela serve para demonstrar a perda de dados que pode ocorrer).
- Desfaça a conversão anterior usando a combinação de teclas CTRL + Z ou Edit > Undo .
- Clique com o botão direito do mouse na configuração da classe MyName1D e, no menu, selecione Refactor > Convert to New Element.
- Na árvore de seleção de tipo de elemento, expanda o nó Class e selecione Package.
- Deixe o escopo de mudança Workspace padrão e clique em OK.
A Figura 7 mostra uma parte do resultado da conversão e a Figura 8 mostra os avisos de perda de dados, quais elementos convertidos perderam dados específicos e que recursos foram afetados.
- Revise os resultados e quaisquer avisos de perda de dados.
Figura 7. Resultado parcial da conversão classe para pacote
Figura 8. Amostra de avisos de perda de dados
Neste exemplo, há vários recursos que não puderam ser preservados durante
a conversão. O attribute1 da Class1 é do tipo MyName1D, mas o novo tipo
do elemento MyName1D é "package." Os atributos não podem ser do tipo
pacote, assim o attribute1 não tem mais um tipo. Além disso, como um
pacote não pode ser origem ou destino de uma associação, dois
relacionamentos foram excluídos. Um pacote não tem atributos e
operações; assim, o attribute1 e a operation1 que estavam configurados na
classe MyName1D foram perdidos. Finalmente,
realization não é aplicável ao pacote; assim,
ela não foi aplicada ao MyName1D depois de sua conversão para um pacote.
- Depois de revisar as mensagens de aviso, se decidir por reverter as alterações relacionadas à conversão, clique em Undo. Caso contrário, clique em OK. Isso indefere as mensagens de aviso e torna efetivos os resultados da conversão.
Converter Formas ou Conectores sem Semântica
Até agora, exploramos a conversão de elementos semânticos. A conversão também pode ser aplicada a formas de diagrama e conectores que não tenham referências semânticas (formas geométricas). Por exemplo, uma forma geométrica Oval pode ser convertida para uma classe UML. Essa opção será útil se você estiver fazendo um rascunho de um modelo usando formas geométricas e, posteriormente, usar esse para criar o modelo real.
- Por exemplo, crie dois ovais em um diagrama com uma linha entre eles.
- Selecione ambos os ovais, clique com o botão direito do mouse e selecione Refactor > Convert to New Element .
Figura 9. Um exemplo de conversão de formas geométricas
Como as formas geométricas não têm nenhuma referência semântica, não há nenhuma necessidade da janela de diálogo do tipo de assistente usada para elementos semânticos. É possível usar a árvore de seleção de tipo de elemento do mesmo modo para elementos semânticos.
- Por exemplo, digite
Classna caixa do filtro, e pressione Enter.
A janela pop-up se fecha e os ovais selecionados são convertidos a classes.
Figura 10. Resultado da conversão de duas formas geométricas ovais em classes
Depois da conversão dos ovais em classes no exemplo anterior, é possível converter uma linha entre eles em um relacionamento. Uma linha que conecta duas formas com referências semânticas pode ser convertida em qualquer relacionamento que seja suportado entre os elementos semânticos que ele conecta. Neste exemplo, a linha pode ser convertida para qualquer tipo de relacionamento permitido entre duas classes.
Aprender
- Para saber mais sobre o Rational Software Architect, comece pela página do developerWorks. Explore também a visão geral do produto e as centro de informações, onde você encontra instruções de instalação e uso.
- Visite a área do software Rational no developerWorks para obter recursos técnicos e boas práticas para os produtos do Rational Software Delivery Platform.
- Fique por dentro dos eventos técnicos e webcasts do developerWorks com foco em uma variedade de produtos da IBM e tópicos do segmento de mercado de TI.
- Participe de um briefing gratuito do developerWorks Live! para se atualizar rapidamente sobre produtos e ferramentas IBM, bem como tendências do segmento de mercado de TI.
- Acompanhe Demos on demand do developerWorks, variando de demos de instalação e configuração de produtos para iniciantes a funcionalidades avançadas para desenvolvedores experientes.
- Melhore suas qualificações. Consulte o catálogo Catálogo de treinamento e certificação do Rational que inclui muitos tipos de cursos em uma ampla variedade de tópicos. É possível realizar alguns deles em qualquer local, a qualquer momento, e muitos dos cursos para iniciantes são gratuitos.
Obter produtos e tecnologias
- Faça o download de uma ou de ambas as versões de teste:
- Avalie o software IBM da forma que melhor lhe convier: faça o download da versão de avaliação, experimente-o on-line, use-o em um ambiente de nuvem ou passe algumas horas no SOA Sandbox aprendendo a implementar Arquitetura Orientada a Serviços de forma eficiente.
Discutir
- Participe da discussão no fórum Rational Development Tools.
- Compartilhe seu conhecimento e ajude outros a usar o software Rational, escrevendo um artigo para o developerWorks. Você terá um público mundial, organização RSS, reconhecimento de autoria e uma biografia, e o benefício da edição e produção profissional no Web site do Rational no developerWorks. Descubra quais são as características de um bom artigo do developerWorks e como realizá-lo.
- Siga o software Rational no Facebook e no Twitter (@ibmrational), e inclua seus comentários e solicitações.
- Faça e responda a perguntas e aumente seus conhecimentos participando dos fóruns do Rational, cafésée a wikis.
- Entre em contato com outras pessoas que compartilham seus interesses fazendo parte da comunidade do developerWorks , e respondendo aos blogs de desenvolvedores.

Lidija Grahek é um desenvolvedor de software senior responsável pelo design e implementação do recurso de conversão de elemento. Grahek passou a fazer parte da IBM em 2006 e trabalhou em diversos recursos nos componentes do Eclipse de software livre Graphical Modeling Framework (GMF) e Graphical Editing Framework (GEF), além dos componentes Business Process Modeling Notation (BPMN) e Unified Modeling Language (UML) do software de design e modelagem do IBM Rational Software Architect.