统一建模语言UML轻松入门之综合实例

  "例,比也"(《说文》),本次连载将给出一个利用UML进行建模的完整实例,综合应用前面学到的知识,达到"举此以例其余"(元刘壎《隐居通议·欧阳公》)的目的。

  在我国十年前ATM(自动取款机)还是一个很新鲜的事物,现在在城市的大街小巷随处可见。我们在日常生活中也经常和ATM打交道。本章我们将以简化的ATM系统为例将前面几章中学到的用例图、类图、顺序图、状态图、活动图及协作图知识运用到此例中。

  5.1用例图

  参与者"银行储户"和ATM机。简化后的ATM机仅有取款、存款及其余功能。其余功能不做详细说明。


图5.1 自动取款机(ATM)系统用例图

  银行储户在ATM机上完成取款、存款及其他业务。

  5.2类图

  图5.2所示的银行系统类图和图3.5是类似的,只是将工作人员换成了ATM。整个银行系统包括了帐户库、银行储户库及ATM系统。

  许多单个的帐户组成了帐户库。帐户具有帐户类型、帐户号、余额三个属性,均为private,其类型分别为char,int,double。六个操作分别为setType、getType、getAccountNumbe、setAccountNumbe、caculateBalance、getBalance,除caculateBalance为protected其余均为public。

   setType设置帐户类型,返回类型为void,参数类型为char,输入帐户类型。

   getType获取帐户类型,返回类型为char,无参数。

   setAccountNumbe设置帐户号,返回类型为void,参数类型为int,输入帐户号。

   getAccountNumbe获取帐户号,返回类型为int,无参数。

   caculateBalance计算余额,返回类型为void,参数为double,第一个参数为输入存取款数额,第二个参数为存款余额,既为输入也为输出。

   getBalance获取帐户余额,返回类型为double,无参数。

  许多银行储户组成了储户库。ATM系统包含了许多ATM机。银行储户及ATM机两个类包含哪些属性,哪些操作,它们的可见性及操作的返回类型、参数个数、参数类型从类图上都一目了然。更多的属性及操作都可以一一加上,使这个类图更详细更完整,从而使参与项目的每个成员都能无歧义的明了整个设计的类的结构。同样对于一个真正的银行系统,这个类图过于简单。比如帐户类型我们可以先定义一个abstract class,它包含一个帐户最基本的属性及操作。而有些操作先定义为abstract,如余额的计算。然后再继承这个abstract class,我们可以有saving account 和checking account等等。不同的帐户有不同的余额计算方法,我们可以加上具体的算法。对于不同的帐户可能还有一些它特有的操作,我们也可以加上,比如saving account在存款达到多少时可以享受机票打折的优惠。通过类图不仅可以使设计者明确的表达自己的设计意图,也能帮组自己整理思路,充实及优化自己的设计。


图5.2 银行系统类图

  5.3顺序图

  图5.3描述了顾客在ATM机上取款时信息的流动情况。以时间为顺序。因为仅是示例,所以整个过程是没有出现任何故障时的流程,并且只画到了取款结束。通过这个图,我们可以看出消息是如何在系统中不同对象之间进行交互。

  通过流程图我们可以很清楚地看到系统是如何工作的,系统各部分之间的信息及控制是如何发送的,整个流程是否合理。流程图对我们的设计起到了很好的帮助作用。注意在本图没有一个生命线终端有一个"X",这是因为这个流程中还未遇到有对象生命结束。当有对象生命结束时需在对应的生命线终端画"X",表明这个对象在这时被销毁。

  首先银行储户将ATM卡插入读卡机,读卡机将信息传给客户管理,客户管理提出查询密码,显示部分将输入密码请求显示出来…..因为这个顺序图较长,且很清晰,即便是初学者也很容易读懂,在此就不对本图做过多的解释。


图5.3 ATM取款顺序图

  5.4状态图

  图5.4描述了顾客在ATM机上进行操作会经历的几种状态,及各种状态之间转换的条件。因为是简化了的例子,所以除了等待顾客插入磁卡的起始状态和结束服务的终止状态,顾客会处于输入密码、选择服务类型、存款及取款四种状态。


