教学案例-1-面向对象分析与设计教学案例研究该案例示范了使用RationalRose如何对系统进行建模。使用用例和领域分析的方法来对系统进行分析并且设计一个分析模型。然后把分析模型扩展成设计模型,此设计模型描述了一种技术方案。最终,设计模型转变为用面向对象的编程语言创建的可以运行的程序。这里将把某大学课程管理的问题作为本部分的示例。【案例材料】1.某大学背景学生登记在大学里是一种非常耗时的活动,学校还面临着给教室排课的问题。在每个教师决定了他这个学期将讲授什么课程之后,教务处将这些信息输入到一个计算机系统,然后给每个教师打印一份报表,最后要打印一份课程目录给学生。依照现有系统,学生填写注册表并确定他们所选的课程,然后将所有信息递交到教务处。一个学生在一段时间内最多选四门课。教务处将这些信息输入到计算机。一旦输入了学生所选的课程,就会把学生安排到这些课程。大多数时候,学生得到他们选课的课程,但是,当发生冲突时,教务处将询问学生以便得到其他的选择。一旦给所有学生都排好了课,学生的课表将打印出来给学生以便得到他们的确认。大多数学生登记将在一周内完成,但是有些特殊情况要花两周来进行。当最初的登记周期结束时,教师会得到他们所讲的每一门课程的学生名单。2.课程登记问题的风险开发团队觉得这个系统最主要的风险是有效地存储和获取课程信息。他们开发了几个原型来评价每一个备选的数据库管理系统的数据和访问机制。他们还开发了一些原型来研究学校运行联机登记系统的硬件需求。3.某大学课程登记问题状态在学期之初,学生会需要一份这个学期要开的课程列表。每门课程的信息,如教师、部门和课程需要的前提条件将包含在这个清单里来帮助学生们选择课程。新系统允许学生在每个学期里选四门课。另外,每个学生还要提交两个备选课程以预防课程被选满或取消的情况。少于三个学生选择的课将被取消。一旦学生登记完成,登记系统将信息传入财务系统,学生就可以交这个学期的学费了。教师要进入联机系统确认他们所讲授的课程和每门课程有哪些学生。在每个学期的这段时间里,学生可以改变他们的计划。学生可以在这段时间内进入系统增加或删除课程。教学案例-2-4.某大学课程登记系统中的角色①Student(学生):登记选课。②Teacher(教师):选择想教的课。③Registrar(登记员):创建课程和学期的课表,维护所有课程、教师和学生的信息。④BillingSystem(财务系统):接受系统的财务信息。一、在RationalRose中使用用例1.创建角色①右击浏览器中的用例视图包,显示快捷菜单。②选择New-Actor菜单。浏览器中会出现一个叫做NewClass的操作。③选择ActorNewClass重命名。按照这种方法创建角色:Student、Teacher、Registrar、BillingSystem。图1显示了某大学课程登记系统中角色的浏览器视图。图1角色2.角色文档①Student:在学校里登记选课的人。②Teacher:在学校里有资格教课的人。③Registrar:对课程登记系统维护负责的人。④BillingSystem:负责学生财务的外部系统。3.创建文档①通过在View菜单中选择Documentation菜单打开文档窗口。②单击选择浏览器中的角色。教学案例-3-③将鼠标定位在文档窗口并输入角色的文档信息。4.某大学课程登记系统中的用例系统需要实现以下功能:①Student角色使用系统进行选课登记。②选课结束后,要提供财务给财务系统。③Teacher角色要用系统选择这个学期要教授的课程,还要从系统中得到一个课程清单。④登记员负责制定这个学期的课程目录,维护教师和学生需要的课程信息。基于上述原因,确定了以下用例:①Registerforcourses(登记课程)。②Selectcoursestoteach(选择所教课程)。③Requestcourselist(获取课程清单)。④Maintaincourseinformation(维护课程信息)。⑤Maintainteacherinformation(维护教师信息)。⑥Maintainstudentinformation(维护学生信息)。⑦Createcoursecatalouge(创建课程目录)。5.创建用例①在浏览器中右击用例视图以显示快捷菜单。②选择“New:UseCase”。在浏览器中会出现一个新的未命名用例。③选择用例并命名。图2显示了在浏览器视图中所包含的课程登记系统中的所有用例。图2用例教学案例-4-6.创建用例描述①在浏览器中单击选择用例。②将鼠标放在文档窗口并输入用例的规格说明。登记课程用例的描述如图3所示。图3用例的简短描述7.选择所教课程用例事件流文档示例(1)前置条件CreateCourseOfferings(创建课程)提供了MaintainCourses用例的子事件流,要在这个用例之前进行。(2)主事件流这个用例的起始事件是教师输入密码并登录系统。系统验证密码(E-1)并提示教师选择这个学期或下个学期(E-2)。教师输入想要的学期。系统提示教师选择想要的操作:增加、删除、查询、打印或退出。如果选择的操作是增加,S-1:执行AddaCourseOffering(增加课程)子事件流。如果选择的操作是删除,S-2:执行DeleteaCourseOffering(删除课程)子事件流。如果选择的操作是查询,S-3:执行ReviewaCourseOffering(查询课程)子事件流。如果选择的操作是打印,S-4:执行PrintaCourseOffering(打印课程)子事件流。如果选择的操作是退出,S-5:用例结束。(3)扩展事件流S-1:AddaCourseOffering。此系统显示了一个包含课程名和数量的所有课程界面。教师输入课程名和代码(E-3),系统显示输入的将提供的课程(E-4)。教师选择一门课。系统把教师和他所选择的课程联系起来(E-5)。用例重新开始。S-2:DeleteaCourseOffering。此系统显示了一个包含课程名和数量的所有课程界面。教师输入所提供课程的名称和代码(E-6),系统根据教师的输入将此课程删除(E-7)。用例重新开始。S-3:ReviewaCourseOffering。系统得到并显示给教师分课信息(E-8),包括课程名、代码、课时数、周数和地点。当教师确认过一遍后,用例重新开始。S-4:PrintaCourseOffering。系统打印教师的课程计划(E-9)。用例重新开始。教学案例-5-(4)异常事件流E-1:AninvalidteacherIDnumberisentered(输入无效教师ID)。用户可以重新输入一个教师ID或终止用例。E-2:Aninvalidsemesterisentered(输入非法的学期)。用户可以重新输入学期或终止用例。E-3:Aninvalidcoursename/numberisentered(输入无效的课程名或课程代码)。用户可以重新输入一个有效的课程名或课程代码或者终止用例。E-4:Courseofferingcannotbedisplayed(不能显示提供的课程)。通知用户这个选择此时是无效的。用例重新开始。E-5:Alinkbetweentheteacherandthecourseofferingcannotbecreated(教师和提供的课程之间无法建立关联)。系统保存此信息并在稍后创建关联,用例继续。E-6:Aninvalidcourseofferingname/numberisentered(输入无效的课程名或课程代码)。用户可以重新输入一个有效的课程名或课程代码或者终止用例。E-7:Alinkbetweentheteacherandthecourseofferingcannotberemoved(教师和所提供课程之间的关联无法删除)。系统保存此信息并在稍后删除关联。用例继续。E-8:Thesystemcannotretrievescheduleinformation(系统无法得到计划表)。用例重新开始。E-9:Theschedulecannotbeprinted(无法打印计划表)。通知用户当前操作不可用。用例重新开始。8.把事件流文档连接到用例①将事件流保存为文本文件。②在浏览器中右击用例以显示快捷菜单。③选择Specifications菜单。④选择File标签。⑤右击显示快捷菜单。⑥选择InsertFile菜单。⑦浏览适当的目录并选择想要的文件。⑧单击Open按钮。⑨单击Ok按钮关闭规格说明。一个连接到用例的事件流文档如同4所示。教学案例-6-图4连接到用例的事件流文档9.创建主用例图①在浏览器的用例视图中双击Main图以打开它。②单击选择浏览器中的角色,并将角色拉至图中。③对图中所需的其他角色重复步骤②。④单击选择浏览器中的某个用例,并将它拖至图中。⑤重复步骤④,在图中加上所需的其他用例。10.创建关联①从图的工具栏中单击并选择关联图标或者单向关联图标。②单击角色开始一个关联并将此关联和相关的用例联系起来。11.创建使用关系①在工具栏中单击选择泛化图标。②单击使用用例并将泛化图标和被使用的用例联系起来。③双击泛化箭头显示规格说明。④如果是第一次创建使用关系,在构造型字段上输入Uses。如果已经创建了Uses构造型,单击构造型字段中的箭头显示菜单并选择Uses。⑤单击Ok按钮关闭规格说明。⑥右击泛化箭头显示快捷菜单。教学案例-7-⑦选择ShowStereotype菜单选项。12.创建扩展关系①在工具栏中单击选择泛化图标。②单击有扩展功能的用例并将泛化图标和基用例联系起来。③双击泛化箭头显示规格说明。④如果是第一次创建扩展关系,在构造型字段上输入Extends。如果已经创建了Extends构造型,单击构造型字段中的箭头显示菜单并选择Extends。⑤单击Ok按钮关闭规格说明。⑥右击泛化箭头显示快捷菜单。⑦选择ShowStereotype菜单选项。图5显示了某大学课程登记系统的主用例图。图5主用例图教学案例-8-13.创建附加用例图①右击浏览器中的用例视图显示快捷菜单。②选择New:UseCaseDiagram菜单项。③选择用例图,输入名称。④打开用例图,添加所需的角色、用例和交互。图6显示了一个附加用例图。图6附加用例图二、在RationalRose中使用类图1.创建类①右击选择浏览器中的逻辑视图。②选择New:Class菜单项。浏览器中出现了一个新的名为NewClass的类。③选择类并输入类名。2.创建类的构造型①在浏览器中右击,选择类并显示快捷菜单。②选择Specification菜单项。③选择General标签。④输入构造型名称。教学案例-9-⑤单击Ok按钮关闭Specification对话框。3.创建包①右击选择浏览器中的逻辑视图。②选择New:Package菜单项。③选择包并输入包名。4.重新部署类①在浏览器中单击并选择类。②把类拖到相关的包中。③对每个要重新部署的类重复步骤②。5.某大学课程登记问题中的类和包图7显示了某大学课程登记问题中的类和包。这两个和AddaCourseOfferingtoTeach(添加要教授的课程)这个场景有关,这个场景是SelectCoursestoTeach(选择所教课程)用例的子事件流。这个场景的主要功能是教师在提供的课程中选择这个学期想教的课。图7类和包6.创建主类图为主类图添加包:①在浏览器中双击,打开主类图。②在浏览器中单击并选择包。③把包拖至图中。④为每一个需要加到图上的包重复上述步骤。教学案例-10-图8显示了登记系统的主类图,即Main类图。图8主类图7.创建包的主类图①双击类图中的包。②Rose将打开包并显示包的主类图。③在浏览器中单击选择类并把类拖至图中。④对每个要放到图中的类重复步骤③。图9显示了学校资源包的主类图。图9学校资源包的主类图8.创建参与类的视图①右击浏览器中的用例以显示快捷菜单。②选择New:ClassDiagram菜单项。③选择类图并命名。教学