---
title: "Parte 4: Análisis de una aplicación heredada con Altova UModel"
date: "2009-05-07"
tags: 
  - "altova"
  - "c"
  - "java"
  - "missionkit"
  - "software-modeling"
  - "uml"
  - "uml-tool"
  - "umodel"
  - "visual-basic"
description: Descubra cómo mejorar una aplicación de cajero automático (ATM) existente mediante la implementación de comisiones por retiro, utilizando Altova UModel, incluyendo la generación de diagramas de clases y de secuencias UML.
---
Status: #blog

Tags:  #altova #c #java #missionkit #software-modeling #uml #uml-tool #umodel #visual-basic

Categories: [Altova](/blog/es/category/altova.md) 
# Parte 4: Análisis de una aplicación heredada con Altova UModel

En la [Parte 1](https://www.altova.com/blog/2009/04/analyzing-legacy-application-with.html) de esta serie, importamos el código fuente a [Altova UModel](https://www.altova.com/es/products/umodel/uml_tool.html) para crear un proyecto UML y examinamos un [diagrama de clases](https://www.altova.com/es/features_class_diagram.html) de nuestra aplicación de cajero automático heredada. 

En la [Parte 2](https://www.altova.com/blog/2009/04/part-2-analyzing-legacy-application.html), creamos una serie de [diagramas de casos de uso UML](https://www.altova.com/es/features_use_case.html) para describir las interacciones de los usuarios con el sistema, y planificamos una mejora de la aplicación para implementar una comisión por retiros. 

En la [Parte 3](https://www.altova.com/blog/2009/05/part-3-analyzing-legacy-application.html), diseñamos un [diagrama de máquina de estados UML](https://www.altova.com/es/features_state_machine_diagram.html) para analizar y documentar más a fondo el funcionamiento de nuestro sistema. En esta entrega, retomaremos la mejora que habíamos planeado. Se nos ha asignado implementar una comisión por retiro de efectivo: 2 dólares para retiros menores a 100 dólares y 4 dólares para retiros de 100 dólares o más. En la Parte 2, elaboramos un diagrama de casos de uso para mostrar cómo los usuarios interactuarán con la nueva función: 

[![Diagrama de casos de 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) 

A partir de nuestro análisis inicial de las clases orientadas a objetos en la Parte 1, sabemos que nuestro sistema contiene una clase "Retiro", que es el lugar lógico para implementar nuestra nueva funcionalidad. Podemos mostrar un nuevo diagrama de clases para la clase "Retiro" seleccionándola en el árbol de modelos y eligiendo la opción correspondiente en el menú contextual que aparece al hacer clic derecho para crear un nuevo diagrama.

[![Ventana de ayuda para el árbol de modelos de 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)

[![Diagrama de clases 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)

Hemos optado por crear un diagrama de jerarquía para que todas las propiedades de la clase "Retiro" sean visibles, incluyendo las propiedades heredadas de la clase "Transacción". Antes de implementar la función de comisiones, tenemos una pregunta relacionada que investigar. Queríamos verificar que el código actual incluye una prueba para asegurarse de que el monto de retiro solicitado por el usuario no exceda el saldo actual de la cuenta. Un [diagrama de secuencia UML](https://www.altova.com/es/features_sequence_diagram.html) nos permitirá rastrear el flujo de ejecución de un retiro. UModel puede generar automáticamente diagramas de secuencia a partir de las operaciones de las clases que se han analizado. Podemos seleccionar la operación "ejecutar" en nuestro diagrama de clases y elegir "Generar diagrama de secuencia" en el menú contextual de UModel para crear el diagrama que necesitamos. 

[![Diálogo de generación de diagramas de secuencia de 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) 

El cuadro de diálogo de generación de diagramas de secuencia de UModel ofrece varias opciones que nos ayudarán en la implementación de la nueva función. Seleccionamos "Actualizar automáticamente" porque necesitaremos actualizar el diagrama más adelante, después de modificar el código, y mostrar el código en una capa separada nos ayudará a centrarnos en la lógica de la operación. 

[![Diagrama de secuencias 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) 

El tamaño de los controles de desplazamiento indica que solo estamos viendo una pequeña parte del diagrama de secuencia en la ventana actual. Podemos reducir la vista para que se ajuste a la ventana, pero el texto probablemente será ilegible. En lugar de eso, aprovechemos la interfaz de usuario flexible de UModel para ocultar automáticamente el árbol de diagramas y las ventanas de propiedades, lo que nos permitirá ampliar la ventana de ayuda de "Vista general":

[![Ventana de navegación general de 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) 

Podemos explorar el diagrama de secuencia arrastrando el cuadrado rojo en la ventana de resumen. Esto nos permite localizar rápidamente la comparación entre el monto del retiro y el saldo de la cuenta.

[![Diagrama de secuencias 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)

También podemos ver los mensajes de error que se muestran si el cajero automático no tiene suficiente efectivo o si el saldo de la cuenta es demasiado bajo.

[![Diagrama de secuencias 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)

Volviendo al diagrama de clases de "Retiro", podemos añadir la propiedad "tarifa" y establecer su valor predeterminado: 

[![Diagrama de clases 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) 

Realizaremos una primera fase de implementación de la lógica de las tarifas, sin incluir la opción de cancelación por parte del usuario. La actualización del código fuente, basada en nuestro modelo, añade la propiedad de la tarifa a la clase "Withdrawal". Luego, utilizaremos nuestro editor de código fuente preferido para implementar la lógica de las tarifas directamente en el archivo "Withdrawal.java". Las pruebas de nuestra aplicación recompilada muestran lo siguiente: 

[![Simulación de cajeros automáticos](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) 

El saldo inicial fue de 147 dólares. Después de retirar 100 dólares, el nuevo saldo es de 43 dólares. La comisión se muestra en un nuevo mensaje, y el saldo final es correcto. Sin embargo, ahora el diagrama de secuencia en nuestro modelo UML es inexacto porque no incluye la función de la comisión. Podemos corregir el diagrama de secuencia actualizando el proyecto UML a partir del código fuente revisado. La ventana de mensajes de UModel indica que los cambios en el archivo Withdrawal.java provocaron la regeneración del diagrama de secuencia. Además, podemos navegar fácilmente por el diagrama para localizar nuestra nueva prueba del monto de la retirada y verificar si es necesario aumentar la comisión a 4 dólares. 

[![image10a](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) 

Ahora que nuestro diagrama de secuencia modificado representa gráficamente el funcionamiento actualizado del cajero automático, podemos estar seguros de que el conductor apurado que conocimos en la tercera parte de esta serie tiene suficiente dinero en efectivo para comprar ese helado. En nuestra próxima entrega, aprovecharemos otra característica de UModel para generar una documentación completa del proyecto de nuestro trabajo hasta ahora, una ventaja más de mantener nuestro modelo UML y el código fuente de la aplicación sincronizados. 

Si está listo para probar Altova UModel en su propia aplicación heredada, ya sea en Java, C# o Visual Basic, [haga clic aquí para descargar una versión de prueba gratuita y completamente funcional de 30 días](https://www.altova.com/es/download/umodel/uml_tool_enterprise.html).
