---
title: "Parte 4: Analisi di un'applicazione legacy con Altova UModel"
date: "2009-05-07"
tags: 
  - "altova"
  - "c"
  - "java"
  - "missionkit"
  - "software-modeling"
  - "uml"
  - "uml-tool"
  - "umodel"
  - "visual-basic"
description: Scoprite come migliorare un'applicazione ATM esistente implementando commissioni per i prelievi, utilizzando Altova UModel, inclusa la generazione di diagrammi di classe e di sequenza UML.
---
Status: #blog

Tags:  #altova #c #java #missionkit #software-modeling #uml #uml-tool #umodel #visual-basic

Categories: [Altova](/blog/it/category/altova.md) 
# Parte 4: Analisi di un'applicazione legacy con Altova UModel

Nella [prima parte](https://www.altova.com/blog/2009/04/analyzing-legacy-application-with.html) di questa serie, abbiamo importato il codice sorgente in [Altova UModel](https://www.altova.com/it/products/umodel/uml_tool.html) per creare un progetto UML e abbiamo esaminato un [diagramma delle classi](https://www.altova.com/it/features_class_diagram.html) della nostra applicazione ATM esistente. 

Nella [Parte 2](https://www.altova.com/blog/2009/04/part-2-analyzing-legacy-application.html), abbiamo creato una serie di [diagrammi dei casi d'uso UML](https://www.altova.com/it/features_use_case.html) per descrivere le interazioni degli utenti con il sistema e abbiamo pianificato un miglioramento dell'applicazione per implementare una commissione di prelievo. 

Nella [Parte 3](https://www.altova.com/blog/2009/05/part-3-analyzing-legacy-application.html), abbiamo progettato un [diagramma a stati UML](https://www.altova.com/it/features_state_machine_diagram.html) per analizzare e documentare ulteriormente il funzionamento del nostro sistema. In questa parte, torneremo al miglioramento che avevamo pianificato. Ci è stato assegnato di implementare una commissione per i prelievi dagli sportelli automatici: 2 dollari per i prelievi inferiori a 100 dollari e 4 dollari per i prelievi di 100 dollari o superiori. Nella Parte 2, abbiamo creato un diagramma dei casi d'uso per illustrare come gli utenti interagiranno con la nuova funzionalità: 

[![Diagramma dei casi d'uso UML](https://lh4.ggpht.com/_REdrfeVqYdU/SgMSvo2m2-I/AAAAAAAAAGU/7htMTzPadB0/image1_thumb%5B1%5D.gif?imgmax=800 "UML use case diagram")](http://lh5.ggpht.com/_REdrfeVqYdU/SgMSvOZJfaI/AAAAAAAAAGQ/SmDT2J9YN80/s1600-h/image1%5B3%5D.gif) 

Dalla nostra analisi iniziale delle classi orientate agli oggetti presentata nella Parte 1, sappiamo che il nostro sistema contiene una classe "Prelievo", che rappresenta il punto logico in cui implementare la nuova funzionalità. Possiamo visualizzare un nuovo diagramma di classe per la classe "Prelievo" selezionandola nell'albero dei modelli e scegliendo, dal menu contestuale che appare con il tasto destro del mouse, l'opzione per creare un nuovo diagramma.

[![Finestra di supporto per l'albero dei modelli UModel](https://lh4.ggpht.com/_REdrfeVqYdU/SgMSwAsoM5I/AAAAAAAAAGc/_wjHFGYNizA/image2_thumb%5B1%5D.gif?imgmax=800 "UModel Model Tree helper window")](http://lh5.ggpht.com/_REdrfeVqYdU/SgMSv_Y20sI/AAAAAAAAAGY/ukYEuXjPBFo/s1600-h/image2%5B3%5D.gif)

[![Diagramma di classe UML](https://lh5.ggpht.com/_REdrfeVqYdU/SgMSwSCA44I/AAAAAAAAAGk/xZ_KNAFntzw/image3_thumb%5B2%5D.gif?imgmax=800 "UML class diagram")](http://lh5.ggpht.com/_REdrfeVqYdU/SgMSwRwsa6I/AAAAAAAAAGg/8dHhPHcxS-c/s1600-h/image3%5B6%5D.gif)

Abbiamo scelto di creare un diagramma gerarchico in modo che tutte le proprietà della classe "Prelievo" siano visibili, comprese le proprietà ereditate dalla classe "Transazione". Prima di implementare la funzionalità relativa alle commissioni, abbiamo una domanda correlata da approfondire. Volevamo verificare che il codice attuale includa un test per assicurarsi che l'importo del prelievo richiesto dall'utente non superi il saldo attuale del conto. Un [diagramma di sequenza UML](https://www.altova.com/it/features_sequence_diagram.html) ci permetterà di tracciare il flusso di esecuzione di un prelievo. UModel può generare automaticamente diagrammi di sequenza a partire dalle operazioni delle classi analizzate. Possiamo selezionare l'operazione "esegui" nel nostro diagramma di classe e scegliere "Genera diagramma di sequenza" dal menu contestuale di UModel per creare il diagramma di cui abbiamo bisogno. 

[![Finestra di dialogo per la generazione di diagrammi di sequenza in Altova UModel](https://lh6.ggpht.com/_REdrfeVqYdU/SgMSw2ezLGI/AAAAAAAAAGs/QqBzd8FYxHk/image4_thumb%5B1%5D.gif?imgmax=800 "Altova UModel Sequence Diagram Generation dialog")](http://lh5.ggpht.com/_REdrfeVqYdU/SgMSwvRDbYI/AAAAAAAAAGo/99KMNTYLeus/s1600-h/image4%5B3%5D.gif) 

La finestra di dialogo per la generazione dei diagrammi di sequenza di UModel offre diverse opzioni che ci aiuteranno nell'implementazione della nuova funzionalità. Abbiamo selezionato "Aggiorna automaticamente" perché vorremo aggiornare il diagramma in seguito, dopo aver modificato il codice, e la possibilità di visualizzare il codice in un livello separato può aiutarci a concentrarci sulla logica di prelievo. 

[![Diagramma di sequenza UML](https://lh4.ggpht.com/_REdrfeVqYdU/SgMSxnOimQI/AAAAAAAAAG0/ISFoBjX-hXU/image4a_thumb%5B1%5D.gif?imgmax=800 "UML sequence diagram")](http://lh3.ggpht.com/_REdrfeVqYdU/SgMSxnSx5xI/AAAAAAAAAGw/zQeOikuRG4s/s1600-h/image4a%5B3%5D.gif) 

La dimensione delle barre di scorrimento indica che stiamo visualizzando solo una piccola parte del diagramma di sequenza nella finestra corrente. Possiamo ridurre la visualizzazione per adattarla alla finestra, ma il testo potrebbe diventare illeggibile. Invece, sfruttiamo l'interfaccia utente flessibile di UModel per nascondere automaticamente l'albero dei diagrammi e le finestre delle proprietà, il che ci permette di ingrandire la finestra di anteprima:

[![Finestra di navigazione generale di UModel](https://lh3.ggpht.com/_REdrfeVqYdU/SgMSyLoDmAI/AAAAAAAAAG8/VSrcxmlUzyo/image5_thumb%5B1%5D.gif?imgmax=800 "UModel Overview navigation window")](http://lh6.ggpht.com/_REdrfeVqYdU/SgMSx7BnhCI/AAAAAAAAAG4/lJ2kDb9YGZs/s1600-h/image5%5B3%5D.gif) 

Possiamo esplorare il diagramma di sequenza trascinando il quadrato rosso nella finestra di panoramica. Questo ci permette di individuare rapidamente il confronto tra l'importo prelevato e il saldo del conto.

[![Diagramma di sequenza UML](https://lh3.ggpht.com/_REdrfeVqYdU/SgMSyhedGhI/AAAAAAAAAHE/SvFKj234kxs/image6_thumb%5B1%5D.gif?imgmax=800 "UML sequence diagram")](http://lh5.ggpht.com/_REdrfeVqYdU/SgMSyYWsvVI/AAAAAAAAAHA/JuO3ZaULHZg/s1600-h/image6%5B3%5D.gif)

Possiamo anche visualizzare i messaggi di errore che compaiono se il bancomat non contiene abbastanza contanti o se il saldo del conto è troppo basso.

[![Diagramma di sequenza UML](https://lh6.ggpht.com/_REdrfeVqYdU/SgMSzJ4GmrI/AAAAAAAAAHM/SgmUgFNzAjc/image7_thumb%5B1%5D.gif?imgmax=800 "UML sequence diagram")](http://lh6.ggpht.com/_REdrfeVqYdU/SgMSy6XzdcI/AAAAAAAAAHI/i7EjoSM3VS8/s1600-h/image7%5B3%5D.gif)

Tornando al diagramma di classe "Withdrawal" (Prelievo), possiamo aggiungere la proprietà "fee" (tassa) e impostarne il valore predefinito: 

[![Diagramma di classe UML](https://lh3.ggpht.com/_REdrfeVqYdU/SgMSzYpOX5I/AAAAAAAAAHU/vpZ-rn2obmA/image8_thumb%5B1%5D.gif?imgmax=800 "UML class diagram")](http://lh3.ggpht.com/_REdrfeVqYdU/SgMSzMMLe_I/AAAAAAAAAHQ/J0Cxo0Wv_fg/s1600-h/image8%5B3%5D.gif) 

Effettueremo una prima fase di implementazione della logica relativa alle commissioni, senza includere ancora l'opzione di annullamento da parte dell'utente. L'aggiornamento del codice sorgente, basato sul nostro modello, aggiunge la proprietà relativa alla commissione alla classe "Withdrawal". Successivamente, utilizzeremo il nostro editor di codice preferito per implementare direttamente la logica delle commissioni nel file "Withdrawal.java". I test della nostra applicazione ricompilata mostrano quanto segue: 

[![Simulazione di un bancomat](https://lh4.ggpht.com/_REdrfeVqYdU/SgMSz9cBOHI/AAAAAAAAAHc/z6TwcwHMWvg/image9_thumb%5B1%5D.gif?imgmax=800 "ATM Simulation")](http://lh3.ggpht.com/_REdrfeVqYdU/SgMSzvjZUzI/AAAAAAAAAHY/1PFnBGhRMHw/s1600-h/image9%5B3%5D.gif) 

Il saldo iniziale era di 147 dollari. Dopo aver prelevato 100 dollari, il nuovo saldo è di 43 dollari. La commissione viene visualizzata in un nuovo messaggio, e il saldo finale è corretto. Tuttavia, il diagramma di sequenza nel nostro modello UML è impreciso perché non include la funzionalità relativa alla commissione. Possiamo correggere il diagramma di sequenza aggiornando il progetto UML a partire dal codice sorgente modificato. La finestra "Messaggi UModel" indica che le modifiche apportate al file Withdrawal.java hanno causato la rigenerazione del diagramma di sequenza. Inoltre, possiamo navigare facilmente nel diagramma per individuare il nostro nuovo test relativo all'importo del prelievo, al fine di verificare se la commissione debba essere aumentata a 4 dollari. 

[![immagine10a](https://lh4.ggpht.com/_REdrfeVqYdU/SgMS0bn_5EI/AAAAAAAAAHk/BkVoVAWz-tM/image10a_thumb%5B1%5D.gif?imgmax=800 "image10a")](http://lh3.ggpht.com/_REdrfeVqYdU/SgMS0MZLn5I/AAAAAAAAAHg/qbpqaDucnEU/s1600-h/image10a%5B3%5D.gif) 

Ora che il nostro diagramma di sequenza modificato rappresenta graficamente il funzionamento aggiornato del bancomat, possiamo essere certi che l'automobilista stressato che abbiamo incontrato nella terza parte di questa serie abbia abbastanza contanti per comprarsi quel cono gelato! Nella prossima parte, sfrutteremo un'altra funzionalità di UModel per generare una documentazione completa del nostro progetto, relativa al lavoro svolto finora: un ulteriore vantaggio di mantenere sincronizzati il nostro modello UML e il codice sorgente dell'applicazione. 

Se siete pronti a provare Altova UModel sulla vostra applicazione Java, C# o Visual Basic esistente, [cliccate qui per scaricare una versione di prova gratuita e completamente funzionante, valida per 30 giorni](https://www.altova.com/it/download/umodel/uml_tool_enterprise.html).
