01、实战案例——在线选修课程管理系统设计
本文以“在线选修课程管理系统”案例为示例,利用Rational Rose进行面向对象设计实战。该系统的需求描述如下。
- 教师选择本学期要教授的课程。
- 教师选课结束后,教务管理人员进行协调和确认教师的课程,并创建本学期的课程目录表,向学生公布。
- 学生填写课程选修表。
- 学生按最终的课程表到财务处办理收费手续(Billing System)。
- 教师可查询所教课程的学生花名册(Roster)。
- 教务管理人员维护学生、教师和课程的信息。
构建用例模型
① “在线选修课程管理系统”中的执行者(Actors)。
- 注册选修课程的学生。
- 教授选修课程的教师。
- 教务管理人员必须汇总选修课程情况,制作课程表。
- 教务管理人员必须维护关于课程、教师和学生的所有信息。
- 财务管理系统从本系统中取出收费信息。
② “在线选修课程管理系统”中的用例(Use Case)。
步骤1: 使用Rational Rose创建执行者(Actors)。
首先右击浏览器窗口中的Use Case View包,弹出快捷菜单后,选择New→Actor项,并输入执行者的名字(如果输入错误,可用Rename命令更改);如果文档窗口不可见,选择菜单和工具栏中的View→Documentation菜单,然后在浏览器窗口中选中所需执行者,输入相应文档。创建结果如图1所示。
■ 图1 执行者创建结果
步骤2: 使用Rational Rose创建用例(Use Case)。
首先右击浏览器窗口中的Use Case View包,弹出快捷菜单后,选择New→Use Case项并输入用例的名字;然后在浏览器窗口中选中所需用例;将光标置于文档框中,输入相应文档。创建结果如图2所示。
■ 图2用例创建结果
步骤3:使用Rational Rose创建主用例图(Main Use Case Diagram)。
首先双击浏览器窗口的Use Case View包中的Main条目,打开主用例图;然后单击选中浏览器窗口中的“执行者”,将其拖到主用例图中;随后单击选中浏览器窗口中的“用例”,并将其拖到主用例图中;最后,在工具栏中选择“单向关联”(Unidirectional Association)图标,单击一个“执行者”,并拖到相应的用例上;或单击一个“用例”,并拖到相应的执行者上。创建结果如图3和图4所示。
■ 图3主用例图创建结果(1)
■ 图4 主用例图创建结果(2)
构建活动图模型
本部分主要介绍建立选修课程目录表的步骤。
步骤1: 使用Rational Rose创建活动图(Activity Diagram)。
首先右击浏览器窗口中的Use Case View包,弹出快捷菜单后选择New→Activity Diagram项,然后输入活动图的名字;双击浏览器窗口中的Activity Diagram选项,打开该图。创建结果如图5所示。
步骤2: 使用Rational Rose创建活动(Activity)。
首先在工具栏中选择Activity 图标,在活动图(Activity Diagram)中单击要放置“活动”(Activity)的位置,输入活动名字;然后在工具栏中选择State Transition图标,单击一个“活动”,并将其拖到相应的活动上。创建结果如图5所示。
步骤3: 使用Rational Rose创建决策点(Decision Points)。
首先,在工具栏中选择Decision图标,在活动图(Activity Diagram)中单击要放置决策点的位置,并输入决策的名字;其次,在工具栏中选择State Transition图标,单击一个“活动”,并将其拖到相应的决策点上;然后,在工具栏中选择State Transition图标,单击一个“决策点”选项,拖至拐角处单击左键,再将其拖到相应的活动上;随后,双击此条“转换线”,打开规格设定框,单击Detail 标签,在Guard Condition框中输入条件No,单击OK按钮,关闭规格设定框;最后,在此条转换线上单击左键,选中此条“转换线”,单击菜单和工具栏中的Format→Line Style→Rectilinear 选项,使其变得美观,调整过程如图4-21所示,调整完成后,创建结果如图6所示。
■ 图6 创建决策点调整过程
■ 图7 决策点创建结果
步骤4:使用Rational Rose创建同步条(Synchronization Bar)。
首先在工具栏中选择Horizontal Synchronization图标;然后在活动图(Activity Diagram) 中单击要放置同步条的位置;最后在工具栏中选择State Transition图标;创建结果如图8所示。
■ 图8 同步条创建结果
步骤5:使用Rational Rose创建泳道(Swim lanes)。
首先在工具栏中选择Swim lanes图标,在活动图(Activity Diagram)中单击要放置泳道的位置;然后双击泳道,打开规格说明框,在Name框中输入泳道的名字,单击OK按钮,关闭规格设定框;最后对泳道的大小位置进行调整,将所需的活动和变换线拖至新泳道中。创建结果如图9所示。
■ 图9 泳道创建结果
步骤6: 使用Rational Rose创建起始活动和终止活动。
首先在工具栏中选择“起始活动”或“终止活动”图标,在活动图(Activity Diagram)中单击要放置“起始活动”或“终止活动”的位置;然后在工具栏中选择State Transition图标,单击“起始活动”图标,拖到相应的活动上;最后单击一个“活动”图标,拖至“终止活动”图标上。创建结果如图10所示。
■ 图10 创建起始活动和终止活动
构建相关的包和类以及简单类图
步骤1: 在Rational Rose的浏览器窗口中创建类(Class)。
首先右击浏览器窗口中的Logical View,弹出快捷菜单后,选择New→Class项,输入类的名字;然后在所建类上单击右键,弹出快捷菜单,选择Open Specification项,单击General标签;最后在Stereotype框中选择entity类;单击OK按钮关闭规格说明框。规格说明框的设置过程如图11所示。
■ 图11规格说明框设置过程
表1列出了边界类、控制类、实体类各自的功能。
■ 表1 边界类、控制类、实体类功能
步骤2: 在Rational Rose的浏览器窗口中创建包(Packages)。
首先右击浏览器窗口中的Logical View选项,弹出快捷菜单后,选择New→Package选项,输入包的名字;然后新建相关类并设置其相应的类别,其中设置边界类和控制类的过程如图12和图13所示;最后单击浏览器窗口中的“类”选项,将其拖至相应的包中。
■ 图12 设置边界类过程示意图
■ 图13 设置控制类过程示意图
在Package项中,PeopleInfo包用来存放与人员有关的内容,Interfaces包用来存放与界面有关的内容,UniversityArtifacts包用来存放与学校工件有关的内容。
步骤3: 在Rational Rose中创建主类图(Main Class Diagram)。
首先双击浏览器窗口中Logical View中的Main类图,打开它;然后单击浏览器窗口中的包,将其拖到Main类图上;重复以上步骤后,创建结果如图14所示。
■ 图14 主类图创建结果
步骤4: 在Rational Rose中创建包中的主类图(Package Main Class Diagram)。
首先双击Main 类图中的University Artifacts包,打开这个包,并创建这个包的主类图(Package Main Class Diagram);然后,单击浏览器窗口中的“类”图标,将其拖到类图上;重复以上步骤,最后创建结果如图15所示。
■ 图15 包中的主类图创建结果
(4) 构建用例实现图(Use Case Realization Diagram)。
使用Rational Rose创建逻辑视图中的用例图(Use Case Diagram)。
首先,右击浏览器窗口中的Logical View选项,弹出快捷菜单后,选择New→Use Case Diagram选项,输入用例图的名字“Realizations”;其次,右击浏览器窗口中的Logical View选项,弹出快捷菜单后,选择New→ Use Case选项,输入用例的名字;然后双击新建的“用例”选项,打开用例的规格设定框,单击Stereotype框,选择use-case realization选项,规格设定过程如图16所示。重复以上过程,用例的创建结果如图17所示。最后,打开实现用例图,将新建的“实现用例”拖入图中,创建结果如图18所示。
■ 图16 用例规格设定过程
■ 图17 用例创建结果
■ 图18 用例实现图创建结果
构建顺序图(Sequence Diagram)与协作图(Collaboration Diagram)
步骤1: 使用Rational Rose创建顺序图(Sequence Diagram)。
首先,右击Logical View中的Maintain course information实现用例,弹出快捷菜单后,选择New→Sequence Diagram选项,然后输入顺序图的名字“Create a course”;创建结果如图19所示。
■ 图19 顺序图创建结果图
步骤2:在顺序图中创建对象和分配类。
首先,双击顺序图名称,打开顺序图,将浏览器窗口中Use Case View包中的执行者Registrar拖入图中;其次,选择工具栏中的Object图标,单击图中放置对象的位置,并输入相应的名字,重复以上步骤;然后,选择工具栏中的Object Message图标,从信息发出者拖至信息接收者,并输入信息的名字,重复以上步骤,创建对象完成后结果如图20示;最后,单击选中浏览器窗口中所需的类,将此类拖至顺序图相应的对象上,对象分配类后,结果如图21所示。
■ 图20 创建对象结果
■ 图21 对象分配类结果
步骤3:将顺序图转换为协作图。
首先,双击顺序图名称,打开顺序图;然后选择屏幕上方的菜单Browser→Create Collaboration Diagram选项,或者按F5键;最后调整图中的对象和信息,使其美观。创建结果如图22所示。
■ 图22 顺序图转换为协作图创建结果
构建状态图(Statechart Diagram)
步骤1:使用Rational Rose创建状态图(Statechart Diagrams)。
首先,右击浏览器窗口中的CourseOffering类,弹出快捷菜单后,选择New→Statechart Diagrams选项;然后,输入状态图的名字“CourseOffering States”,创建结果如图23所示。
■ 图23 状态图创建结果
步骤2: 使用Rational Rose创建状态(States)。
首先,在工具栏中选择State图标,在状态图中单击要放置状态的位置;然后,输入状态的名字。创建结果如图24所示。
■ 图24 状态创建结果
步骤3: 使用Rational Rose创建状态转换(State Transitions)。
首先,在工具栏中选择State Transitions图标,单击“起始状态”,并拖至下一个状态;然后,输入状态转换的名字。创建结果如图25所示。
■ 图25 状态转换创建结果
步骤4:使用Rational Rose创建起始、结束状态。
首先,在工具栏中选择Start图标,在状态图中单击要放置起始状态的位置;然后,用状态转换线进行连接。起始状态创建结果如图26所示。
图26 起始状态创建结果
同样地,在工具栏中选择Stop图标,在状态图中单击要放置结束状态的位置,用状态转换线进行连接,结束状态的创建结果如图27所示。
图27 结束状态创建结果
步骤5: 使用Rational Rose增加状态转换的细节部分。
首先,双击某条转换线,打开规格设定框,单击Detail标签;然后,在相应的框中输入action(/后的内容)、guard condition([ ]里的内容)以及发出的event(^后的内容);最后,单击OK 按钮,关闭规格设定框。创建结果如图28所示。
■ 图28 状态转换规格设定结果
步骤6: 使用Rational Rose增加状态的Actions部分。
首先,双击某个状态,打开规格设定框,单击Actions标签;然后,右击Actions框中的任一位置,弹出快捷菜单后,选择Insert选项,将创建一个类型为Entry的action,规格设定过程如图29所示;
■ 图29 状态的Actions设定过程
双击这个action,弹出action的规格设定框后,在when框中设定相应的类型,在type框中设定action或者send event(用^表示),输入action的名字或event的信息;单击OK按钮,关闭Actions规格设定框。创建结果如图30所示。
■ 图30 状态的Actions设定结果
构建构件图(Component Diagram)
步骤1: 使用Rational Rose创建Main构件图(Component Diagram)。
首先,在浏览器窗口中的Component View中创建图中的各个构件包,双击浏览器窗口中的Component View中的Main 构件图;然后,将浏览器窗口中的Component View中的构件包拖入图中;最后创建包之间的依赖线。创建结果如图31所示。
■ 图31 Main构件图创建结果
步骤2: 创建University构件包中的构件。
首先,双击Main构件图中的University包,打开图形;然后,在工具栏中选择Component图标;最后,单击图中某一位置,放置构件,输入构件名称。创建结果如图32所示。
■ 图32 University构件包中的构件创建结果
步骤3: 将类映射到构件上。
首先,右击浏览器窗口中的CourseOffering构件,弹出快捷菜单后,选择Open Specification项,单击Realizes标签;然后,右击所需的类,弹出快捷菜单,选择Assign项;最后,单击OK按钮,关闭规格设定框。创建过程如图33所示。
■ 图33 将类映射到构件上
构建部署图(Deployment Diagram)
使用Rational Rose创建部署图(Deployment Diagram)。
首先,双击浏览窗口中的“部署图”(Deployment Diagram)选项,选择工具栏中的Processor图标,并单击图中某一位置,输入结点的名字;然后,选择工具栏中的Connection图标,单击某一结点,拖至另一结点;最后,选择工具栏中的Text 图标,在相应结点下写上文字。创建结果如图34所示。
■ 图34 部署图创建结果