图5.4 ATM状态图

  插入磁卡后进入输密码状态,当密码输入正确时进入选择服务类型状态,当输入密码不正确时,停留在原状态,但如果三次不正确,服务结束。进入选择服务类型后根据选择的不同,顾客可进入存款和取款状态。存、取款结束后,顾客既可以选择结束服务到最终状态,也可以选择继续服务回到选择服务类型状态。

  通过状态图我们可以无歧义的了解各个活动角色是如何在不同状况下转换的,转换的条件是什么,是否会出现死锁现象,是否有条件没考虑周全,是否有状态无法达到。状态图可以帮助我们发现问题,并及时改正。

  5.5活动图

  图5.5参考了Randy Miller的《A Hands-On Introduction for Developers》一文,5.3图中的客户管理和事物管理对应于5.5图中的Bank,图5.3中的读卡机、显示、输入设备及点钞机对应于5.5图中的ATM Machina,银行储户就是Customer。初看活动图和顺序图表达的意义很接近。但我们可以注意到顺序图着重时间的顺序,而活动图侧重于各部分之间的相互制约,对于一些并行的活动能够有效的表示出来。例如5.5图中fork和join处,我们可以很清楚的看到一些并行活动的存在。

  这个活动图以顾客插入卡为开始,以顾客取卡结束。我们可以看到活动图的重点虽然不在时间顺序,但我们同样可以得到时间的信息。


图5.5 ATM银行系统活动图

  5.6协作图

  在第四章中我们知道协作图和顺序图是可以无信息损失的相互转换,只是它们的侧重点是不一样的。顺序图着重于对象间消息传递的时间顺序,协作图着重于表达对象之间的静态连接关系。图5.6将5.3图转换为协作图。

  1.插入ATM卡

  2.接受ATM卡

  3.查询密码

  4.显示输入密码请求

  5.输入密码

  6.密码传递

  7.请求确认密码合法性

  8.确认密码合法性

  9.询问服务类别

  10.显示输入服务服务类别请求

  11.输入取款请求

  12.取款请求

  13.询问取款数额

  14.显示输入数额请求

  15.输入取款数额

  16.传递取款数额

  17.询问取款数额确认

  18.显示确认数额请求

  19.输入确认

  20.传递确认信息

  21.数额合法性确认请求

  22.确认数额和法性

  23.出钞请求

  24.计算帐户余额

  25.出钞

  26.取钞

  27.传递余额并询问是否还需要其他服务

  28.显示帐户余额并提示选择下面的服务


图5.6 ATM系统协作图

  从图上我们可以看出协作图的角色和顺序图的对象是一一对应的,而协作图上的各对象上的协作关系和顺序图上的消息传递是一一对应的。

时间: 2024-09-05 23:34:47

统一建模语言UML轻松入门之综合实例的相关文章

统一建模语言UML轻松入门之基本概念

概念 20 世纪80 年代,随着面向对象技术成为研究的热点,先后出现了几十种面向对象的软件开发方法.其中,Booch.OMT 和OOSE等方法得到了广泛的认可.然而,采用不同方法进行建模不利于开发者之间的交流.而UML则统一了Booch.OMT 和OOSE 的表示方法,而且对其作了进一步的发展.1997 年,UML 被国际对象组织OMG采纳为面向对象的建模语言的国际标准,它溶入了软件工程领域的新思想.新方法和新技术.UML不限于支持面向对象的分析与设计,还支持从需求分析开始的软件开发的全过程.数

《面向对象分析与设计》一1.6关于统一建模语言UML

1.6关于统一建模语言UML UML最初是在多种面向对象分析与设计方法相互融合的基础上形成的,后来发展成为也可以用于业务建模以及其他非软件系统建模的语言.它于1997年11月被对象管理组织(Object Management Group)采纳为建模语言规范,随后被产业界和学术界广泛接受. UML定义了建立系统模型所需要的概念并给出了表示法,但它并不涉及如何进行系统建模.因此它只是一种建模语言,而不是一种建模方法.UML是独立于开发过程的,也就是说它可以适用于不同的开发过程. UML 2.4规范由

