继续教育UML学习与应用总结.docx
《继续教育UML学习与应用总结.docx》由会员分享,可在线阅读,更多相关《继续教育UML学习与应用总结.docx(29页珍藏版)》请在冰豆网上搜索。
继续教育UML学习与应用总结
UML学习总结
一、几种UML工具汇总。
目前市场上UML工具比较多,我们将列出比较有影响力的UML工具。
◆RationalRose:
如果不提及由Rational软件公司开发的RationalRose建模工具,那就无需考虑UML工具的完整性。
RationalRose(Rose代表“RationalObject-orientedSoftwareEngineering”)对UML来说,是一款可视化的建模工具。
它有不同的版本来满足不同的需求。
RationalRose提供上面我们谈到所有的特征。
除此之外,RationalRose也可以支持在同样的环境下进行数据模型的设计。
RationalRose更有趣的特征就是能够将UML中的图作为网页和图片发布。
这就使得你能够在不安装RationalRose的情况下分享你的应用设计。
◆TogetherControlCenter:
由美国的Borland公司开发的TogetherControlCenter(源于Togethersoft)是一款可视化的UML建模工具。
TogetherControlCenter支持UML图、MVC建模、正向工程技术和自动更新工程技术,以及双向工程技术,并且可以集成到比如IBMWebSphereStudio的集成开发环境。
它不但支持文档编制,并且可以支持协作建模环境。
TogetherControlCenter的另一个特征是patternrepository。
patternrepository使得经常使用的图和设计形式能够在建模中重新使用。
它还支持Rational软件统一开发过程和极限编程方法等。
◆Poseidon:
源于Gentleware的Poseidon在ArgoUML开源软件中有其坚固的根基。
作为开源的ArgoUML建模工具是一款实用的工具,包含全部UML特征的并且可以免费获得。
Gentleware已经采取措施使得ArgoUML成为一款很好的建模工具。
使用Poseidon不同的格调来满足不同的需求。
Poseidon通过使用单一用途的插件来支持正向技术和自动更新技术以及文档编制。
Gentleware并没有忘记它的开源的特性,因此,为个人软件开发者免费提供UMLCommunityEdition1.5的Poseidon。
二、RationalRose工具介绍与使用。
RationalRose是一种面向对象的统一建模语言软件设计工具,用于可视化建模和公司级水平软件应用的组件构造。
就像一个戏剧导演设计一个剧本一样,一个软件设计师使用RationalRose,以演员(数字)、使用拖放式符号的程序表中的有用的案例元素(椭圆)、目标(矩形)和消息/关系(箭头)设计个种类,来创造(模型)一个应用的框架。
当程序表被创建时,RationalRose记录下这个程序表然后以设计师选择的C++,VisualBasic,Java,Oracle8,CORBA或者数据定义语言(DataDefinitionLanguage)来产生代码。
RationalRose的两个受欢迎的特征是它的提供反复式发展和来回旅程工程的能力。
RationalRose允许设计师利用反复发展(有时也叫进化式发展),因为在各个进程中新的应用能够被创建,通过把一个反复的输出变成下一个反复的输入。
(这和瀑布式发展形成对比,在瀑布式发展中,在一个用户开始尝试之前整个工程被从头到尾的完成。
)然后,当开发者开始理解组件之间是如何相互作用和在设计中进行调整时,RationalRose能够通过回溯和更新模型的其余部分来保证代码的一致性,从而展现出被称为"来回旅程工程"的能力.RationalRose是可扩展的,可以使用刻下载附加项和第三方应用软件.它支持COM/DCOM(ActiveX),JavaBeans,和Corba组件标准.
RationalRose界面图:
Rose支持的模型图
三、使用案例
网上选课系统主要包括如下功能:
管理员通过管理界面进入,建立本学期要开
的各种课程、将课程信息保存在数据库里并可以对课程进行改动和删除。
学生通过
客户机浏览器根据学号和密码进入选课界面,在这里学生可以进行三种操作:
查询已选课程、选课以及付费。
同样,通过业务层,这些操作结果存入数据库中。
本系统拟使用Java语言通过三层模型实现:
数据核心层,业务逻辑层和接入层。
其中,数据核心层包括对于数据库的操作;业务逻辑层作为中间层对用户输入进行逻辑处理、再映射到相应的数据层操作;而接口层包括用户界面,包括系统登入界面、管理界面、用户选课界面等。
本系统涉及的用户包括管理员(Registrar)和学生(Student),他们是用例图中的活动。
数据库管理系统是另外一个活动者。
注:
因为付费方式的多样化,所以在此将不讨论涉及到付费有关的设计。
1.1用例图
1.1.1事件流
①添加课程事件流:
1.管理员选择进入管理界面,用例开始。
2.系统提示输入管理员密码。
3.管理员输入密码。
4.系统验证密码。
A1:
密码错误
5.进入管理界面,系统显示目前所建立的全部课程信息。
6.管理员选择添加课程。
7.系统提示输入新课程信息。
8.管理员输入信息。
9.系统验证是否和已有课程冲突。
A2:
有冲突
10.系统添加新课程,提示课程添加成功。
11.系统重新进入管理主界面,显示所有课程。
12.用例结束。
其他事件流:
A1:
密码错误
1.系统提示再次输入。
2.用户确认。
3.三次错误,拒绝再次访问。
4.否则进入添加课程事件流第5步。
A2:
有冲突
1.系统提示冲突,显示冲突课程信息。
2.用户重新输入。
3.继续验证直到无冲突。
4.进入添加课程事件流第10步。
注:
删除课程事件流和修改课程事件流与此类似,在此不再详述。
②选课事件流:
1.学生进入选课登入界面,用例开始.
2.系统提示输入学号和密码.
3.学生输入学号密码.
4.系统验证:
A1;验证失败。
5、进入选课主界面。
6、学生点击选课。
7、系统显示所有课程信息。
8、学生选择课程。
9、系统验证课程是否可选。
A2:
不可选。
10、系统提示课程选择成功,提示学生交费。
11、用例结束。
错误流:
A1:
验证失败
1.系统提示验证失败,提示重新输入。
2.三次失败,拒绝访问。
3.成功,转选课事件流第5步。
A2:
不可选
1.系统提示不可选及原因。
2.学生重新选课。
3.重新验证直至成功。
4.转选课事件流死10步。
注:
查询事件流比较简单,在此不详述。
1.1.2用例图
点击浏览器中的UseCaseView中的Main,弹出用例图窗口,添加用例如下图:
活动者包括:
People,Registrar,Student,Database.其中Registrar和People之间是概括(generalization)关系,Student和People之间也是概括(generalization)关系。
用例包括:
SelectCourse,QueryCourse,PayforCourse,AddCourse,ModifyCourse,DeleteCourse.
1.2活动图
在用例图中分析了各个用例的事件流,故在此不在叙述。
根据用例里的事件流描述,得到各个用例的活动图。
1.2.1AddCourse活动图
在浏览器中,使用鼠标右键点击UseCaseView,在弹出的菜单里选择“New”—“ActivityDiagram”,则在UseCaseView中添加一项”State/ActivityModel”,该项产生一个名为“NewDiagram”的活动图,将其改为“AddCourse”.
AddCourse活动图如下:
分成三个泳道:
用户接口,业务逻辑接口,数据库接口。
1.2.2DeleteCourse活动图
在浏览器中,使用鼠标右键点击”State/ActivityModel”,在弹出的菜单里选择“New”—“ActivityDiagram”,该项产生一个名为“NewDiagram”的活动图,将其改为“DeleteCourse”.
DeleteCourse活动图如下:
同样分成三个泳道:
用户接口,业务逻辑接口,数据库接口。
1.2.3ModifyCourse活动图
在浏览器中,使用鼠标右键点击”State/ActivityModel”,在弹出的菜单里选择“New”—“ActivityDiagram”,该项产生一个名为“NewDiagram”的活动图,将其改为“ModifyCourse”.
ModifyCourse活动图如下:
分成三个泳道:
用户接口,业务逻辑接口,数据库接口。
1.2.4QueryCourse活动图
在浏览器中,使用鼠标右键点击”State/ActivityModel”,在弹出的菜单里选择“New”—“ActivityDiagram”,该项产生一个名为“NewDiagram”的活动图,将其改为“QueryCourse”.
QueryCourse活动图如下:
1.2.5SelectCourse活动图
在浏览器中,使用鼠标右键点击”State/ActivityModel”,在弹出的菜单里选择“New”—“ActivityDiagram”,该项产生一个名为“NewDiagram”的活动图,将其改为“SelectCourse”.
SelectCourse活动图如下:
分成三个泳道:
用户接口,业务逻辑接口,数据库接口。
1.3序列图和协作图
序列图主要由活动者(actor)、对象(object)、消息(message)、生命线(lifeline)和控制焦点(focusofcontrol)组成。
1.3.1SelectCourse序列图与协作图
查找SelectCourse用例的对象,包括有:
①界面②课程③对于业务层的操作,也应该有对象进行处理。
④事件流中设计的角色有:
学生、数据库。
分析对象角色之间交互的消息,本用例主要有以下交互:
1.学生通过界面发送选课命令。
2.界面向控制对象请求课程信息。
3.控制对象向数据库发送查询数据消息。
4.控制对象暂存数据库的查询结果。
5.界面对象从控制对象中取得所有的课程信息。
6.在界面上显示所有的课程信息。
7.界面对象发送命令要求控制对象删除课程信息。
8.学生选择课程。
9.界面对象要求学生输入学好。
10.界面对象向控制对象发送信息,查询该学生是否可以选择选定的课程。
11.控制对象从数据库中查询关联信息。
12.控制对象判断是否可以选课。
13.如果可以选课,则向数据库中添加关联信息。
14.向界面对象返回信息。
根据以上分析,整理的最终SelectCourse序列图如下:
选择SelectCourse序列图,按“F5”可以直接生成SelectCourse的协作图,如下:
1.3.2AddCourse序列图与协作图
查找AddCourse用例的对象,包括有:
①界面②课程③对于业务层的操作,也应该有对象进行处理。
④事件流中设计的角色有:
管理员、数据库。
分析对象角色之间交互的消息,本用例主要有以下交互:
1.管理员进入管理界面,选择添加课程功能。
2.界面提示用户输入课程信息。
3.界面对象创建一个课程对象。
4.通过控制对象来对课程信息进行合法性检查。
‘
5.控制对象向课程对象返回结果。
6.控制对象向数据库查询课程相关信息。
7.控制对象对查询结果进行判断。
8.控制对象向数据库中插入数据。
9.在界面上显示结果。
10.控制对象撤消建立的课程对象。
根据以上分析,整理的最终AddCourse序列图如下:
选择AddCourse序列图,按“F5”可以直接生成AddCourse的协作图,如下:
1.3.3ModifyCourse序列图与协作图
采用同样的方法分析,ModifyCourse序列图如下:
选择ModifyCourse序列图,按“F5”可以直接生成ModifyCourse的协作图,如下:
1.3.4DeleteCourse序列图和协作图
删除课程的过程,涉及的对象有:
①管理员②界面③控制对象④数据库
这些对象的交互如下:
1.管理员输入待删除的课程信息(IID)等。
2.界面对象将信息发送给控制对象。
3.控制对象查询课程信息是否有效。
4.控制对象向界面返回信息,如果课程信息有效,则要求界面提示管理员确认删除。
5.管理员确认删除课程。
6.界面将确认删除的信息发送给控制对象。
7.控制对象将确认删除对象的信息发送给数据库。
8.数据库实施删除,并将结果返回过控制对象。
9.控制对象将结果返回给界面。
DeleteCourse序列图如下:
选择DeleteCourse,按“F5“可以直接生成DeleteCourse的协作图,如下:
1.3.5DeleteCourse序列图和协作图
QueryCourse序列图,如下:
选择QueryCourse,按“F5“可以直接生成QueryCourse的协作图,如下:
1.3.6RegistrarLogin序列图和协作图
管理员要对课程信息进行更改时,要输入用户名和密码,以确保其拥有相应的权限。
事件流如下:
1.系统提示管理员输入用户名和密码。
2.管理员输入用户名和密码。
3.系统检查用户名和密码的合法性。
4.将检查结果返回给用户。
查找RegistrarLogin用例的对象,从事件流中发现涉及以下对象:
①界面②控制对象③数据库④事件流中设计的角色有:
管理员、数据库。
分析对象、角色之间交互的消息,主要有以下交互:
1.界面对象提示用户输入注册信息。
2.用户输入注册信息。
3.界面将注册信息提交给控制对象。
4.控制对象到数据库中查询注册信息。
5.控制对象判断注册信息是否合法。
6.控制对象将检查结果返回到界面对象。
7.界面对象显示结果。
根据以上分析,最终的RegistrarLogin序列图,如下:
选择RegistrarLogin,按“F5”可以直接生成RegistrarLogin的协作图,如下:
1.4类图
1.4.1类的创建
通过对本系统的分析可以抽象出7个类:
People(Student和Registrar的基类)、Student(学生类)、Registrar(管理员类)、FormObject(界面类)、Course(课程类)、ControlObject(控制对象类)、DataBase(数据库类)。
People 主要有以下属性和操作:
⑴姓名(name)
⑵年龄(age)
⑶查询姓名(getname)
⑷设置姓名(setname)
⑸查询年龄(getage)
⑹设置年龄(setage)
Registrar(管理员类)主要有以下属性和操作:
⑴管理员编号(regID)
⑵初始化(构造函数)(registrar)
⑶查询管理员信息(getregistrar)
⑷设置管理员编号(setregID)
⑸查询管理员编号(getregID)
Student(学生类)主要有以下属性和操作:
⑴学号(studentID)
⑵初始化(构造函数)(student)
⑶查询对象学号(getstudentID)
⑷设置对象学号(setstudentID)
DataBase (数据库类)主要有以下属性和操作:
⑴连接的数据库名称(位置)(dbpath)
⑵查询课程(Querycourse)
⑶添加课程(Addcourse)
⑷删除课程(Deletecourse)
⑸查询所有的课程(Querycourse)
⑹查询关联(Queryassociation)
⑺添加关联(Addassociation)
⑻查询选择的课程信息(Queryselectcourse)
⑼查询密码(QuerypassWD)
⑽取得数据库名称(getDBpath)
⑾设置数据库名称(setDBpath)
⑿打开数据库(OpenDB)
ControlObject(控制对象类)主要有以下属性和操作:
⑴验证课程的合法性(verifycourse)
⑵判断能不能添加指定的课程(canadd)
⑶判断能不能修改指定的课程(canmodify)
⑷通过ID查询课程(QuerycoursebyID)
⑸确认删除(confirmDelete)
⑹查询所有的课程(getallcourse)
⑺查询关联(queryassociation)
⑻判断是不是能选择(canselect)
⑼查询课程列表(QuerycourseList)
⑽验证管理员的合法性(Verifyregistrar)
⑾检查密码(checkpassWD)
⑿构造函数(conttrolObject)
Course(课程类)主要有以下属性和操作:
⑴课程名称(name)
⑵开课教室(classroom)
⑶课程号(courseID)
⑷授课教师(teacher)
⑸选课的学生(students)
⑹开课起始时间(firstlessondate)
⑺允许选课的学生人数(maxstudents)
⑻设置课程名称(setname)
⑼设置开课教室(setclassroom)
⑽设置课程号(setcourseID)
⑾设置授课教师信息(setteacher)
⑿设置开课起始时间(setfirstlessondate)
⒀设置允许选课的学生人数(setmaxstudents)
⒁查询课程名称(getname)
⒂查询开课教室(getclassroom)
⒃查询课程号(getcourseID)
⒄查询授课教师信息(getteacher)
⒅查询开课起始时间(getfirstlessondate)
⒆查询允许选课的学生人数(getmaxstudents)
FormObject(界面类)主要有以下属性和操作:
⑴查询课程信息(getcourseInfo)
⑵显示选课成功信息(showsuccessInfo)
⑶查询课程编号(getcourseID)
⑷显示确认页(showconfirmpage)
⑸确认删除(confirmdelete)
⑹选择命令(selectcommand)
⑺显示课程列表(displaycourseList)
⑻查询选择的课程(Queryselectcourse)
⑼构造函数(FormObject)
1.4.2类图的建立
最后详细的类图,如下:
1.5状态图
1.5.1实例分析
分析一个课程类(对象)(Course)的状态变化过程》课程对象被创建,添加到数据库中。
管理员可以删除、修改课程信息,在某个学期开设该课程,如果选修人数超过指定人数,就不再允许学会选这门课。
学期结束,课程的状态结束。
1.5.2状态图的建立
在浏览器中选择“LogicalView”,按下鼠标右键,在弹出的菜单里选择“New”,再选择“StateDiagram”,创建一个新的状态图。
同时将名字改成“Course”,如图:
1.6组件图
1.6.1分析
在选课系统中,包括MainProgram类(主程序)、People类、ControlObject类、Student类、Registrar类、Course类和DataBase类。
其中,People类是Student类和Registrar类的基类,所以Student类和Registrar类依赖People类。
FormObject类和ControlObject类都和Course类相关, FormObject类和
ControlObject类依赖Course类。
ControlObject类和DataBase类相关,ControlObject类依赖DataBase类。
1.6.2组件图的建立
在浏览器中选择“ComponentView”,按下鼠标右键,在弹出的菜单里选择“New”,再选择“Component”,创建一个新的组件。
如图:
(其中各个组件的创建,不再做详细的叙述)
1.7部署图
1.7.1分析
分析该系统大致在服务器端使用了二台主机,一台做为数据库服务器,使用了Oracle服务器。
另一台是同一局域网上的机器,作为HTTP服务器,上面运行了HTTP服务器进程以及业务逻辑,同时还连接了打印机。
1.7.2部署图的建立
在浏览器中选择“DeploymentView”,建立部署图,如下:
1.8代码生成
rose帮助位于HELP>>CONTENTS>>ROSEJAVA>>HOWTO>>FORWARDENGINEERFROM ROSE TOJAVASOURCE
1、打开你要专化的目标diagram
2、选择你要转化的包或者类
3、单击 tools>java/j2ee> SyntaxCheck来检查目标代码是否符合规范,比如命名错误。
4、察看roselog窗口(下方)察看检验结果,如果有错误,即errors那么生成的代码很可能无法通过编译
5、根据需要校正这些组件或者图(Correctthecomponentsasneeded.)
6、复步骤3直到检验不出错误,然后你就可以进入下一步了(GeneratingJavaSourcefromaComponentDiagram)假设以上步骤已经搞定了error
7、选择你要转化的包或者类
8、单击Tools>Java/J2EE>GenerateCode一般来说如果你还没有将一个package或者组件映射到一个rose的classpath目录中(就是指定生成的东西放哪里),那么系统不会允许你在接下来的界面里点ok,那么现在就编辑目标路径
9、点classpathentries下的edit按钮,再出现的界面右上角找new(insert)(删除左边那个),然后在列表里新增的行里选择目标路径,你可以选择目标是生成一个zip,jar,还是一个目录,我们选择目录。
指定目录,ok,那么你选择的路径就新建成功了,选择这个路径,点ok回到界面
10、现在你看到classpathentries里有东西了,选择右侧列表里你要转换的包或者组件,点assign,即分配给目标classpth,理论上你可以把选择好的包组件或者类图分别分配个多个classptah对象。
点ok开始生成
11、成功后就可以到指定的classpath下看代码了,生成的代码之间拥有如类图所示的关系。
1.9反向功能
反向工程就是通过java代码生成或者更新