Avançar para a área de conteúdo

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

Na primeira vez que você efetua sign in no developerWorks, um perfil é criado para você. Informações selecionadas do seu perfil developerWorks são exibidas ao público, mas você pode editá-las a qualquer momento. Seu primeiro nome, sobrenome (a menos que escolha ocultá-los), e seu nome de exibição acompanharão o conteúdo que postar.

Todas as informações enviadas são seguras.

  • Fechar [x]

Ao se conectar ao developerWorks pela primeira vez, é criado um perfil para você e é necessário selecionar um nome de exibição. O nome de exibição acompanhará o conteúdo que você postar no developerWorks.

Escolha um nome de exibição de 3 - 31 caracteres. Seu nome de exibição deve ser exclusivo na comunidade do developerWorks e não deve ser o seu endereço de email por motivo de privacidade.

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

Todas as informações enviadas são seguras.

  • Fechar [x]

Converter Elementos de Modelo UML e BPMN em Tipos Diferentes Automaticamente

Como usar o assistente de conversão de elemento de modelo no IBM Rational Software Architect 8.0.2

Lidija Grahek, Advisory Software Developer, IBM Canada
photo of Lidija Grahek
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.

Resumo:  Este artigo descreve o recurso de conversão de elemento apresentado no IBM® Rational® Software Architect Versão 8.0.2. Especialmente, em fases preliminares do design, não é exatamente claro que elemento de modelo usar, assim é possível usar uma classe UML e, posteriormente, descobrir que você precisa de um componente UML, em vez disso. Para alterá-la, anteriormente era necessário executar manualmente várias etapas para substituir um elemento por outro. O novo recurso de conversão de elemento automatiza todas essas etapas, de modo que você economiza tempo e reduz a chance de cometer erros associados ao processamento manual.

Data:  06/Set/2011
Nível:  Introdutório Também disponível em :   Inglês
Atividade:  891 visualizações
Comentários:  


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.

Ativar o Recurso de Conversão

É 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:

  1. Crie quatro modelos:
    1. PackageA e PackageB em um projeto denominado Project1
    2. PackageC e PackageD em um projeto denominado Project2
  2. Inclua elementos nesses modelos (mostrados na Figura 3):
    • No PackageD:
      1. Crie um diagrama de classe e, usando a paleta, crie quatro classes com os seguintes nomes: MyName1D, Class1, Class2 e Class3.
      2. Inclua um atributo e uma operação na classe MyName1D e aplique o estereótipo realization nele.
      3. Crie uma associação entre MyName1D e Class3.
      4. Crie uma dependência entre Class2 e MyName1D.
      5. Crie um relacionamento de importação de elemento entre MyName1D e Class1.
    • No PackageC:
      1. Crie um diagrama de classe e, usando a paleta, crie uma classe denominada Class1C.
      2. Arraste o nó MyName1D do Explorador de Projetos para esse diagrama.
      3. Crie uma associação entre Class1C e MyName1D.
      4. Arraste o nó Class1C do Explorador de Projetos para o diagrama criado na Etapa 1.
      5. Crie uma associação entre Class1C e MyName1D.
    • No PackageB:
      1. Crie um diagrama de classe e, usando a paleta, crie uma classe denominada Class1B.
      2. 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.
      3. Crie uma dependência entre Class1B e MyName1D.
    • No PackageA:
      1. Crie um diagrama de classe e, usando a paleta, crie uma classe denominada Class1A.
      2. Inclua um atributo na Class1A e configure seu tipo para se MyName1D.

Figura 3. Configuração dos exemplos neste artigo


Selecione um novo tipo de elemento

  1. Clique com o botão direito do mouse na forma da classe MyName1D (no PackageD), e selecione Refactor > Convert to New Element no menu.
  2. 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"

  1. 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.
  2. 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.

  1. 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

  1. Clique em Cancel para fechar o assistente.

Revise os resultados da conversão

  1. Clique com o botão direito do mouse na configuração da classe MyName1D e selecione Refactor > Convert to New Element .
  2. Na árvore de seleção do tipo de elemento, expanda o nó Class e selecione Interface.
  3. 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 realization anteriormente 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).

  1. Desfaça a conversão anterior usando a combinação de teclas CTRL + Z ou Edit > Undo .
  2. Clique com o botão direito do mouse na configuração da classe MyName1D e, no menu, selecione Refactor > Convert to New Element.
  3. Na árvore de seleção de tipo de elemento, expanda o nó Class e selecione Package.
  4. 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.

  1. 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.

  1. 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.

  1. Por exemplo, crie dois ovais em um diagrama com uma linha entre eles.
  2. 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.

  1. Por exemplo, digite Class na 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.


Recursos

Aprender

Obter produtos e tecnologias

Discutir

Sobre o autor

photo of Lidija Grahek

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.

Ajuda para Relatar Abuso

Relatar abuso

Obrigado. Esta entrada foi sinalizada para atenção do moderador.


Ajuda para Relatar Abuso

Relatar abuso

Falha no envio do Relatório de abuso. Tente novamente mais tarde.


developerWorks: Registre-se


Precisa de um ID IBM?
Esqueceu seu ID IBM?


Esqueceu sua senha?
Alterar sua senha

Ao clicar em Enviar, você concorda com os termos de uso do developerWorks.

 


Na primeira vez que você efetua sign in no developerWorks, um perfil é criado para você. Informações selecionadas do seu perfil developerWorks são exibidas ao público, mas você pode editá-las a qualquer momento. Seu primeiro nome, sobrenome (a menos que escolha ocultá-los), e seu nome de exibição acompanharão o conteúdo que postar.

Selecione seu nome de exibição

Ao se conectar ao developerWorks pela primeira vez, é criado um perfil para você e é necessário selecionar um nome de exibição. O nome de exibição acompanhará o conteúdo que você postar no developerWorks.

Escolha um nome de exibição de 3 - 31 caracteres. Seu nome de exibição deve ser exclusivo na comunidade do developerWorks e não deve ser o seu endereço de email por motivo de privacidade.

(Deve possuir de 3 a 31 caracteres.)


Ao clicar em Enviar, você concorda com os termos de uso do developerWorks.

 


Classificar este artigo

Comentários

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=80
Zone=Rational
ArticleID=756015
ArticleTitle=Converter Elementos de Modelo UML e BPMN em Tipos Diferentes Automaticamente
publish-date=09062011
author1-email=lgrahek@ca.ibm.com
author1-email-cc=

Conheça a IBM da sua cidade

Virtual Branch Office Brasil

A IBM está mais perto do que você imagina!


Tags

Help
Use o campo de pesquisa para encontrar todos os tipos de conteúdo no My developerWorks com essa tag.

Use a barra de rolagem para ver mais ou menos tags.

Tags populares mostra as principais tags para esta zona de conteúdo em particular (por exemplo, Java technology, Linux, WebSphere).

Minhas tags mostra suas tags para esta zona de conteúdo em particular (por exemplo, Java technology, Linux, WebSphere).

Use o campo de pesquisa para localizar todos os tipos de conteúdo no Meu developerWorks com essa tag. Tags populares mostra as tags principais para essa zona de conteúdo particular (por exemplo, tecnologia Java, Linux, WebSphere). My tags shows your tags for this particular content zone (for example, Java technology, Linux, WebSphere). Minhas tags mostra as suas tags para essa zona de conteúdo em particular (por exemplo, tecnologia Java, Linux, WebSphere).