---
title: "Parte 2: Análisis de una aplicación heredada con Altova UModel"
date: "2009-04-24"
tags: 
  - "c"
  - "java"
  - "missionkit"
  - "software-modeling"
  - "uml"
  - "uml-tool"
  - "umodel"
description: Este artículo trata sobre la creación de diagramas de casos de uso para una aplicación de cajeros automáticos heredada, utilizando Altova UModel, centrándose en las interacciones del usuario y las mejoras planificadas.
---
Status: #blog

Tags:  #c #java #missionkit #software-modeling #uml #uml-tool #umodel

Categories: [Altova](/blog/es/category/altova.md) 
# Parte 2: 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 la serie "Analizando una aplicación heredada", presentamos nuestra aplicación de simulación de cajeros automáticos, importamos el código fuente de Java a un proyecto de [UModel](https://www.altova.com/es/products/umodel/uml_tool.html) y refinamos un diagrama de clases para obtener una visión general de las clases de la aplicación y sus relaciones. En esta entrada, crearemos [diagramas de casos de uso](https://www.altova.com/es/features_use_case.html) para documentar la funcionalidad actual de nuestra aplicación de cajeros automáticos, y añadiremos un caso de uso para planificar una futura mejora. Como vimos en la Parte 1, cuando un usuario ejecuta nuestra simulación de cajero automático, se le solicita que inicie sesión con un número de cuenta y un PIN, y luego se le presenta un menú de transacciones que resume todas las interacciones disponibles con la aplicación: 

