---
title: "第二部分：使用 Altova UModel 分析现有应用程序"
date: "2009-04-24"
tags: 
  - "c"
  - "java"
  - "missionkit"
  - "software-modeling"
  - "uml"
  - "uml-tool"
  - "umodel"
description: 本文探讨了如何使用Altova UModel为一款老旧的ATM（自动取款机）应用程序创建用例图，重点关注用户交互以及计划中的功能改进。
---
Status: #blog

Tags:  #c #java #missionkit #software-modeling #uml #uml-tool #umodel

Categories: [Altova](/blog/zh/category/altova.md) 
# 第二部分：使用 Altova UModel 分析现有应用程序

在...之中 [第一部分](https://www.altova.com/blog/2009/04/analyzing-legacy-application-with.html) 在“分析遗留应用程序”系列中，我们介绍了我们的ATM模拟应用程序，并将Java源代码导入到 [UModel](https://www.altova.com/zh/products/umodel/uml_tool.html) 项目，并完善了类图，以便了解应用程序中的各个类以及它们之间的关系。 在本节中，我们将创建 [用例图](https://www.altova.com/zh/features_use_case.html) 为了记录我们ATM应用程序的当前功能，我们将添加一个用例图，用于规划未来的改进。正如我们在第一部分看到的，当用户运行我们的ATM模拟程序时，他需要使用账号和密码进行登录，然后会看到一个交易菜单，该菜单总结了所有可与应用程序交互的功能： 

[![ATM模拟交易菜单](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) 

借助“交易”菜单，我们可以创建一个用例图，该图概括了用户与自动取款机模拟系统之间的交互方式 

[![ATM模拟系统的用例图概述](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)

如果您熟悉 UML 规范，您可能已经注意到，我们图表中的“参与者”图标与典型的 UML 图标（通常是简单的线条人物）看起来不太一样。UModel 允许软件建模人员将任何 Windows .bmp 图像文件指定为用例图中“参与者”的表示。我们使用了“属性”辅助窗口，从 UModel 提供的库中选择了一个图像来表示“参与者”。

[![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) 

用例图并非定义应用程序流程或面向对象类的合适场所，它的作用仅仅是记录用户（在UML术语中称为“参与者”）与系统之间的交互方式。我们可以创建额外的用例图，以更详细地展示每一种交互。将每一种交互单独绘制在不同的图表中，可以提高清晰度，因为这样可以保持每个图表的简洁和清晰，并且留出充足的空间来尝试不同的方案。 

[![详细的用户登录用例图](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) 

我们没有将账户号码和密码验证步骤绘制成用例图中的椭圆形，而是用注释来表示。这是因为使用自动取款机（ATM）的用户并不是执行该步骤的“参与者”。根据实际使用ATM的经验，我们可以推测（虽然我们还没有查看代码），如果取款金额超过账户余额，取款将会被取消。但是，比较取款金额和账户余额的操作并非由用户执行，因此该活动也未在用例图中用椭圆形表示。 

[![取款用例图](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) 

箭头位于“取款”用例框内，表示一个超链接。UModel 允许您将一个或多个超链接附加到图表中的任何元素。超链接可以引用一个网址、一个外部文件或另一个图表。超链接对话框甚至允许您为超链接定义辅助文本。 

[![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) 

[![用例图中超链接的弹出文本](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) 

如果您定义了多个超链接，您的辅助文本将变成一个弹出式选择菜单。 假设我们被要求修改现有的ATM模拟程序，为其增加每笔取款的费用。 如果取款金额少于100美元，则费用为2美元。 如果取款金额为100美元或更高，则费用为4美元。 由于ATM机没有1美元纸币，因此费用必须从账户中扣除，而不是从取款金额中扣除。 在任何现金被 dispensed 之前，系统会显示费用，并且用户可以选择取消交易。 我们可以将这个新要求添加到我们的ATM取款用例图中。 

[![增强型取款用例图](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) 

我们更改了“审批费用”用例框的颜色，以表明这是一个计划中的功能，但尚未实现。一些开发人员可能会认为，附加在“审批费用”用例框上的说明是多余的，因为“包含”符号本身就表明“审批费用”是“取款”功能的必要组成部分。但很多人对“包含”和“扩展”的区别感到困惑，因此最好尽可能清晰地表达。我们还可以利用UModel的图层功能，将所有与新功能相关的元素放置在单独的图层上。

[![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)

现在，图层辅助窗口允许我们在图表视图中显示或隐藏计划中的功能。 

[![Altova UModel 辅助图层窗口](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) 

实际的ATM使用体验表明，现有的ATM模拟系统中缺少一项交易功能。交易菜单中没有提供账户间转账的选项。根据我们已经创建的图表，我们可以看到，原始应用程序的设计会使转账操作难以实现。用户登录是基于账号进行的，而且看起来，现有的应用程序并不理解一个银行客户同时拥有支票账户和储蓄账户的情况。如果我们的经理要求增加转账功能，我们需要与公司的企业软件架构师进行沟通。为了实现这个功能，不仅需要在我们的ATM模拟应用程序中实现，还需要在银行数据库中进行相应的修改，以支持与多个账户关联的用户ID。 

荣获[Jolt 奖项](https://www.altova.com/zh/JOLTAward_MissionKit_031809.html)的 Altova [MissionKit for Enterprise Architects](https://www.altova.com/zh/products/missionkit/software_architect_tools.html) 是一套包含八个 XML、数据库和 UML 工具的集合，专为企业软件架构师设计。除了高级的 XML、Web 服务和数据集成功能外，该工具集还提供 UML 建模和数据库管理工具，以满足架构师的额外需求。 

[点击此处下载一个功能齐全的30天试用版。](https://www.altova.com/zh/download/missionkit/software_development_tools_enterprise.html) 在下一部分，我们将从一个全新的角度来探讨现有的ATM模拟系统，为我们接下来深入研究代码做好准备。 
