《软件工程导论》实验指导书Word格式文档下载.docx
《《软件工程导论》实验指导书Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《《软件工程导论》实验指导书Word格式文档下载.docx(15页珍藏版)》请在冰豆网上搜索。
查询已选课程、选课以及付费,并将这些操作结果存入数据库中。
(2)对本系统的用例、活动者进行分析:
本系统拟使用Java语言通过三层模型实现:
数据核心层、业务逻辑层和接入层。
数据核心层包括对于数据库的操作;
业务逻辑层作为中间层对用户输入进行逻辑处理,再映射到相应的数据层操作;
接入层包括用户界面、系统登录界面、管理界面、用户选课界面等。
本系统涉及的用户包括管理员和学生,他们是用例图中的活动者,他们的主要特征相似,都具有学号和姓名等信息,可抽象出“基”活动者people,而registrar和student则从people继承诞生,数据库管理系统是另外一个活动者。
(3)写出系统中出现的一些事件流,如添加课程事件流、删除课程事件流、修改课程事件流、选课事件流。
下面是系统中出现的一些事件流。
添加课程事件流:
a)管理员选择进入管理界面,用例开始。
b)系统提示输入管理员密码。
c)管理员输入密码。
d)系统验证密码。
A1:
密码正确
e)进入管理界面,系统显示目前所建立的全部课程信息。
f)管理员选择添加课程。
g)系统提示输入新课程信息。
h)管理员输入信息。
i)系统验证是否和已有课程冲突。
A2:
没有冲突
j)系统添加新课程,提示课程添加成功。
k)系统重新进入管理主界面,显示所有课程。
l)用例结束。
其他事件流:
密码错误
a)系统提示再次输入密码
b)用户确认。
c)三次错误,拒绝再次访问。
d)否则进入添加课程事件流第e)步。
A2:
有冲突
a)系统提示有冲突,显示冲突课程信息
b)用户重新输入
c)继续验证知道无冲突
d)进入添加课程事件流第j)步
删除课程事件流和修改课程事件流与此类似。
选课事件流:
a)学生进入选课登陆界面,用例开始。
b)系统提示输入学号和密码。
c)学生输入学号和密码。
d)系统验证课程是否可选。
A1:
验证通过
e)进入选课主界面。
f)学生点击选择课程。
g)系统显示所有课程信息。
h)学生选择课程。
i)系统验证课程是否可选。
课程可选
j)系统提示课程选择成功,提示学生交费。
k)用例结束。
错误流:
验证失败
a)系统提示验证失败,提示重新输入
b)三次错误,拒绝再次访问。
c)成功,转选课事件流第e)步
课程不可选
a)系统提示课程不可选以及原因。
b)学生重新选课。
c)重新验证直至成功。
d)转选课事件流第j)步。
因为付费方式多样,所以此处不必讨论费用例。
查询事件流比较简单,这里也不用详细描述。
(4)根据以上的分析,可以绘出如下图所示的系统用例图。
(5)在Rose2003中绘制系统用例图,具体步骤如下:
a)点击浏览器中的UseCaseView中的Main,弹出用例图窗口。
b)将光标置于工具栏的Actor图标上,按下左键并将光标拖拽到用例图窗口上,放开左右键,用例窗口内出现一个活动者的图标,将其命名为“People”
c)采用同样的方法,在用例图中添加Registrar和Student图标。
d)点击用例窗口工具栏中的图标“generalization”,在用例图窗口中,将光标从Student移动到People之间添加泛化(generalization)关系。
e)同样在Registrar和People之间添加泛化关系。
f)点击工具栏中UseCase但图标,将光标移到用例图窗口,窗口内显示用例的椭圆图标,将其命名为“SelectCourse”。
g)点击工具栏中的UndirectionalRelation图标,将光标从Student指向SelectCourse,在Student和SelectCourse之间添加关联关系。
h)重复以上步骤,完成(4)中所示的用例图。
i)然后再指定活动者和用例的属性。
在浏览器中选择活动者People,按下鼠标右键,在弹出的菜单中选择“OpenSpecification”,可以看到People的版型(Stereotype)是Actor。
j)双击SelectCourse用例,弹出UseCaseSpecification对话框。
k)在Documentation文本框中书写该用例的事件流。
l)在完成以上步骤,可以看到Rose在浏览器中自动标出了各种关系。
实验二面向对象分析-类图和对象图的绘制(2学时)
通过实验,熟悉并掌握面向对象软件开发中类图和对象图的绘制。
设计绘制选课系统中的类图和对象图。
3、实验要求
(1)分析实验一中,有以下名词:
课程、界面和控制对象。
从而抽象出三个类:
课程类、界面类和控制对象类。
(2)课程类应具有的属性有:
课程名称、开课教室、授课教师、选课的学生、开课起始时间、允许选课的学生人数。
方法有:
设置课程名称、设置开课教师、设置课程号、设置授课教师信息、设置开课起始时间、设置允许选课的学生人数、查询课程名称、查询开课教师、查询授课教师信息、查询开课起始时间、查询允许选课的学生人数。
(3)在Rose中创建Course类的类图,具体步骤如下:
a)选择浏览器中的“LogicalView”,按下鼠标右键,在弹出的菜单中选择“New”,再在下一级菜单中选择“Class”,创建一个新的Course类。
b)添加属性。
在浏览器中选择“Course”,按下鼠标右键,在弹出的菜单中选择“New”,再选择“Attribute”,则一个新的属性被添加,将属性名字改成“name”。
c)选择“name”,按下鼠标右键,选择“OpenSpecification…”,则弹出“ClassAttributeSpecification…”对话框。
在这个对话框中有两个选项卡,一个用来设置属性的固有特性,比如类型(Type)、版型(Stereotype)、初始值(Initial)、存取控制(ExportControl)等,一个用来进一步指定属性是静态(Static)的还是继承(Derived)的等。
d)如果要删除属性,右键选择属性,在弹出的菜单中选择“Delete”即可。
e)添加操作。
选择浏览器中的“Course”,按下鼠标右键,在弹出的菜单中选择“New”,再在下一级菜单中选择“Operation”,则添加一个新的操作。
将添加操作的名字命名为“GetName”。
f)选择GetName,按下鼠标右键,选择“OpenSpecification…”,在弹出的对话框中可以设置操作的固有特性。
g)在Specification对话框中,操作或者属性都有存取控制的选项默认值是公有的,属性的存取控制的选项默认值是私有的。
不同的存取控制采取控制不同的标记表示。
h)重复以上步骤,完成Course类的设计。
(4)类似的,自己分析建立界面类(FromObject)和控制对象类(ControlObject),如后图所示。
(5)在选课系统中,涉及到的用户包括Student(学生)和Registrar(管理员),其主要特征相似,所以可以建立统一基类People,而Student和Registrar由People派生。
如下图所示:
(6)在Rose中实现(5)所述继承关系。
具体步骤如下:
a)右键单击浏览器中LogicalView,选择NEW,新建一个classdiagram,取名为Main,双击LogicalView下的Main图标,弹出类图窗口,从UseCaseView下将People、Register和Student拖到窗口中。
b)选择类图工具栏的“Generalization”图标,在类图窗口中,按下鼠标左键,将光标从角色Student移动到People,在二者之间出现一个表示继承关系的箭头标志。
c)同理添加Register与People之间的继承关系。
d)这时Register和Student都没有设置属性,给People增加一私有属性name。
在类图窗口中双击Student的图标,弹出“ClassSpecification”对话框,点击Attributes选项卡,注意这时Showinherite被选择,而Attributes列表中没有任何属性。
可以看到,父类中的私有属性没有被继承。
e)将People的name属性设置成保护属性,操作同d),可以看到Showinherite被选择时,Attributes列表中有一个属性name,父类中的保护属性被子类继承。
f)将People的name属性设置成公有属性,操作同d),可以看到Showinherite被选择时,Attributes列表中有一个属性name,父类中的公有属性被子类继承。
(7)在选课系统中,涉及到的角色包括学生Student、管理员Registrar、学生和管理员的父类People、数据库Database。
角色和类之间的关系如下所述:
角色Student、Registrar从People派生。
学生、管理员与系统交互时,都有一个界面与之对应。
一个界面可能和课程相关(0-多门)。
控制对象负责课程的处理,处理结果在界面上显示。
控制对象完成对数据库的操作。
界面请求控制对象的服务。
进一步分析如下:
一个用户界面对象和0个或多个学生相关。
一个用户界面对象和0个或多个管理员相关。
一个用户界面对象和0个或多个课程信息相关。
一个控制对象和0个或多个课程信息相关。
一个用户界面对象和一个控制对象相关。
一个控制对象和一个用户界面对象相关。
(8)利用Rose绘制完整的类图。
a)在“课程设计”模型的LogicalView中,选择“Main”类图,将定义的类或角色从浏览器中拖至“Main”类窗口。
b)在类图的工具栏中选择“unidirectionalassociation”图标,在类图窗口中,按下鼠标左键,从Student指向FromObject类,则在Student和FromObject之间添加了关联,然后调整一下类的位置。
为了显示方便,将类的属性和操作的“ShowAllAttributes”和“ShowAllOperations”设置为不选,将类的属性和操作隐藏起来。
c)可以给新添加的关联命名。
在类图窗口中,选择Student和FromObject之间的关联,按下鼠标右键,在弹出的菜单中选择“OpenSpecification”,则弹出一个对话框。
d)在该对话框中可以设置关联的属性。
关联两端的对象,箭头指向的称为“RoleA”,另一端称为“RoleB”。
e)在“AssociationSpecificationFor…”对话框中点击“RoleBDetail”选项卡,将Multiplic设置成1,再点击“RoleADetail”选项卡,将Multiplic设置成0..n。
f)使用类似的方法,完成选课系统的完整类图,如下图所示。
实验三面向对象分析-顺序图的绘制(2学时)
通过实验,熟悉并掌握面向对象软件开发中顺序图的绘制。
以选课系统中的选课用例(SelectCourse)为例,设计和实现顺序图。
(1)假设学生已经成功登录系统,分析选课的事件流。
a)学生进入选课主界面。
b)学生点击选课。
c)系统显示所有课程信息。
d)学生选择课程。
e)系统验证课程是否可选。
f)系统提示课程选择成功,提示学生交费。
g)用例结束。
a)系统提示课程不可选及原因。
d)转选课事件流第f)步。
序列图描述的是对象与对象的交互,创建序列图的步骤如下:
a)寻找对象。
b)寻找角色。
c)将消息加进图中。
首先,查找SelectCourse用例的对象。
从实践流中发现涉及以下对象:
a)界面。
b)课程。
c)对于业务层的操作,也应该有对象进行处理。
d)实践流中设计的角色有:
学生、数据库。
(2)然后,分析对象、交色之间交互的消息。
本用例主要有以下交互:
a)学生通过界面发送选课命令。
b)界面向控制对象请求课程信息。
c)控制对象向数据库发送查询数据消息。
d)控制对象暂存数据库的查询结果。
e)界面对象从控制对象中取得所有的课程信息。
f)在界面上显示所有的课程信息。
g)界面对象发送命令要求控制对象删除课程信息。
i)界面对象要求学生输入学号。
j)界面对象向控制对象发送信息,查询该生是否可以选择选定的课程。
k)控制对象从数据库查询关联信息。
l)控制对象判断是否可以选课。
m)如果可以选课,则向数据库中添加关联信息。
n)向界面对象返回信息。
(3)根据以上分析,整理得出最终SelectCourse的顺序图。
(4)在Rose2003中绘制系统顺序图。
a)在浏览器中右键点击“UseCaseView”,在弹出的菜单中选择“New”,再在下一级菜单中选择“SequenceDiagram”,则UseCaseView中显示一个新创建的顺序图图标,将其命名为SelectCourse。
b)在浏览器中选择角色,将其从浏览器中拖到顺序图中,图窗口中显示角色:
Student,Student对象下有虚线条。
c)选择CreateaObject工具栏按钮,光标变成十字形状,将光标移到图窗口中,按下鼠标左键,则顺序图窗口中添加了一个无名对象,窗口的顶部也出现了一个无名泳道。
d)选择新创建的对象,按下鼠标右健,在弹出的菜单种选择“OpenSpecification”,弹出“ObjectSpecification”对话框,选择对象的类,这是个界面对象,这里选择FromObject。
并将其命名为Form。
e)选择对象类且输入对象名称后,按下“OK”按钮。
此时,顺序图窗口中显示已经命名的标有类(型)的对象。
f)用同样的方法在顺序图中添加对象courses和control,添加活动者Database。
g)下面在顺序图中增加消息。
选择工具栏中的“objectmessage”图标,在顺序图中将光标从stu指向From,释放鼠标右键,则stu和From之间添加了一个消息,标有序号1,在其后添加消息名称:
SelectCommand()。
h)重复以上过程,完成整个顺序图。
实验四面向对象软件开发—状态图、活动图的绘制(2学时)
通过实验,熟悉并掌握面向对象软件开发中状态图、活动图的绘制。
设计和制作选课系统中课程类(对象)(Course)的状态图、AddCourse(添加课程)活动图。
(1)考察课程类(对象)(Course)的状态变化过程。
课程对象被创建,添加到数据库中,管理员可以删除、修改课程信息,在某个学期,开设该课程,如果选修人数超过指定人数,就不再允许学生选这门课。
学期结束,课程的状态终止。
课程对象的状态图如下图所示:
(2)在Rose2003中创建此课程对象的状态图。
a)在浏览器中选择“LogicalView”,按下鼠标右键,在弹出的菜单中选择“New”,再选择“StateChartDiagram”,创建一个新的状态图,命名为“Course”。
b)在工具栏中选择起始状态图标(StartState),放到状态图窗口中,在选择一个状态框图标(State),放到状态图中,将其命名为“Created”。
c)使用同样的方法,添加“InDatabase”状态和“InSchedule”状态。
d)选择“Created”状态,双击,探出对话框,在其Documentation文本框中键入“创建课程对象”。
e)在工具栏中选择“StateTransition”图标,在状态图中从起始状态指向“Created”状态,在二者之间建立一个转移。
f)双击转移,弹出“StateTransitionSpecification”对话框中,点击Detail选项卡,可以在其中输入转移的其他信息。
g)按下“OK”,返回到状态图窗口。
h)用鼠标双击“Created”状态,弹出“StateSpecification”对话框中,点击Actions选项卡,设置这个状态下的Activity。
将光标置于列表框中,按下鼠标右键,在弹出的菜单中选择Insert。
列表中添加了一个Activity。
i)双击刚才添加的Activity,弹出ActionSpecification对话框,在Name文本框中输入GetCourseInfo。
j)按下“OK”按钮。
k)采用同样的方法,在“InDatabase”和“InSchedule”之间添加转移,双击该转移,在弹出的对话框中点击Detail选项卡,设置守护条件。
图过选修某门课的学生树梢与最大可选学生数,则这门课程的状态可以从“InDatabase”转移到“InSchedule”。
l)按下“OK”按钮,返回到状态图窗口。
m)重复以上过程,既可以作成Course状态图。
(3)分析AddCourse用例的事件流,画出AddCourse用例的活动图。
在用例图中分析过,AddCourse用例的事件流为:
A1:
f)管理与那选择添加课程。
j)系统添加新课程,提示添加成功。
因为管理员密码验证过程可以抽取出来,作为通用的流程,所以这里对AddCourse事件流稍作修改,将管理员输入课程信息作为起始的活动,内容如下:
a)管理员输入信息。
b)系统能够验证是否和已有课程冲突。
c)系统添加新课程提示课程添加成功。
d)系统重新进入管理主界面,显示所有课程。
e)用例结束。
根据以上描述并进一步细化,画出下图所示的AddCourse用例的活动图。
(4)在Rose2003中创建此课程对象的活动图。
a)在浏览器中,使用鼠标右键点击UseCaseView,在弹出的菜单中选择“New”“ActivityDiagram”,则在UseCaseView中添加一项“Sate/ActivityModel”,该项产生一个名为“NewDiagram”的活动图,将其命名为“AddCourse”。
b)在浏览器中选择活动图“AddCourse”,双击,弹出活动图窗口。
c)点击工具栏的“Swimlane”工具,在右边活动图窗口点击鼠标左键,即可增加一个新的泳道“NewSwimlane”,同时左边的活动图“AddCourse”之下,也出现一个泳道“NewCourse”标志。
d)双击浏览器窗口中的“NewSwimlane”处,弹出“SwimlaneSpecification”对话框,将泳道名修改为“用户接口”。
e)使用同样的方法增加“业务逻辑接口”和“数据库接口”泳道。
f)在工具栏中选择“StartState”图标,放置到“用户接口”泳道内。
g)选择工具栏中的“Activity”图标,在用户接口泳道内增加一个新的活动。
h)在浏览器中双击“NewActivity”,弹出“ActivitySpecification”对话框,将活动的名称修改为“输入课程各项信息”。
i)在工具栏中选择“Transition”图标,在活动窗口中,将光标从起始状态指向“输入课程各项信息”,则从起始状态到“输入课程各项信息”之间添加了一条带箭头的实线,这就是转移。
j)输入课程以后,还要判断输入的课程是否合法,即需要进行课程验证。
这个工作要提交到“业务逻辑接口”中进行,采用前述的方法,在业务逻辑接口泳道中添加“验证课程”活动,并在“输入课程各项信息”和“验证课程”之间添加转移。
k)为了进行课程信息的验证,需要在业务逻辑接口中依据已有的课程信息,创建课程对象,提交到数据库中,进行信息的验证。
l)依据课程对象的信息,在数据库中查找课程信息。
为了完成这个功能,在“数据库接口中”泳道中添加“在数据库中查询课程”活动,并在“创建课程对象”和“在数据库中查询课程”之间添加转移关系。
m)查询结果将被返回到业务逻辑接口,由业务逻辑接口判断查询结果的信息,以确认添加的课程是否合法。
n)被添加的课程有可能是合法的,也有可能是不合法的,所以要增加一个决策(decision)进行判断。
将光标移到活动图窗口的工具栏上,选择“Decision”图标,然后将光标移动到活动图窗口的“业务逻辑接口”泳道,按下鼠标键添加一个决策,在“判断添加课程是否合法”和决策之间添加转移。
o)如果输入的信息合法,则将在数据库中添加输入的课程信息。
如果不合法,则提示重新输入课程信息。
在“数据库接口”泳中添加“在数据库中添加该课程”活动。
在决策标记和“在数据库中添加该课程”活动之间添加转移。
p)这个转移发生的条件事课程是合法,所以,要在转移上添加守护条件“合法”。
添加守护条件的方法是:
双击刚才添加的转移,在弹出对话框中选择“Detail”选项卡,在“GuardCondition”栏中输入转移条件“合法”。
q)如果课程输入不合法,则提示重新输入,重新输入“输入课程各项信息”活动。
在决策和“输入课程各项信息”之间添加转移,守护条件是“不合法”。
r)如果课程信息合法,则在数据库中添加课程,然后判断添加课程是否成功。
增加一个决策,如果添加课程成功,则显示添加成功信息,过程结束。
s)如果添加课程失败,则显示失败,则显示添加信息错误,过程结