[![Menú de transacciones de simulación de cajero automático](https://lh6.ggpht.com/_REdrfeVqYdU/SfHSDHQ4GSI/AAAAAAAAAEM/jvo19yCSOQo/transaction%20menu_thumb%5B2%5D.gif?imgmax=800 "ATM Simulation transaction menu")](http://lh4.ggpht.com/_REdrfeVqYdU/SfHSC3HfXsI/AAAAAAAAAEI/b8fsi30qDyg/s1600-h/transaction%20menu%5B4%5D.gif) 

Utilizando el menú de transacciones como guía, podemos crear un diagrama de casos de uso general que documente las interacciones del usuario con la simulación del cajero automático: 

[![Diagrama de casos de uso que ofrece una visión general de la simulación de cajeros automáticos](https://lh6.ggpht.com/_REdrfeVqYdU/SfHSEJlkKRI/AAAAAAAAAEU/zZp4OlbX7Ms/usecase1_thumb%5B1%5D.gif?imgmax=800 "ATM Simulation overview use case diagram")](http://lh3.ggpht.com/_REdrfeVqYdU/SfHSDuArD2I/AAAAAAAAAEQ/pb26wYjQWWA/s1600-h/usecase1%5B3%5D.gif)

Si está familiarizado con la notación UML, lo primero que quizás haya notado es que el "actor" en nuestro diagrama no se parece a la figura esquemática típica de UML. UModel permite a los modeladores de software asignar cualquier archivo de imagen .bmp de Windows para representar a un actor en un diagrama de casos de uso. Utilizamos la ventana de ayuda de "Propiedades" para asignar una imagen de la biblioteca que se proporciona con UModel.

[![Ventana de propiedades de Altova UModel](https://lh4.ggpht.com/_REdrfeVqYdU/SfHSEq2AYoI/AAAAAAAAAEc/qDV7VjIP0p4/PropertiesWindow_thumb%5B1%5D.gif?imgmax=800 "Altova UModel Properties Window")](http://lh4.ggpht.com/_REdrfeVqYdU/SfHSEfzVyeI/AAAAAAAAAEY/1m5PRtMuCHg/s1600-h/PropertiesWindow%5B3%5D.gif) 

Un diagrama de casos de uso no es el lugar adecuado para definir el flujo de la aplicación ni las clases orientadas a objetos, sino simplemente para documentar cómo un usuario (un "actor" en la terminología UML) interactúa con el sistema. Podemos crear diagramas de casos de uso adicionales para mostrar más detalles sobre cada interacción. Expandir cada interacción en un diagrama separado mejora la claridad al mantener cada esquema simple y ordenado, y deja suficiente espacio para probar diferentes opciones. 

[![Diagrama de casos de uso detallado para el inicio de sesión del usuario](https://lh4.ggpht.com/_REdrfeVqYdU/SfHSFKI29WI/AAAAAAAAAEk/AFJI7u3ywco/usecase2_thumb%5B1%5D.gif?imgmax=800 "Detailed user sign in use case diagram")](http://lh5.ggpht.com/_REdrfeVqYdU/SfHSE60c0kI/AAAAAAAAAEg/Lg11jQtejFM/s1600-h/usecase2%5B3%5D.gif) 

Hemos añadido la autenticación del número de cuenta y el PIN en una nota, en lugar de en un diagrama de caso de uso, porque el usuario del cajero automático no es el agente que realiza ese paso. Basándonos en la experiencia real con los cajeros automáticos, podemos suponer (aunque aún no hemos revisado el código) que un retiro se cancelará si el monto solicitado es mayor que el saldo de la cuenta. Sin embargo, la comparación entre el monto del retiro y el saldo de la cuenta no la realiza el usuario, por lo que esa actividad tampoco se representa en un diagrama de caso de uso. 

[![Diagrama de casos de uso para el retiro de efectivo](https://lh6.ggpht.com/_REdrfeVqYdU/SfHSF209eRI/AAAAAAAAAEs/eB3dPyG57PI/usecase3_thumb%5B1%5D.gif?imgmax=800 "Withdraw cash use case diagram")](http://lh5.ggpht.com/_REdrfeVqYdU/SfHSFm6llBI/AAAAAAAAAEo/xn6UYTTGn7I/s1600-h/usecase3%5B3%5D.gif) 

La flecha dentro del caso de uso "Retirar efectivo" indica un hipervínculo. UModel permite adjuntar uno o varios hipervínculos a cualquier elemento de sus diagramas. Un hipervínculo puede referenciar una URL, un archivo externo o incluso otro diagrama. El cuadro de diálogo de hipervínculos también le permite definir texto de ayuda para sus hipervínculos. 

[![Diálogo de hipervínculos de Altova UModel](https://lh6.ggpht.com/_REdrfeVqYdU/SfHSGYeH0rI/AAAAAAAAAE0/36DgzV_Yl-0/hyperlinksdialog_thumb%5B1%5D.gif?imgmax=800 "Altova UModel hyperlinks dialog")](http://lh4.ggpht.com/_REdrfeVqYdU/SfHSGFUiWVI/AAAAAAAAAEw/ZZU8p5k9ks4/s1600-h/hyperlinksdialog%5B3%5D.gif) 

[![Texto emergente de hipervínculo en el diagrama de casos de uso](https://lh4.ggpht.com/_REdrfeVqYdU/SfHSHKYq3HI/AAAAAAAAAE8/fw1H_zlU6Vo/usecase4_thumb%5B1%5D.gif?imgmax=800 "Hyperlink pop-up text in use case diagram")](http://lh4.ggpht.com/_REdrfeVqYdU/SfHSGu60M4I/AAAAAAAAAE4/qrle7DV5PXw/s1600-h/usecase4%5B3%5D.gif) 

Si define más de un hipervínculo, el texto de ayuda se convertirá en un menú de selección emergente. Supongamos que se nos ha asignado la tarea de modificar la simulación existente de cajeros automáticos para cobrar una tarifa por cada retiro. Si el monto del retiro es inferior a 100 dólares, la tarifa será de 2 dólares. Si el monto del retiro es de 100 dólares o más, la tarifa será de 4 dólares. Dado que el cajero automático no dispensa billetes de un dólar, la tarifa debe cobrarse a la cuenta, no deducirse del efectivo retirado. La tarifa se mostrará antes de que se dispense cualquier efectivo, y el usuario podrá cancelar la transacción. Podemos añadir este nuevo requisito a nuestro diagrama de casos de uso de "Retiro de efectivo en cajero automático". 

[![Diagrama de casos de uso mejorado para "Retirar efectivo"](https://lh6.ggpht.com/_REdrfeVqYdU/SfHSHjveWdI/AAAAAAAAAFE/etX3ZjlAsQM/usecase5b_thumb%5B1%5D.gif?imgmax=800 "Enhanced Withdraw Cash use case diagram")](http://lh3.ggpht.com/_REdrfeVqYdU/SfHSHRdwdII/AAAAAAAAAFA/3zBX6tvvOAM/s1600-h/usecase5b%5B3%5D.gif) 

Hemos cambiado el color del óvalo correspondiente al caso de uso "Aprobar tarifa" para indicar que esta es una funcionalidad planificada que aún no está implementada. Algunos desarrolladores podrían argumentar que la nota adjunta al óvalo de "Aprobar tarifa" es redundante, ya que la propia indicación de "incluir" ya señala que "Aprobar tarifa" es un componente necesario para "Retirar efectivo". Sin embargo, muchas personas se confunden con la diferencia entre "incluir" y "extender", por lo que es mejor ser absolutamente claros. También podemos aprovechar la función de "Capas" de UModel para colocar todos los elementos relacionados con la nueva funcionalidad en una capa separada.

[![Menú contextual de la capa "Assign Layer" en Altova UModel](https://lh5.ggpht.com/_REdrfeVqYdU/SfHSIi2xicI/AAAAAAAAAFM/ScNlckyeir4/layersAssign_thumb%5B1%5D.gif?imgmax=800 "Altova UModel Assign Layer context menu")](http://lh4.ggpht.com/_REdrfeVqYdU/SfHSIBpiEzI/AAAAAAAAAFI/CcWmv9OlLxs/s1600-h/layersAssign%5B3%5D.gif)

Ahora, la ventana de ayuda de "Capas" nos permite mostrar u ocultar la función planificada en nuestra vista del diagrama. 

[![Ventana de utilidad de la capa UModel de Altova](https://lh6.ggpht.com/_REdrfeVqYdU/SfHSJdL7XKI/AAAAAAAAAFU/3N3VfK_DHpM/layersview_thumb%5B1%5D.gif?imgmax=800 "Altova UModel Layer helper window")](http://lh4.ggpht.com/_REdrfeVqYdU/SfHSI19nEtI/AAAAAAAAAFQ/uwwdU85SDgo/s1600-h/layersview%5B3%5D.gif) 

La experiencia real con los cajeros automáticos nos indica que falta una transacción en la simulación actual. El menú de transacciones no ofrece la opción de transferir fondos entre cuentas. A partir de los diagramas que ya hemos creado, podemos ver que el diseño original de la aplicación dificultará la implementación de una operación de transferencia. El inicio de sesión del usuario se basa en el número de cuenta, y parece que la aplicación actual no comprende el concepto de un cliente bancario que tenga tanto una cuenta corriente como una cuenta de ahorros. Si nuestro gerente solicita la función de transferencia de fondos, necesitaremos hablar con el arquitecto de software empresarial de nuestra empresa. Será necesario implementar un identificador de usuario vinculado a múltiples cuentas, no solo en nuestra aplicación de simulación de cajeros automáticos, sino también en la base de datos del banco. 

El [Premio Jolt, galardonado](https://www.altova.com/es/JOLTAward_MissionKit_031809.html) Altova [MissionKit para arquitectos de sistemas empresariales](https://www.altova.com/es/products/missionkit/software_architect_tools.html) Es una colección de ocho herramientas en formato XML, para bases de datos y UML, diseñada para el arquitecto de software empresarial que pueda necesitar herramientas de modelado UML y de gestión de bases de datos, además de capacidades avanzadas de XML, servicios web e integración de datos. 

[Haga clic aquí para descargar una versión de prueba completamente funcional de 30 días.](https://www.altova.com/es/download/missionkit/software_development_tools_enterprise.html) En la próxima entrega, analizaremos la simulación de cajeros automáticos desde una perspectiva completamente diferente, mientras nos preparamos para profundizar en el código. 
