UML实例选课系统UML工作的实例•某大学用计算机管理的选课系统–注册管理员设置一个学期的所有课程信息一个课程可以有多个课程选课单。–学生选择4门主修课和2门选修课–当某学生在学期注册了,则注册(billing)系统会得到通知,在该学期给该学生开设账号。–学生在注册后一段时间可以使用系统增加/撤销所选课程。–教授使用这个系统接受他们课程的选课名册。–注册系统的用户将得到密码(password),用于登录的确认。用例图(usecasediagram)•用例图展现了一组用例、参与者(Actor)以及它们之间的关系。•用例图通常包括用例、参与者和扩展关系、包含关系等。•用例图的功能是支持系统的行为,即该系统在它的上下文环境中所提供的外部可见服务。•用例图的两种使用方式:–上下文环境建模:说明位于系统之外并与系统进行交互的参与者以及他们所扮演的角色的含义。–功能需求建模:说明系统想要的行为。参与者(Actors)•参与者定义了一组与系统有信息交互关系的人、事、物。它是用例的客户并与用例进行交互。一个参与者针对每一个与之通信的用例扮演一种角色。•角色可以是人或外部系统。它定义了系统的边界。StudentRegistrarProfessorBillingSystem用例(UseCases)•一个用例是一种系统应表现行为的模式:–每个用例是一个参与者与系统在一次对话中所执行的相关事务的序列。•要调查参与者以确定他们的要求:–Registrar(注册管理员)-维护所有课程信息–Professor(教授)-要求选课名单–Student(学生)-维护选课表–BillingSystem(记账系统)-从注册中心接受记账信息MaintainScheduleMaintainCurriculumRequestCourseRoster用例的规格说明•为每个用例建立一个规格说明,描述用例的事件流(flowofevent)。–从参与者角度编写维护所有课程信息的事件流•用例开始于注册管理员登录到注册系统并敲入他的密码时。系统检验此密码是否有效,并提示注册管理员选择当前学期或下个学期。注册管理员敲入他期望的学期。然后系统提示选择他所期望的活动,包括:Add,Delete,Review或Quit。a)如果选择Add,则执行增加课程的子事件流。b)如果选择Delete,则执行删除课程的子事件流。c)如果选择Review,则执行审查所有课程信息的子事件流。d)如果选择Quit,则用例终止。registercourse(注册课程)用例•用例允许学生在本学期注册他的课程申请。•如果在本学期开学的一段时间内学生作出add或drop的变更,他还可修改和删除他的课程选择。•课程目录系统提交一个表格,列出本学期所有的课程申请。•基本事件流:a)当学生想要注册课程申请或者想要改变他的已有的选课表时,本用例开始。b)系统要求学生具体说明他可能会执行的功能(建立、更新或者删除一个选课表)。c)一旦学生提交了请求信息,将执行某一个子流。如果学生选择“建立一个选课表”,则执行一个“建立”子事件流的服务。如果学生选择“更新一个选课表”,则执行一个“更新”子事件流的服务。如果学生选择“删除一个选课表”,则执行一个“删除”子事件流的服务。建立选课表子事件流a)系统检索来自课程目录系统的一个有效的课程申请的列表,并把这个表显示给学生。b)学生根据这个有效的课程申请列表选择4门主修课申请和2门选修课申请。c)一旦学生作出他的选择,系统为学生建立一个选课表,包括了这个学生选择的课程申请。d)执行“提交选课表”子事件用例图的事例•注册系统的用例图直观地描述了参与者和用例之间的关系。StudentRegistrarProfessorMaintainScheduleMaintainCurriculumRequestCourseRosterBillingSystem交互图—用例的实现•用例图描述了系统的外部视图。•交互图则描述了如何通过对象之间的交互实现用例。•交互图展现了按一定的目的进行的一种交互,它由在一个上下文中的一组对象及它们之间交互的信息组成。•交互图有两种类型:–顺序图(Sequencediagram)–协作图(Collaborationdiagram)顺序图(SequenceDiagram)•顺序图也称为序列图,它按时间顺序显示对象之间的交互。registrationmanagermath101:Studentregistrationformmath101section11:fillininfo2:submit3:addcourse(joe,math01)4:areyouopen?5:areyouopen?6:add(joe)7:add(joe)•顺序图展现了一组对象和由这组对象收发的消息,用于按时间顺序对控制流建模。•对象表述为虚垂线顶端的矩形框。这些对象都排列在图的顶部,其生命线从图的顶部画到图的底部。•垂线是对象的生命线,说明对象在一段时间内存在。•对象可以在交互过程中创建,在交互过程中撤销。•生命线之间的箭头表示消息。消息出现的次序自上而下。•消息箭头可以回到同一条生命线,指明自调用,即对象发给自己的消息。•顺序图的控制焦点是一个瘦高的矩形,表示一个对象执行一个动作所经历的时间段。矩形的顶部表示动作的开始,底部表示动作的结束(可以由一个返回消息来标记)。•顺序图的构造步骤:a)首先,把参加交互的对象放在图的上方,横向排列。通常把发起交互的对象放在左边,较下级对象依次放在右边。b)然后,把这些对象发送和接收的消息纵向按时间顺序从上到下放置。c)这样,就提供了控制流随时间推移的清晰的可视化轨迹。选课的顺序图:学生:选课表单:课程登记管理器:课程目录:课程打开取课程列表取课程列表显示课程列表选择4门主修课和2门选修课把课程加入计划添加学生重复4门课•边界类是直接与系统外部实体交互的类,描述系统与外部(人或其他系统)的接口建模,其原型为boundary。•控制类是为特定用例的控制行为建模的类,协调特定于用例的行为所需的事件,其原型为control。•实体类是用来保存或更新某个对象的信息的类,独立于它的环境。原型为entity。ControlEntityActorBoundary:Registrarcourseform:CourseFormtheManager:CurriculumManageraCourse:Course1:setcourseinfo2:process3:addcourse4:newcourse协作图(CollaborationDiagram)•协作图也称为合作图,它显示了对象与周围对象之间的交互,以及它们之间的链接。•协作图展现了一组对象,这组对象之间的连接以及这组对象收发的消息。•协作图中的协作不是参与者与系统之间的交互,而是系统内部某一个用例中各个对象之间信息传递的方式。•消息上所附编号指明执行顺序。•协作图的构造步骤:a)将参加交互的对象作为图的顶点。b)将连接这些对象的链表示为图的弧。c)用对象发送和接收的消息修饰这些链。•协作图提供了在协作对象的结构组织的上下文环境中观察控制流的一个清晰的可视化轨迹。类图(classdiagram)•类图从系统的逻辑视图展现了一组类、接口、协作和它们之间的关系。•类图给出系统的静态设计视图,主动类的类图给出了系统的静态进程视图。•在类图中UML建模元素包括:–类及其结构和行为;–接口;–协作;–关联、依赖、泛化关系;–多重性和导航指示符;–角色名字。类(Class)•类是具有共同结构、共同行为、共同关系和共同语义的对象的集合。•通过检查在顺序图和协作图中的对象可以发现类。•一个类用间隔为三部分的矩形描绘。•类应当使用领域的术语来命名:–应建立命名的标准–例如,所有的类都是以大写字母开头的单一名词类的事例RegistrationFormRegistrationManagerCourseStudentCourseOfferingProfessorScheduleAlgorithm操作(Operations)•一个类的行为通过类的各种操作来表达。•这些操作可以通过检查交互图来寻找。registrationformregistrationmanager3:addcourse(joe,math01)RegistrationManageraddCourse(Student,Course)属性(Attributes)•一个类的结构通过它的属性来表达。•通过检查类的定义、问题的需求,并参照领域知识来发现属性。每个课程选课单有课程号number、地点location、时间timeCourseOfferingnumberlocationtime类的事例RegistrationFormRegistrationManageraddStudent(Course,StudentInfo)CoursenamenumberCreditsopen()addStudent(StudentInfo)StudentnamemajorCourseOfferinglocationopen()addStudent(StudentInfo)ProfessornametenureStatusScheduleAlgorithm寻找关系•通过检查交互图,以发现关系–如果两个对象必须打交道,一定存在沟通的路径。RegistrationManagerMath101:Course3:addstudent(joe)CourseRegistrationManager关系的事例RegistrationFormRegistrationManageraddStudent(Course,StudentInfo)CoursenamenumberCreditsopen()addStudent(StudentInfo)StudentnamemajorCourseOfferinglocationopen()addStudent(StudentInfo)ProfessornametenureStatusScheduleAlgorithm多重性和导航的事例RegistrationFormRegistrationManageraddStudent(Course,StudentInfo)CoursenamenumberCreditsopen()addStudent(StudentInfo)StudentnamemajorCourseOfferinglocationopen()addStudent(StudentInfo)ProfessornametenureStatusScheduleAlgorithm10..*0..*111..*43..100..41泛化(继承)的事例RegistrationUserRegistrationManageraddStudent(Course,StudentInfo)CoursenamenumberCreditsopen()addStudent(StudentInfo)StudentnamemajorCourseOfferinglocationopen()addStudent(StudentInfo)ProfessornametenureStatusScheduleAlgorithm10..*0..*111..*43..100..41RegistrationForm