《[高等教育]UML基础与应用.doc》由会员分享,可在线阅读,更多相关《[高等教育]UML基础与应用.doc(75页珍藏版)》请在三一办公上搜索。
1、UML 概 述面向对象技术出现于20世纪70年代末,它是软件工程领域中的重要技术。面向对象技术不仅是一种程序设计方法,还是一种对现实世界中问题的抽象方式。它的出现改变了人们对软件的认识和理解,同时人们也开始了相关技术的研究,其中最重要的是对面向对象建模技术的研究,主要成果就是统一建模语言UML。本章介绍UML的基本概念、UML的历史、UML的主要内容、软件过程的基本知识和主要的UML工具。通过本章的学习可以对UML有一个概括的了解,为学习后续的内容做必要准备。1.1什么是UMLUML(Unified Modeling Language)统一建模语言是用来设计软件蓝图的可视化建模语言。它支持面向
2、对象系统的分析、设计、实现和支付等各个环节,可以用于系统的理解、设计、浏览、维护和信息控制。UML是由世界著名的面向对象技术专家Grady Booch、James Rumbaugh和Ivar Jacobson发起,在著名的Booch方法、OMT方法、OOSE方法的基础上,广泛征求意见,集众家之长,几经修改而成的。UML并不是一种程序设计语言,而是一种描述程序设计思想的工具,不局限于某个开发平台或某种程序设计语言。UML的特点是使用图符和文档相结合的方式来描述现实世界中的问题及解决问题的方案。1. 模型简单地说,模型是对现实的简化。模型提供了系统的蓝图,包括了从高层次考虑总体系统规划,以及详细的
3、设计和实现。由于人们对复杂事物的理解能力有限,通过建立一个恰当的模型可以更好地理解一个复杂的系统。一个好的模型包括那些对系统有重要影响的主要因素,而忽略那些细枝末节。具体地说,模型主要有以下四个作用:(1)模型可以按照能够理解和接受的方式简单明了地表达一个实际的复杂系统。(2)模型可以帮助深入了解系统的结构和行为。(3)通过对模型的分析和理解,可以更好地实现这个系统。(4)模型可以帮助进行决策。建模是一项经过检验并广为接受的工程技术。这项技术广泛应用于建筑、制造、经济管理等各个行业,同样的软件项目开发中也需要建立模型。在实际应用中,每个项目都能从建模中受益。建立简明、准确的表示模型是把握复杂系
4、统的关键。随着时间的推移和软件技术的发展,所有的应用系统都变得越来越复杂,因此建模技术也越来越成为项目成败的关键。2面向对象的建模随着面向对象技术的广泛应用,面向对象的建模收到越来越多的重视。作为OMG(Object Management Group)标准的UML已经成为主要的面向对象建模语言,受到了计算机界的普遍欢迎,得到了许多科研机构和软件公司的支持。许多世界知名的软件公司都成为UML修订工作的核心小组成员,这些公司包括:Rational公司、HP公司、IBM公司等。UML不仅可以支持面向对象的分析和设计,更重要的是能够有力地支持从需求分析开始的软件开发全过程。使用UML可以对现实问题和需
5、要开发的系统进行可视化描述,以帮助用户和项目组成员理解系统,方便互相之间的交流;使用UML还可以描述一个系统的结构和行为;不同的UML模型图可以作为项目不同阶段的软件开发文档。使用UML可以方便地进行交流和沟通,减少了不同建模系统之间转换的成本。UML适合软件开发的各个阶段,从需求描述道系统完成后的支付。3为什么使用UML软件开发的最终目的就是得到可执行的软件,建模是为了更好地理解要实现的软件系统,设计软件系统的蓝图。在什么情况下需要使用UML?在软件开发过程中是否需要使用UML?可以从以下三个方面来考虑:(1)是否使用面向对象技术来开发软件。(2)软件的规模和复杂程度是否超出了用户的控制能力
6、。(3)是否是一个团队进行软件项目开发。如果满足以上三个方面,建议使用UML进行建模。使用UML进行建模可以学习和理解面向对象技术,有助于同领域专家进行交流,更好地理解全局。使用UML可以促进面向对象技术的学习。对于大多数人来说,学习一门面向对象语言并不难,难的是如何进行面向对象程序开发、如何发挥面向对象语言提供的优势。UML可以帮助理解面向对象技术,进行面向对象的设计。在理解用户需求方面,UML提供了专门的用例图,使用用例图可以方便有效地捕获用户需求。在描述系统的静态结构方面,UML提供了类图和包图。UML还提供了其他的图来描述系统的行为和构成。模式是重要的面向对象设计技术,使用UML还可以
7、有助于表述和学习模式。使用UML可以促进领域专家进行交流。软件开发面临的最大问题是如何在一个合理的费用前提下构造一个正确的系统,以满足用户的需求。这个问题主要表现在如何同用户进行有效的交流。软件开发人员有自己的专业和术语,用户同样也有自己的专业和术语,为了构建软件系统,软件开发人员需要了解用户的专业和术语,也就是了解用户领域的知识。向该领域的专家学习并同他们进行交流是学习领域知识很好的方法。UML提供了用例图用于了解用户需求。用例图强调系统的整体性,强调系统外在的功能,强调系统对使用者有什么帮助和好处,强调系统与外部的交互,辅以其他的UML模型图,可以很好的对咬开发的系统进行描述,为进一步构造
8、正确的系统打下坚实的基础。采用UML可以帮助理解全局。开发大型的软件项目时,经常会犯下只见树木不见森林的错误。这时开发人员系统能够从全局来了解和理解一个系统,UML提供了多种模型图用来从高层描述系统。通过使用这些图,可以方便地了解整个系统功能、结构和行为。在具体的软件项目开发中,使用UML可以建模不一定要用到UML中所有的模型图。不同的项目中,每种模型图的详细程度也可能不同。因此在使用UML进行建模时,用到哪些模型图,每张图的详细程度如何,这些主要取决于问题的复杂程度和软件开发的需要。1.2 UML发展历史在20世纪80年代初期开始,众多的方法学家都在尝试使用不同的方法进行面向对象的分析和设计
9、,其中比较成功的有OOA/D、Booch、OMT、CRC等。到1994年10月,James Rumbaugh和Grady Booch把各自独立发展的Booch和OMT方法合并起来,并于1995年成为“统一方法”(Unified Method)0.8版本。随后Ivar Jacobson加入,并引入了用例(User Case)思想,于1996年形成了“统一建模语言”0.9版本。1997年1月,UML1.0版本被提交到OMG组织,作为软件建模语言标准化的候选。1997年11月7日OMG正式采纳,并把UML作为业界标准。1998年OMG接管了UML标准的维护工作,推出了UML的1.3版、1.4版、1.
10、5版。后来又推出了2.0版。关于这些版本的详细文档可以登录OMG的网站查阅,网址是 http:/www.uml.org。1.3 UML主要内容 UML融合了Booch、OMT和OOSE方法中的基本概念,并扩展了原有方法的应用范围。作为一种建模语言,UML的定义包括UML语义和UML表示法两个部分。UML语义描述基于UML的精确元模型定义。元模型为UML的所有元素在语法和语义上提供了简单、一致、通用的定义性说明,使开发者能在语义上取得一致,消除了因人而异的最佳表达方法所造成的影响。此外,UML还支持对元模型的扩展定义。UML表示法定义了UML符号的表示法,为开发者或开发工具使用这些图形符号和文本
11、语法提供了标准,也为开发者对系统进行建模提供了统一的标准。这些图形符号和文字所表达的是应用级的模型,在语义上它是UML元模型的实例。1.3.1 UML模型图UML中定义了5类共计10中模型图。下面在介绍每种模型图时,给出一个简单的例子来加以说明。1.用例图用例图用来描述用户的需求,它从用户的角度描述系统的功能,并指出各功能的执行者。强调谁在使用系统,系统为执行者完成哪些功能。图1.1是一个学生使用计算机辅助教学系统进行自我测试的用例图。2.静态图静态图包括类图、对象图和包图。其中类图用于定义系统中的类,包括描述类的内部结构和类之间的关系,类图主要用于描述系统的静态机构。对象图是类图的一个实例,
12、它描述了系统在某一个具体的时间点上所包含的对象以及各对象之间的关系。包图是由包和类组成,主要表示包与包、包与类之间的关系。宝图用于描述系统的分层结构。图1.2(a)是一个“学生”类的图符,图1.2(b)是“学生”类的具体对象“张三”的对象图图符。学生学生:张三 (a)类图 (b)对象图图1.2 类图和对象图3行为图行为图主要是描述系统的动态模型和对象之间的交互关系,包括状态图和活动图。状态图用来描述类的对象所有可能的状态以及事件发生时状态的转移条件。通常,状态图是对类图的补充。活动图用来描述满足用例要求所要进行的活动以及活动间的约束关系,使用活动图有利于识别系统中的并行活动。图1.3(a)是一
13、个网卡启用状态图,图1.3(b)是启用网卡的活动图。选择网卡停用启用启动设备停止设备(a)状态图图1.3 状态图和活动图(b)活动图使用网卡4.交互图 交互图主要用来描述对象之间的交互关系,包括顺序图和合作图。顺序图用来描述对象之间的交互顺序,着重体现对象间消息传递的时间顺序,强调对象之间消息的发送顺序,同时也显示对象之间的交互过程。合作图描述对象之间的合作关系,更侧重于说明哪些对象之间有消息的传递。两个图之间可以相互转化。例如,图1.4(a)是张三解答试卷并查看结果的顺序图,图1.4(b)是张三解答试卷并查看结果的合作图。张三试卷系统选择试卷生成试卷系统1:选择试卷4:查看结果2:生成试卷图
14、1.4 顺序图和合作图(b):合作图3:答案试卷张三(a)顺序图查看结果答案5.实现图 实现图包括构件图和部署图。构件图用来描述代码构建的物理结构以及各构件之间的依赖关系。一个构件可能是一个资源文件、一个二进制文件或一个可执行文件。部署图定义了系统中硬件的物理体系结构,用来描述实际的物理设备以及他们的连接关系。物理设备用节点表示,在节点内部放置可执行的构件和对象,用来显示节点与可执行软件单元之间的对应关系。 这5类10种模型图从不同的方面对系统进行了描述,把他们有机地结合到一起就可以分析和构造一个一致的系统。本书从第2章开始,用5章的内容分别介绍了UML的5类模型图1.3.2 UML在软件开发
15、各个阶段的应用 从应用的角度上看,采用面向对象技术设计软件系统时,使用用例图来描述用户需求;使用类图、对象图、包图、构件图、和部署图这5种静态图来描述系统的静态结构;使用顺序图、合作图、活动图和状态图这4种图来描述系统动态行为。在软件开发的各个阶段使用不同的UML图对系统进行描述。(1)需求:UML的用例图可以用来描述客户的需求,通过用例建模,可以找出谁与系统打交道、系统的主要功能、系统和外部是如何进行交互的,并进一步分许这个交互的过程。通过对商业过程和用户要构建的系统进行分析,可以准确把握用户的需求,保证最终的软件系统完全符合用户的需要。(2)分析:分析阶段主要对用户的需求进一步的分析,明确
16、要解决问题的细节。使用UML的类图来描述系统的静态结构,使用顺序图、合作图、活动图和状态图来描述系统的行为。(3)设计:根据对系统的分析提出解决问题的方案。使用UML的类图、包括把分析类和分析包转化成设计类和设计包。对类的接口和实现进行设计。(4)实现:在实现阶段,把设计阶段的类转换成某种面向对象程序设计语言的代码。根据UML中详细设计的类图进行实际编码。(5)集成与交付:在系统的集成和交付阶段主要应用了UML的构件图、包图和部署图来进行系统的集成与部署。(6)测试:根据类图对实现的每个单元进行单元测试,然后对每个类和包的接口进行集成测试,最后对整个软件进行系统测试。单元测试使用类图和类的规格
17、说明书,集成测试使用类图、包图、构件图和合作图。系统测试使用用例图来确认系统的功能和行为。在软件开发的不同阶段可能会用到相同的模型图来描述,但每个阶段描述的重点和详细程度不同。例如,在软件分析、设计和实现阶段都用到类图。在分析阶段侧重类的概念描述;在设计阶段侧重类的接口描述;在实现阶段侧重类的实现的描述。很多相同的问题可以用不同的模型图来描述。例如,描述对象之间的关系,可以使用对象图、顺序图、合作图和活动图,但是每个图描述的侧重点不同。1.3.3 UML的应用领域 UML是以图形的方式来描述任何类型的系统,具有很宽的应用领域。UML可以用于描述非软件领域的系统,如机械系统、企业机构或业务过程,
18、以及处理复杂数据的信息系统、具有实时要求的工业系统或过程控制系统等,其中最常用的是建立软件系统的模型。一般来说,UML适合各种软件系统的建模。主要的软件系统包括: (1) 信息管理系统:利用数据库技术,实现用户对所需信息的存储、检索、计算、转换和提交等操作。(2) 电子商务(政务)系统:以互联网络为基础,实现商务运作和行政办公的数字化。(3) ERP(Enterprise Resource Planning):实现企业从计划、生产到商务运作的信息管理数字化。(4) 实时控制系统:采集和检测企业生产过程中的各项技术指标,并根据这些指标的变化情况实施控制。随着计算机网络的普及,在实际应用中大多数系
19、统都不是某一方面的单一系统,而是一种或多种系统的结合。UML具有描述这种综合系统的能力。1.4 软件过程UML是一种建模语言,在实际的软件项目开发中,他要和具体的软件开发过程结合起来才能更好的发挥作用。每一个软件开发组织在进行软件项目开发时,都有自己的软件开发过程,只是有些组织没有把它抽取出来形成公司规范。目前国际上许多研究机构和公司都在研究软件过程。为此,在本节简单介绍一下软件过程。1.4.1 软件过程描述软件过程研究工作开始于20世纪70年代。软件组织为了提高软件产品的质量和用户满意程度,开始研究软件生产过程。通过逐步规范和改进软件的生产过程来控制软件产品的质量,保证产品的质量。目前世界上
20、关于软件过程的研究主要有三个体系:美国的CMM/TSP/PSP、ISO9000系列以及ISO/SPICE标准。ISO9000系列是国际标准化组织于1987年公布的一组标准。他强调通过过程管理来保证产品的质量。具体体现在事前计划、严格按照计划实施、事后检查和分析并采取相应的改进措施,使影响软件产品质量的全部因素在生产过程中始终处于受控状态。其中1994年公布的ISO9001是针对软件行业的质量标准,它是软件组织推行质量认证的一个基础标准,该标准从20个方面提出质量要求。CMM模型包括5个成熟度等级,这5个成熟度等级,分别是:初始级、可重复级、已定义级、已管理级和优化级。除初始级外,其他每个等级包
21、括多个关键领域。如表1.1所示,共计18个关键过程域。表1.1 CMM关键过程域级别焦点关键过程域(KPA)5.优化级持续过程改进缺陷预防技术变更管理过程变更管理4.已管理级产平和过程质量定量过程管理软件质量管理3.已定义级工程过程组织过程焦点组织过程定义培训计划集成软件管理软件产品工程组间协调同行评审2.可重复级项目管理需求管理软件项目计划软件项目跟踪和监督软件质量保证软件配置管理软件子合同管理1.初始级无无初始级软件过程的特点是随意,有时甚至有点混乱,很少有经过定义的过程,成功依靠优秀个人的努力。可重复级软件过程的特点是建立了基本的项目管理过程,可以跟踪项目的进度、花费和功能。已经建立必须
22、的过程规范,成功的经验可以用于相似的项目中。已定义级软件过程的特点是描述软件管理活动和软件工程活动的软件过程都已经文档化和标准化,并纳入组织的标准软件过程中。所有的项目使用经过认可和裁剪的组织内的标准软件过程中。所有的项目使用经过认可和裁剪的组织内的标准软件过程来开发和维护软件。已管理软件过程的特点是收集软件过程质量和产品质量的详细度量数据,定量管理和控制软件过程和产品质量。优化级软件过程的特点是根据过程反馈的定量数据能够进行持续的过程改进。除了上述过程体系外,还有须多软件过程在实际的软件开发中也得到了广泛的应用,这些过程主要有Rational公司的统一软件过程(RUP),极限编程(xp)等。
23、其中统一软件过程把Rational公司的case工具、面向对象思想融合到其中,是目前在业界得到广泛应用的软件过程。Rational公司推出的case工具包中包含了软件开发中常用的case工具,其中最主要的工具就是Rose,该工具支持标准的UML。1.4.2 统一软件过程软件开发过程是一个将用户需求转化为软件系统所需活动的集合。统一软件过程既是一个软件过程,更是一个软件过程框架。它可以适合不同规模、不同类型的软件项目开发。在实际的应用过程中可以根据自己的需要对这个标准过程进行裁减。统一软件软件过程把UML建模语言有机地结合到一起,非常适合采用面向对象软件技术进行软件项目开发。1. 统一软件过程的
24、特点统一软件有三个突出的特点:用例驱动、以构架为中心、采用迭代和增量模型。下面分别介绍这三个特点。(1) 所有的软件开发都是用户需求驱动的。统一软件开发过程采用例来描述用户需求,同时提供了一套方法把用例转化为设计的类图,进一步变成最终的程序代码。在整个软件开发过程中,需求用例是可以跟踪的。也就是说,无论是在设计阶段还是在实现阶段的产品都可以找到相应的需求。用例还可以作为用户测试和验收最终软件产品的标准。(2) 构架是一个小的、皮包骨头的系统,它实现了用户的核心需求,包括了系统中最重要的静态和动态特征。构架刻画了,系统的整体,它舍弃了细节部分,突出了系统的重要特征。统一软件过程提供了创建构架的相
25、应方法和过程,可以帮助分析人员和设计人员很好地完成构架的设计。(3) 统一软件过程采用迭代和增量的开发方式,把一个软件产品划分成多个较小的部分,每次完成一个部分,这个部分是产品的一个增量部分。每个增量部分的生产过程是受控的。采用迭代过程的好处是:l 把一个复杂的系统分解成多个简单的系统。l 提高软件项目的可控性。l 降低软件开发的风险。l 有效地应对需求变更。 2. 统一软件过程框架 统一软件过程认为,一个软件产品的开发过程应该包括多次循环。每个循环包括四个阶段:初始、细化、构造和移交。每个阶段又包括多个迭代过程。 统一软件过程是一个二维结构,横向是多个阶段和迭代,纵向是几个工作流:需求、分析
26、、实现、测试等。统一软件过程框架如图1.5所示。 每个工作流程包括多个人员、活动和产品。人员包括所有与项目有关的人,如用户项目组开发人员等。活动是指在过程中需要人员执行的工作单位。在统一软件过程中包括大量的活动,如用例分析、类的设计等。产品是指每个活动、流程、过程的产出,如模型、源代码、可执行代码和文档等。 统一软件过程结合了面向对象的概念、思想、过程和工具支持。了解统一软件过程对掌握UML和面向对象技术很有帮助。 阶段工作流量业务建模需求分析设计实施测试部署配置与变更管理项目管理环境先启精华构建产品化初始精化第1次精化第2次构建第一次构建第二次构建第N次产品化第一次产品化第二次 迭代 图1.
27、5统一软件过程框架1.5UML工具UML工具是帮助软件开发人员方便使用UML的软件,它的主要功能包括:支持各种UML模型图的输入、编辑和存储;支持正向过程和逆向过程;提供与其他开发工具的接口。不同的工具提供的功能不同,各个功能实现的程度也不同。在选择UML工具时主要考虑以下几个方面的因素:产品的价格、产品的功能、与自己的开发环境结合的是否密切。目前主要的UML工具有Rational公司的Rose,Together Soft公司的Together,微软公司的Visio等。附录A中给出了主要的UML工具生产公司、产品名称、使用平台,供读者参考。1.5.1主要UML工具介绍Rationl公司推出的R
28、ose是目前最好的基于uml的Case工具,它把uml有机地集成到面向对象的软件开发过程中。不论是在系统需求阶段,还是在对象的分析与设计、软件的实现与测试阶段,它都提供了清晰的uml表达方式和完善的工具,方便建立起相应的软件模型。使用Rose可以方便地进行软件系统的分析、设计,很容易同常见的开发环境和程序设计语言进行链接。Rose具有正向工程、逆向工程和对象模型更新等功能。用户修改模型后可以直接反应到代码上,同样用户对代码框架的修改也可以反映到模型上。同时它还提供对多种程序设计语言的支持,包括常见c+、Java、Visual Basic等。Together将建模工具和Java集成开发环境有机地
29、结合到一起。它的主要特点是符合UML规范的建模工具,提供程序开发人员使用的源码编辑器和范式建立的专家。支持Java和C+,完全兼容J2EE的规范,支持EJB3.0等。Visio Professional 2000提供内建的UML支持。如果考虑Visio绘图工具同时提供绘制多种图形的功能,这是一个相当有价值的工具。1.5.2如何选择UML工具从附录A中可以看到UML支持工具众多。当用户需要UML工具时,听该如何从中进行选择?如何选中符合自己需求同时具有合适价格的工具?下面主要从技术方面来介绍选择UML工具应该注意哪些方面。(1) 支持UML1.3 虽然许多工具声称的完全支持UML1.3,但是实际
30、上很难做到这一点。一些工具并不能做到广告所声称的完全支持。工具至少支持一下UML模型图:用例图、类图、合作图、顺序图、包图、状态图。(2) 支持项目组的协同开发 对于一个大项目,开发人员之间可以共享设计模型图是必需的。允许某个开发人员拥有整个模型,而其他人对模型及其组件可以只读访问或将这些组件结合到自己的设计中。重要的是,这种工具应该允许从另一个模型只引入所需要的组件而不必引入整个模型。这样可以方便一个项目的协作开发。(3)支持双向工程支持正向工程和逆向工程是一项复杂的需求,不同厂商在不同程度上支持这一点。正向工程在第一次从模型产生代码时非常有用,这项技术将节省许多用于编写类、属性、方法代码等
31、琐碎工作的时间。将代码转换成模型或者重新同步模型和代码时,逆向工程就是显得非常有用。一种好的建模工具至少应该支持一开始的正向工程和全过程的逆向工程。(4) HTML 文档化建模工具应能为对象模型极其组件无缝地产生HTML文档。HTML文档应包括模型中每个图形,以便开发者可以通过浏览器迅速查询,而不需要加载建模工具本身。(5) 打印支持 建模工具应允许一张大图能够准确地用多个页面打印出来,并提供打印预览和缩放功能,能够把模型图放置到所需的页数内。最好能够允许将每一张模型放置在单页中打印。(6) 健壮性软件的健壮性是一个基本的要求,必须防止设计期间工具崩溃或者在模型没有备份的情况下崩溃。(7) 开
32、发平台要慎重地考虑工具将运行那种平台上,UML工具应该与应用系统保持平台一致。(8) 提供XML支持XML将成为各种工具之间数据交换的标准格式。能够很好地支持XML无疑将为软件的未来提供更好的兼容性。以上介绍了选择UML工具应该考虑的主要因素。在实际购买时还应该综合考虑价格、服务、通用性等方面的因素。第二章用例图 用例图是UML的重要组成部分,主要用来描述用户的需求。UML侧重从最终用户的角度来理解软件系统的需求,强调谁在使用系统、系统可以完成哪些功能。用例分析技术已经是一种公认有效的用户需求获取、分析和描述技术。本章将从UML试图、用例图、用例图应用等几个方面进行介绍。最后结合具体的实例讲述
33、如何在实际的软件项目中使用用例图来获取、分析和描述用户需求。2.1 UML视图 一般开发人员把要开发的软件称为一个系统。对于一个系统可以从多个角度进行描述。对于不同类型的系统,系统结构需要重点描述的方面也不同。如学生成绩管理系统、电梯控制系统、图形界面等,这些系统完成的功能不同,实现的方法上也有差异,体系结构的描述重点也不同。 在UML中经常用5个互联的视图来描述系统的体系结构,如图2.1所示。设计视图实现视图进程视图部署视图用例视图图2.1 UML视图(1) 用例视图(Use-case View)由专门描述可被最终用户、分析人员和测试人员看到的系统行为的用例图组成。最终用户使用用例图来理解要
34、完成系统的功能,确认是否符合自己的要求;分析人员使用用例图了描述用户的需求,与用户和设计人员进行交流;测试人员根据用例图来验证实现后的系统是否符合用户的需求。(2) 设计视图(Logical View)包含了主要的设计包、子系统、类和接口,主要从软件的角度来描述系统要解决的问题和解决方案。设计视图支持系统的功能需求,实现系统提供给最终用户的服务,在UML中使用类图、对象图、交互图和行为图来描述。设计人员根据用例图和其他的补充需求设计出要实现的系统,从设计人员的角度对这个系统进行描述称为设计视图,该视图是实现视图的基础。(3) 进程视图(Process View)包含了系统并发和同步机制的线程和
35、进程。该视图主要针对系统的性能、可扩展性和吞吐量。所使用的UML图与设计视图相同,但侧重对线程和进程的描述,对系统中重要对象的同步和通信过程进行描述。(4) 实现视图(Implementation View) 包含了软件模块的静态组织结构,在具体的开发环境中可能是按照包或层来组织,这些软件模块可以是源代码、数据文件、构件、可执行文件或其他的相关软件产品。在UML中实现视图用类图、包图、对象图、数据图、合作图、状态图和活动图来描述。实现人员根据设计视图和进程视图来最终实现系统,从实现人员的角度来描述系统称为实现视图。(5) 部署视图(Deployment View)包含了系统硬件拓扑结构节点,各
36、种软件模块和构件结构。该视图主要描述组成物理系统的各个节点的分布、交付和安装,各种可执行的软件、运行构件是如何映射到物理平台或节点上。在UML中主要使用部署图和构件图来描述。这5个互联的视图被称为“4+1”视图。4是指四个视图:设计视图、进程视图、实现视图和部署视图,它们从不同的角度来描述系统的体系结构。1是指用例视图,用例视图是整个系统开发的起点,它与其他4个视图密切相关。不同的视图使用不同的UML模型图来描述。用例视图使用用例模型图描述;设计视图和进程视图使用设计模型图描述;实现视图使用实现模型图来描述;部署视图使用部署模型图来描述。从本章开始将对用例模型等模型图进行逐一介绍。2.2 用例
37、图用例模型包括用于描述一个系统的所有用例图,每个用例图包括用例、执行者、用例与执行者之间的关系以及用例描述等。用例模型由Ivar Jacobson在开发AXE系统中首先使用,并加入由他所倡导的OOSE和Objectoyr方法中。用例方法引起了面向对象领域的极大关注。自1994年Ivar Jacobson的著作出版后,面向对象领域已经广泛接纳了“用例”这一概念。图2.2是一个用户订货系统的用例图。通过这个模型图,可以对用户订货系统有一个概括的了解。 用例模型用来描述一个系统外在可见需求的情况。用例模型用于需求分析阶段,该模型是系统开发者和用户反复讨论的结果,表明了开发者和用户对需求规格达成的共识
38、。首先,用例模型描述了待开发系统的功能需求;其次,用例模型讲系统看作黑盒,仅从外部执行者的角度来理解系统,而不去关心系统的内部结构;再次,用例模型驱动了需求分析之后各阶段的开发工作,不仅在开发过程中保证了系统所有功能的实现,而且被用来测试所开发的系统,从而影响到开发工作的各个阶段和UML的各个模型。在UML中,一个用例模型由若干个用例图来描述,每个用例图的主要元素是用例和执行者。2.21 用例图概述用例图描述系统外部的执行与系统提供的用例之间的某种联系,一个用例就是外边执行者与系统之间的一系列典型交互过程,每个用例为执行者提供有价值的功能。执行者是那些可能使用这些用例的人或者外部系统。二者之间
39、的联系描述了“谁执行了哪些功能”。图2.3是一个典型的用例图,该图描述了学生选课的情况。从图2.3中可以看出,一个用例图主要包括三个元素:执行者、用例、执行者与用例之间的关系。“学生”是一个执行者,该执行者使用系统来选修课程。“选修课程”是一个用例,该用例为学生提供一个有价值的功能为学生选中自己要学的课程。“学生”和“选修课程”之间的连线描述了用例和执行者之间的关系。下面分别介绍这三个元素。2.2.2 执行者执行者使用一个小人符号来表示,在符号下面标上这个执行者的名称,如图2.4所示。执行者是使用系统的人或其他系统,可以是一个人、一个系统,甚至可以是一个软件实体,例如:定时器。每个执行者都需要
40、一个简要的描述,用一句话或几句话对这个执行者进行说明。例如,图2.3中的执行者学生可以描述如下:“学生”是指所有使用这个系统选修课程的在校学生。有了这个描述,大家就可以使用“学生”这个执行者来讨论问题,而不会出现歧义。在进行用例分析时,首先要找出系统的执行者。一般可以从以下几个方面来考虑怎样找到系统的执行者:l 谁使用系统的主要功能?l 谁需要系统支持日常工作?l 谁来维护、管理系统正常工作?l 系统需要操纵哪些硬件?l 需要与系统交互的其他系统(包括其他计算机系统和其他应用程序)有哪些?l 对系统产生的结果感兴趣的人或事务。在实际应用中,很多人都起着同一种作用,扮演着相同的角色,这样就用一个
41、执行者表示。如图2.3中所示的选修课程用例,用一个执行者“学生”来代表使用这个系统选修课程的所有学生。同样的在实际中也存在这样的情况,一个人同时担任多个角色,那么他就对应多个执行者。例如需要聘请某个学生担任系统的录入员,那么学生在系统中就对应两个角色:“学生”和“录入员”。在寻找执行者时应考虑其作用,而不是一个人或一个工作的名称,这一点是很重要的。2.2.3 用例用例用一个椭圆表示,如图2.5所示。用例的名称有两种标法:一种是把用例的名字写在椭圆的下面,如图2.5(a)所示;另一种是把名字写在椭圆中,如图2.5(b)所示。用例描述的是用户可见的需求,一个具体的用户目标。用例由执行者来执行,用例
42、执行完成后将产生一个对执行者有价值的结果。用例可大可小,但必须是一个具体的用户目标的描述。每个用例都需要一个简要的描述,用一句话或几句话对这个用例进行说明,例如,图2.3中的用例“选修课程”可以描述如下:在最初的用例分析中,使用这样简短的描述来说明一个实例。但随着分析的不断深入,用例的描述也变得更加详细。用例描述的详尽格式参见2.2.6小节。在实际的系统中,可以从以下几个方面来考虑怎样获取用例。l 执行者要求系统提供那些功能?l 执行者需要读、产生、删除、修改或存储的信息有哪些类型?l 系统是否需要把 自身的状态变化告诉执行者?l 系统是否需要知道哪些外部事件,执行者怎样把这些事件告诉系统自动
43、实现?l 系统需要任何输入和输出,输入从何而来,输出到何处?l 当前运行系统(也许是一些手工操作而不是计算机系统)的主要问题是什么?面对一个大系统,要找出所有的用例是一件十分困难的事。为了更好地找出用例,可以先列出执行者清单,再根据 每个执行者来找出他们的目标,最后根据这些目标 就可以得到用例。同理,也可以通过分析来找出更多的执行者。经过这样多次的反复最后可以找出系统中所有的用例和执行者。2.2.4 执行者与用例之间的关系 在用例图中,用例和执行者之间的关系用一条连接二者的;连线表示。如图2.6所示,连线时一条带箭头或不带箭头的线段,该连线称为关联。它表示一个执行者和一个用例之间的关系。 一个
44、用例和一个执行者之间最多只有一个关联关系。但一个执行者可以和多个用例关联,同样一个用例也可以和多个执行者关联。 正是有这种关联组成了系统的用例图。这种关系如图2.7所示。 2.2.5 理解用例前面的介绍通过,大家已经对UML用例图有了一定的认识。现在给出一个用例实例计算机辅助教学用例图,如图2.7所示。通过下面对这个用例的解释,希望读者能有进一步理解图2.2。 从图2.7中可以看到,系统有两个执行者: l 教书l 学生系统有两个用例:l 讲授课程l 自我测试系统有三个关联:l 讲师与讲授课程l 学生与讲授课程l 学生与自我测试执行者“教师”通过执行“讲授课程”这个用例,把要讲的知识传授给“学生
45、”。在执行这个用例的过程中,用例还与执行者“学生”相关。执行者“学生”通过执行用例“zi自我测试”,可以检验自己的学习情况。 通过以上分析,可以看出在计算机辅助教学系统中执行者的目标是:l 教师:把要讲授的知识传授给学生。l 学生:检查自己的学习情况。 在图2.7中,关联都给出了方向,这里使用方向来表水由哪个执行者启动这个用例。每个用例都和一个或多个执行者关联。在这些执行者中,一定从某一个执行者开始执行用例。这个执行者与用例之间的关联方向是从执行者到用例,此时这个用例与其他执行者之间的关联方向一般就是从用例到执行者。每个用例都至少要满足一个执行者的目标,这个执行者就是用例 的启动者。例如,用例
46、“讲授课程”与两个执行者“教书”和“学生”关联,执行者“教师”是这个用例的 启动者。2.2.6 用例描述 通过用例的名称和简要说明,可以知道一个用要完成的功能。为了进一步说明是如何完成这些功能的,就需要对用例描述主要用来说明执行者为了实现自己的目标与系统进行交互的过程。这个过程由执行者开始,执行者向系统发出一个请求。系统响应执行者发出的请求并给出一个结果。执行者再根据这个结果,再次给出下一个请求,这样一直执行者得到一个有价值的结果为止,整个用例交互过程结束。详细的用例描述参见2.5.3小节的例子。 在用例描述中,需要对用例的主要属性进行说明。这些属性主要有:l 事件流l 前置条件l 后置条件l 特殊要求l 扩展点l 问题说明这6个属性中最主要的是关于事件流的描述。1.事件流 事件流描述了一个用例在执行时执行者与系统之间的交互过程。这个过程包