JAVA与模式 学习笔记(一) 统一的建模语言UML介绍(2

  三.类图        类图就是显示出类.接口以及它们静态结构和关系的图.类图的基本元素是类或者接口. 类的框可分为一下几层 类名 属性清单 方法清单 性质清单       如果一个类有内部成员类,那么它的类图就会有5层.在类图中,除了类名层不能省略必须显示外,其他几层在UML中都可以省略的.        第一层是类名,如果类名为正体字,表明类是具体的(Concrete,即可以实例化的),变量名如果是斜体的,表明类是抽象的.         第二层是属性层.左面如果有+号,表明它是publ

《数据结构与抽象:Java语言描述(原书第4版)》一P.4.3 统一建模语言

P.4.3 统一建模语言 图P-4中的用例图是更强大表示法的一部分,这个表示法称为统一建模语言(Unified Modeling Language,UML).设计人员使用UML来说明软件系统中必需的类及它们的关系.UML能给出复杂系统的整体视图,比用自然语言或程序设计语言描述更有效.例如,英语可能有二义性,而Java代码提供更多的细节.给出明确的类之间的交互图,是UML的强项之一.除了用例图之外,UML还能提供类图,类图将每个类的描述放在类似于CRC卡的方框中.方框内包含类名.它的属性(attr

标准建模语言UML的动态建模机制

1.消息 在面向对象技术中,对象间的交互是通过对象间消息的传递来完成的.在UML的四个动 态模型中均用到消息这个概念.通常,当一个对象调用另一个对象中的操作时,即完成了一次消息传递. 当操作执行后,控制便返回到调用者.对象通过相互间的通信(消息传递)进行合作,并在其生命周期中根 据通信的结果不断改变自身的状态. 在UML中,消息的图形表示是用带有箭头的线段将消息的发送 者和接收者联系起来,箭头的类型表示消息的类型,如图2所示. UML定义的消息类型有三种: 简单消息(Simple Message

uml建模语言-uml中的关系都有什么别名

问题描述 uml中的关系都有什么别名 最近刚学了uml,其中有五个关系:依赖,关联,聚合,泛化,实现.这五个关系是否还有别的名字表达,比如包含,他和上面那个关系是对等的 解决方案 (1).用例图:展示系统外部的各类执行者与系统提供的各种用例之间的关系 (2).类图:展示系统中类的静态结构(类是指具有相同属性和行为的对象,类图用来描述系统中各种类之间的静态结构) (3).对象图:是类图的一种实例化图(对象图是对类图的一种实例化) (4).包图:是一种分组机制.在UML1.1版本中,包图不再看作一种

【译】统一样式语言

本文讲的是[译]统一样式语言, 原文地址:A Unified Styling Language 原文作者:本文已获原作者 Mark Dalgleish 授权 译文出自:掘金翻译计划 译者:ZhangFe 校对者:JackGit, yifili09, sunshine940326, sunui 统一样式语言 在过去几年中,我们见证了 CSS-in-JS 的兴起,尤其是在 React 社区.但它也饱含争议,很多人,尤其是那些已经精通 CSS 的人,对此持怀疑态度. "为什么有人要在 JS 中写 CS

XSLT轻松入门

XSLT轻松入门第一章:XSLT概念 作者: 阿捷 前言 大家好,从今天起我们将一起来学习XML家族的另一种语言XSLT,XSLT类似HTML中的CSS,但是比CSS功能要强大的多.学习XSLT的前提是您对XML已经有一些了解,如果您没有学习过XML,可以先点这里(http://www.etechnic.com.cn/columns/xml_1.shtml)看我先前写的一篇文章<XML轻松入门手册>.XSLT可以说更偏向是一种程序语言,但它没有常见程序语言复杂,甚至比js等脚本语言还简单,所以

《C语言开发从入门到精通》一第1章 C语言之定位1.1 C语言的诞生

第1章 C语言之定位 C语言开发从入门到精通 C语言是当前所有开发技术中使用较为广泛的一门语言,从它诞生之日起就深受程序员们的喜爱.随着C语言的普及,使得后来的开发语言都或多或少借鉴或遵循了它的一些模式.另外,C语言是计算机编程领域中最早的高级语言之一,它的出现推动了软件行业的迅猛发展.本章将简要介绍C语言的基本知识,为读者步入后面的学习打下基础. 本章内容 C语言的辉煌诞生 第一印象的建立 理解编译系统--学习的第一步 揭开存储器的层次 技术解惑 学习C语言还有用吗 怎样学好C语言 学好C语言