---
title: "Parte 3 – Análise de uma aplicação legada com o Altova UModel"
date: "2009-05-01"
tags: 
  - "altova"
  - "c"
  - "java"
  - "missionkit"
  - "software-modeling"
  - "uml"
  - "uml-tool"
  - "umodel"
  - "visual-basic"
description: Explore como analisar aplicações existentes utilizando diagramas de máquina de estados UML no Altova UModel, o que permitirá aprofundar a sua compreensão dos estados e transições do sistema.
---
Status: #blog

Tags:  #altova #c #java #missionkit #software-modeling #uml #uml-tool #umodel #visual-basic

Categories: [Altova](/blog/pt/category/altova.md) 
# Parte 3 – Análise de uma aplicação legada com o Altova UModel

Em [Parte 1](https://www.altova.com/blog/2009/04/analyzing-legacy-application-with.html) desta série, aplicámos [engenharia reversa](https://www.altova.com/pt/features_reverse_engineer.html) funcionalidade de [Altova UModel](https://www.altova.com/pt/products/umodel/uml_tool.html) para importar o código-fonte de uma aplicação de simulação de caixas automáticas já existente. Criámos um diagrama UML [diagrama de classes](https://www.altova.com/pt/features_class_diagram.html) para ilustrar a hierarquia de classes e as relações entre as classes da aplicação. Em [Parte 2](https://www.altova.com/blog/2009/04/part-2-analyzing-legacy-application.html) Desenvolvemos um diagrama UML [diagrama de casos de uso](https://www.altova.com/pt/features_use_case.html) Para documentar as interações dos utilizadores com o sistema, elaborámos vários diagramas de casos de utilização adicionais para detalhar as interações e documentar uma melhoria planeada. Nesta edição, vamos analisar o sistema de caixas automáticas sob uma perspetiva diferente. 

Numa tarde de verão escaldante, um condutor apressado avista uma banca de gelados com uma faixa de atendimento para carros. Só tem um problema: não tem dinheiro! Então, vira para o estacionamento do centro comercial e estaciona junto de um multibanco numa cabine de vidro. Antes mesmo de sair do carro, o nosso cliente, já exausto pelo calor, começa a pensar no estado do multibanco. Será que outro cliente, com questões bancárias complexas, já o está a utilizar? Mesmo que não haja ninguém dentro da cabine, será que o multibanco está avariado? 

A UML [diagrama de máquina de estados](https://www.altova.com/pt/features_state_machine_diagram.html) (também conhecido como diagrama de estados) permitirá que mapeemos os estados do nosso sistema simulado de caixas automáticas, bem como os gatilhos, eventos e transições entre os estados, para que possamos compreender melhor o funcionamento da nossa aplicação existente. Vamos voltar à nossa experiência de execução da simulação para começarmos: 

[![Menu de início de sessão da simulação de caixas automáticas](https://lh5.ggpht.com/_REdrfeVqYdU/Sfsxmyu-x6I/AAAAAAAAAFc/1ttoVt3gF-Q/image1_thumb%5B1%5D.gif?imgmax=800 "ATM Simulation Log In menu")](http://lh6.ggpht.com/_REdrfeVqYdU/Sfsxm31zkpI/AAAAAAAAAFY/DTDB2hmhH48/s1600-h/image1%5B3%5D.gif)

[![Menu de Simulação de Transações de Multibanco](https://lh3.ggpht.com/_REdrfeVqYdU/SfsxoBbTouI/AAAAAAAAAFk/05wRGaLq5P0/image2_thumb%5B2%5D.gif?imgmax=800 "ATM Simulation Transaction Menu")](http://lh3.ggpht.com/_REdrfeVqYdU/SfsxnsG1tVI/AAAAAAAAAFg/hHwOLukZxYk/s1600-h/image2%5B4%5D.gif) 

Quando lançámos a aplicação original, o nosso simulador de caixas automáticas entrou no estado de espera, aguardando o primeiro cliente: 

[![Diagrama de máquina de estados UML (início)](https://lh5.ggpht.com/_REdrfeVqYdU/SfsxoWNUKRI/AAAAAAAAAFs/MpZ4Vt9WJ5o/image3_thumb%5B1%5D.gif?imgmax=800 "UML State Machine Diagram start")](http://lh5.ggpht.com/_REdrfeVqYdU/SfsxoA_hNqI/AAAAAAAAAFo/bm_h5hrfDLI/s1600-h/image3%5B3%5D.gif) 

Em seguida, pode ser útil identificar e desenhar estados adicionais em ovais separados. Poderemos mover estes ovais como peças de um quebra-cabeças para encontrar a sequência lógica, sem nos preocuparmos com as transições de um estado para o seguinte.

[![Diagrama de máquina de estados UML - preliminar](https://lh3.ggpht.com/_REdrfeVqYdU/Sfsxo2BkWJI/AAAAAAAAAF0/fymyDQyuM9E/image4_thumb%5B1%5D.gif?imgmax=800 "UML state machine diagram - preliminary")](http://lh6.ggpht.com/_REdrfeVqYdU/Sfsxor2MyNI/AAAAAAAAAFw/bFiRGAyCknE/s1600-h/image4%5B3%5D.gif) 

Esta lista preliminar dos estados do ATM é apenas o nosso primeiro rascunho. As descrições dos estados foram sugeridas pelas opções do menu da nossa aplicação existente, e é óbvio que podemos simplificar:

*   Não há diferença entre "Selecionar Primeira Transação" e "Selecionar Próxima Transação", por isso, estas opções devem ser combinadas.
*   "Desconectar" provavelmente não é um estado, mas sim uma transição instantânea quando o utilizador pressiona o número 4 no menu de Transações.
*   Podemos atribuir a introdução do valor de um levantamento ou de um depósito como sub-estados dentro do estado "Executar Transação".

O terceiro ponto simplifica o nosso diagrama e também seria consistente com a nossa forma de tratar a introdução do número de conta e do PIN como parte do processo de "Autenticação do Utilizador".

Depois de efetuarmos estas alterações e adicionarmos as transições, o nosso diagrama terá a seguinte aparência: 

[![Diagrama de máquina de estados UML com transições](https://lh3.ggpht.com/_REdrfeVqYdU/SfsxpSLK3aI/AAAAAAAAAF8/Mw8IcBdYQco/image5_thumb%5B1%5D.gif?imgmax=800 "UML state amachine diagram with transitions")](http://lh5.ggpht.com/_REdrfeVqYdU/Sfsxo2pmqZI/AAAAAAAAAF4/Vrgu1Fxt8P8/s1600-h/image5%5B3%5D.gif)

As transições simples que adicionámos são gatilhos que fazem com que o ATM saia de um estado e entre no seguinte. Note também que cada estado tem pelo menos uma entrada e uma saída – caso contrário, a aplicação antiga poderia forçar o utilizador a um beco sem saída. O elemento em forma de losango entre "Selecionar Transação" e "Executar Transação" é o símbolo UML que representa uma escolha de fluxos. Inicialmente, pode parecer ilógico que a aplicação permita ao utilizador sair antes de executar qualquer transação, mas essa é uma opção que a nossa aplicação antiga oferece no menu de Transações. E, na realidade, os utilizadores podem mudar de ideias no último minuto! Tivemos cuidado para usar uma linguagem consistente sempre que possível para os nomes e descrições dos nossos elementos. Os estados são nomeados com verbos no presente, terminados em "-ing". As transições são identificadas para indicar a conclusão da ação que causa a mudança de estado. A utilização de nomes consistentes para os elementos melhora a clareza do diagrama. 

Depois de termos um diagrama de estados funcional, como o apresentado acima, é importante considerar o que acontece se uma transição for tentada, mas não for concluída com sucesso. O utilizador do ATM pode inserir uma combinação de número de conta/PIN inválida, ou um utilizador autenticado pode solicitar um valor de levantamento que exceda o saldo da conta. Podemos aprimorar o nosso diagrama de estados para incluir estas possibilidades: 

[![Diagrama completo de máquina de estados UML](https://lh3.ggpht.com/_REdrfeVqYdU/SfsxpgAdy6I/AAAAAAAAAGE/9yJi6CFcN-M/image6_thumb%5B1%5D.gif?imgmax=800 "Complete UML state machine diagram")](http://lh6.ggpht.com/_REdrfeVqYdU/SfsxpSQ190I/AAAAAAAAAGA/xtG56Cmeogs/s1600-h/image6%5B3%5D.gif) 

Agora, o nosso diagrama de máquina de estados mostra muitos percursos alternativos durante a execução da aplicação, e não apenas o único percurso "ideal" e sem erros. Optámos por uma orientação vertical para o layout do nosso diagrama, mas não existe nenhuma regra que determine essa forma. Algumas aplicações podem ser mais adequadas a um layout horizontal, ou talvez seja simplesmente uma questão de preferência pessoal. Esta ilustração mostra uma pequena parte do nosso diagrama de máquina de estados, apresentado em formato horizontal: 

[![Diagrama de máquina de estados UML em layout horizontal](https://lh6.ggpht.com/_REdrfeVqYdU/SfsxqJJG08I/AAAAAAAAAGM/kpCKzjysbwI/image7_thumb%5B1%5D.gif?imgmax=800 "UML state machine diagram in horizontal layout")](http://lh4.ggpht.com/_REdrfeVqYdU/Sfsxp61lanI/AAAAAAAAAGI/jd9Ogb8-01k/s1600-h/image7%5B3%5D.gif) 

Independentemente do layout do diagrama de máquina de estados que escolher, não deve desenhar linhas de transição que se cruzem ou se sobreponham. A criação de um diagrama de máquina de estados UML pode parecer excessivo para a nossa simulação de caixas automáticas, já que a aplicação existente é pequena e todos nós conhecemos o funcionamento das caixas automáticas. No entanto, estas técnicas podem ser muito úteis quando se tem de trabalhar numa aplicação muito maior, que opera num domínio desconhecido ou complexo. 

Se estiver pronto para criar diagramas de máquina de estados UML para a sua aplicação Java, C# ou Visual Basic existente, [clique aqui para descarregar uma versão de avaliação gratuita e totalmente funcional de 30 dias do Altova UModel](https://www.altova.com/pt/download/umodel/uml_tool_enterprise.html). No próximo artigo, analisaremos em detalhe a transação de levantamento e a nova funcionalidade que planeámos na Parte 2.
