面向对象技术及UML教程第13章UML项目实训第13章UML项目实训前面章节介绍了面向对象的基本概念、软件开发过程和UML。介绍了UML的主要图符、模型图以及这些模型图的应用。在学习了这些知识、方法和技能后可能还不清楚如何在一个实际项目中应用UML。本章将给出一个具体的实例—“打击游戏”,应用UML完成项目开发的全过程。13.1项目启动在实际的软件公司中,软件项目一般都是由软件项目组开发的在软件项目组中每个项目组的成员都有自己明确的分工,他们相互合作完成项目开发项目启动就是参照软件公司的软件项目开发方式,先组建项目组,确定项目的目标,制定项目开发计划,为实际的项目开发做好准备。13.1项目启动项目组一般由4到5人组成,采用自由结组的方式定义四个角色:项目经理系统分析员程序员测试员13.1.1建立项目组13.1项目启动明确开发目标打击游戏的项目目标可以确定为:开发一个简单的小娱乐游戏,通过点击游戏窗口中的图片,可以赢得游戏分数,随着分数的积累能够升级。制定开发计划(详细内容见教材)为什么先制定开发计划?一般在软件项目开发之初会根据项目开发的合同时间确定一个项目计划。13.1.2制定开发计划13.2项目需求分析这里要开发的打击游戏属于自己开发产品,因此需要系统分析员组织项目组成员进行系统的需求分析具体的需求可以参考市面上流行的这些小游戏,根据它们提供的功能特点,游戏特色,吸引玩家的地方等等在项目组全体成员的共同努力下,尽量多的挖掘出系统的需求13.2.1需求获取13.2项目需求分析打击游戏的需求分析是从功能描述、界面描述两个方面着手的游戏提供一个界面,随机在某个位置上放置一幅图片。玩家可以点击该幅图片,当图片被点中时,图片消失,在窗口上别的位置上再出现一幅图片,游戏继续;如果在规定的时间内玩家没有点中图片,游戏结束。玩家每次点中图片后,给玩家加分,将分数显示在界面上。当玩家的分数达到一定数值后,游戏晋级,表现为图片停留的最长时间减少。13.2.2需求描述13.2项目需求分析用例图13.2.2需求描述13.2项目需求分析用例说明:玩家:实际游戏的软件使用者,通过点击图片,获取分数。Timer:计算机系统的定时器,负责放置图片,记录图片显示时间。打击游戏:玩家点击图片,赢得分数。记录分数:系统记录玩家的分数,显示玩家的最后得分。晋级:当玩家得到的分数达到某个规定的限值时游戏晋升到下一个级别。13.2.2需求描述13.2项目需求分析事件流:1.玩家启动游戏,进入游戏界面;2.玩家点击开始按钮,游戏开始;3.定时器在界面的某个位置放置一张图片4.规定时间内,点击图片,图片消失,玩家得分;5.系统显示玩家的分数;6.循环3~4;7.当玩家分数达到一个规定的值时,玩家晋级,显示玩家的级别。8.如果玩家已经通关,游戏结束;9.循环3~8;13.2.2需求描述13.2项目需求分析备选事件流:3.a玩家没有点击到图片,并且时间片结束,游戏结束,显示对话框“游戏结束,您的得分为XXX,是否重新开始游戏!”;8.a玩家通关后,显示对话框“您已经通关,是否重新开始游戏!”;13.2.2需求描述13.2项目需求分析13.2.3软件界面打地鼠打地鼠开始暂停退出游戏分数13.2项目需求分析1、加分规则:2、晋级规则:3、难度规则:13.2.4游戏规则定义13.2项目需求分析1、启动游戏2、进行游戏3、游戏晋级4、游戏通关5、游戏失败6、暂停游戏13.2.5游戏说明13.3使用UML进行系统设计进行系统设计主要步骤:首先根据对需求用例的事件流进行分析,找到系统中的备选对象。其次分析系统中具体对象和对象之间的关系,也就是对象之间如何进行消息传递。再次根据上面的分析,设计出系统顺序图或协作图。最后,进行抽象得到系统的静态结构图---类图。13.3使用UML进行系统设计从事件流描述中找出所有可能的对象:界面:游戏的界面图片:打击游戏界面上显示的图片分数:游戏玩家在玩游戏中赢得的分数级别:游戏的难度等级,玩家获得的分数达到一定值,游戏晋级定时器:控制游戏界面中图片的显示时间13.3.1系统备选对象13.3使用UML进行系统设计进一步分析可能还有以下对象:棋盘:游戏界面中的显示图片的区域,被划分成3行4列共12个单元格,每个单元格中可以显示图片系统:控制和管理游戏中的系统事件13.3.1系统备选对象13.3使用UML进行系统设计被选对象:系统:System图片:Picture棋盘:Board定时器:Timer级别:GameLevel分数:Score13.3.2系统对象分析13.3使用UML进行系统设计玩家要想开始游戏,就需要给发一个开始消息给系统对象System发送一个消息start()13.3.2系统对象分析PlayerSystemstart()13.3使用UML进行系统设计系统对象收到开始游戏后,首先需要显示游戏的棋盘。这时系统对象System需要给游戏盘对象Board发送一个显示棋盘的消息displayPic()13.3.2系统对象分析SystemBoarddisplayPic()13.3使用UML进行系统设计显示棋盘,同时还需要在棋盘上显示一张图片。这时需要棋盘对象Board给图片对象Picture发送一个消息show()13.3.2系统对象分析BoardPictureshow()13.3使用UML进行系统设计显示玩图片后,需要开始记录图片的显示时间。这时需要系统对象System给定时器对象Timer发送一个消息start()13.3.2系统对象分析SystemTimerStart()13.3使用UML进行系统设计汇总得到协作图13.3.2系统对象分析13.3使用UML进行系统设计点击图片后,隐藏图片,增加分数,计算晋级按照前面过程可以得到协作图13.3.2系统对象分析13.3使用UML进行系统设计前面分析了系统中的对象,进一步对这些对象进行抽象可以得到类和类间关系13.3.3系统类图设计13.3使用UML进行系统设计完成系统类图设计后继续:编写系统设计规格说明书详细记录对象的分析和设计过程给出系统顺序图或协作图,并给出说明给出经过抽象后得到的类图,给出类的主要属性和方法的描述13.3.3系统类图设计13.4使用UML进行类设计13.4.1添加系统类13.4使用UML进行类设计13.4.2类图设计系统设计类在具体实现时可能被转化成一个包13.4使用UML进行类设计13.4.2类图设计系统设计中的类在实现中也可能还映射成一个类,例如System类有时系统设计中的类在实现是可能消失或者变成了一个属性或方法了13.4使用UML进行类设计13.4.3添加属性•对设计类进行细化,增加属性•类Level中需要增加一个属性gameLevel•类Board中需要增加一个图片类的引用属性pic13.4使用UML进行类设计13.4.4添加方法对设计类进行细化,例如System类增加方法:start():开始游戏方法。hit():用户点击动作处理方法。System():构造系统中的主要对象。init():初始化重要对象的属性。stop():结束游戏。addScore():游戏加分。addLevel():游戏晋级。13.4使用UML进行类设计13.4.4添加方法例如System类增加方法后类图13.4使用UML进行类设计13.4.5类图设计细化后实现类图13.4使用UML进行类设计13.4.5类图设计System类的主要方法:init():初始化参数;start():启动计时器,并显示图片;stop():游戏结束;addScore():计算和增加玩家分数;addLevel():计算和增加玩家级别;13.4使用UML进行类设计13.4.5类图设计Timer类的主要方法:Star():启动计时器;13.4使用UML进行类设计13.4.5类图设计TimeLength类的主要属性和方法:INIT_TIME_LENGTH:初始的时间片长度属性的值getTimeLenth():获取时间片长度;setTimeLenth():重新设置时间片长度;13.4使用UML进行类设计13.4.5类图设计Board类的主要方法:displayPic():显示一张图片;hidePic():隐藏图片;13.4使用UML进行类设计13.4.5类图设计Score类的主要方法:addScore():点击图片正确后,玩家加分;displayScore():显示玩家的得分;getScore():获得玩家的得分;13.4使用UML进行类设计13.4.5类图设计GameLevel类的主要方法:getLevel():获取玩家的级别;setLevel():重新设置玩家的级别;displayLevel():显示玩家的级别;13.5UML设计模型到代码实现转换具体实现代码参见教材13.6UML在测试阶段应用部分测试用例和测试结果编号操作期望结果实际结果结果1点击图片图片消失,系统给玩家加分,分数栏显示分值的变化图片消失,系统给玩家加分,分数栏显示分值的变化与期望的结果相符2没有点中或未点击图片弹出对话框,提示游戏结束,询问是否重新开始弹出对话框,提示游戏结束,询问是否重新开始与期望的结果相符3点击对话框上“是”按钮游戏重新开始,各项数据置为初始值游戏重新开始,分数和级别初始为0与期望的结果相符13.7项目总结本项目开是由项目小组完成的每个项目组成员分配了不同的角色项目开发过程中划分成多个阶段开发过程中使用UML来描述各个阶段的软件产品项目使用面向对象的Java语言来实现。上面这个例子只完成了主要的功能,读者可以按照这个过程继续完成其他功能,也可以参照这个例子完成其他的项目。13.8小结本章以一个打击游戏为例,介绍了如何使用UML来描述一个项目的需求,进行面向对象的分析和设计,最终完成一个项目这个项目中只用到了部分UML模型图,读者如果有兴趣,可以使用其他的UML用例图来分析和设计这个项目