Download presentation
Presentation is loading. Please wait.
1
面向对象的分析
2
面向对象分析的任务 着重分析问题域和系统责任,确定问题的解决方案,暂时忽略与系统实现有关的问题,建立独立于实现的系统分析模型。
系统分析模型包括系统的静态结构模型和动态行为模型、必要的需求分析说明书、系统分析说明书等。
3
面向对象分析的过程 问题域分析 发现和定义对象与类 识别对象的外部联系 建立系统的静态结构模型 建立系统的动态结构模型
分析应用领域的业务范围、业务规则和业务处理过程,确定系统的责任、范围和边界,确定系统的需求。 着重对系统与外部的用户和其他系统的交互进行分析,确定交互的内容、步骤和顺序。 发现和定义对象与类 识别对象和类,确定它们的内部特征,即属性和操作。 识别对象的外部联系 同时识别对象与类、类与类之间的各种外部联系,即结构性的静态联系和行为性的动态联系,包括一般与特殊、整体与部分、实例连接、消息连接等联系。 建立系统的静态结构模型 分析系统的行为,建立系统的静态结构模型,并将其用图形和文字说明表示出来。 建立系统的动态结构模型 分析系统的行为,建立系统的动态行为模型,并将其用图形和文字说明表示出来。
4
建立用例模型:为何建立? 客户使用它,详细说明系统应有的功能,并描述系统的使用方法;
开发人员使用它,有助于理解系统的需求,为后续阶段的工作(如分析、设计和实现)奠定基础; 系统集成和测试人员使用它,验证最终实现的系统是否与用例模型说明的功能一致; 文档人员使用它,为编写用户手册提供参考。
5
建立用例模型:如何建立? 找出系统边界以外的角色(actor),角色是与系统进行交互的外部实体,可以是与系统交互的人员、与系统相连并交换信息的设备和其他系统; 从这些角色如何与系统进行交互的角度,使用用例(use case)来描述角色怎样使用系统以及系统向角色提供什么功能,用例所表示的是从外部用户角度观察的系统功能; 绘制用例图,并编写详细的用例描述。 用例图只能宏观地描述系统的功能,但却不能提供用例模型所必需的所有信息,每个功能的含义和具体实现步骤则以文本方式描述。
6
建立用例模型示例:学生课程注册系统
7
建立用例模型示例:发现角色1 角色是与系统交互(发送、接收、交换消息)的人或事。 谁使用系统的功能? 谁需要借助系统完成日常工作?
谁来维护和管理系统,以保证系统正常工作? 系统控制的硬件设备有哪些? 系统需要与其他哪些系统交互? 谁对系统产生的结果感兴趣?
8
建立用例模型示例:发现角色2
9
建立用例模型示例:发现用例1 用例总是由角色初始化,为角色提供值,只有最终产生了返回角色的结果,用例的执行才能完毕。
角色需要从系统中获得什么功能?角色需要做什么? 角色需要读取、产生、删除、修改或存储系统的某些信息吗? 系统中发生事件需要通知角色吗?角色需要通知系统某件事情吗? 系统需要的输入/输出信息是什么?这些信息从哪儿来到哪儿去? 采用什么实现方法满足某些特殊要求?
10
建立用例模型示例:发现用例2
11
建立用例模型示例:用例之间的关系 用例之间具有包含和扩展的关系。
包含(<<include>>):将独立的用例分解成更加简单的用例。 扩展(<<extend>>):在一个用例中加入一些新的动作来构成另一个用例。
12
建立用例模型示例:描述用例 使用文字描述那些不能反映在图形上的信息,要求清晰明确,没有二义性。
描述用例时,应该只注重外部能力,不涉及内部细节。
13
建立用例模型示例:用例描述内容1 目标:简要描述用例的最终任务和结果。 事件流 说明用例是怎样启动的,即哪些角色在什么情况下启动执行用例。
说明角色和用例之间的信息处理过程,如哪些信息是通知对方的,怎样修改和检索信息的,系统使用和修改了哪些实体等。 说明用例在不同的条件下,可以选择执行的多种方案。 说明用例在什么情况下才能被视作完成,完成时结果应传给角色。
14
建立用例模型示例:用例描述内容2
15
建立用例模型示例:用例描述内容3 特殊需求:说明此用例的特殊要求。 前提条件:说明此用例开始执行的前提条件,如角色登录成功等。
后置条件:说明此用例执行结束后,结果应传给什么角色。
16
用例描述示例:登记成绩
17
发现和定义对象类 在用例模型的基础上,通过识别实体类、边界类和控制类,从而发现和定义系统中的对象类。
实体类<<entity>> :表示系统存储和管理的永久信息。 边界类<<boundary>>:表示角色与系统之间的交互。 控制类<<control>>:表示由系统支持和用户执行的任务。
18
发现和定义对象类:识别实体类 人员:由系统保存和管理其信息的人员。 组织:在系统中发挥一定作用的组织机构。
物品:需要由系统管理的物品,可以是有形或无形的。 设备:在系统中动态地运行、由系统进行监控或供系统使用的各种设备、仪表、机器、运输工具等。 事件:需要由系统长期记忆的事件。 表格:可以是各种业务报表、统计表、申请表、身份证、商品订单、帐目、学生成绩单等。 注意不要将原始的表格进行简单对应,应该是分析和整理后形成的映射一些现实事物的表格。
19
识别实体类 :学生课程注册系统 实体类 说明 Professor 学校中讲课的教师 Student 学校中注册课程的学生 Schedule
学生在新学期选择登记的课程列表 CourseCatalog 学校所有课程的目录 Course 课程的基本信息 CourseOffering 新学期课程的开设信息,如讲课教师、时间、地点等信息
20
发现和定义对象类:识别边界类 根据角色的不同类型,边界类可以是用户接口、系统接口和设备接口。
用户接口:集中描述了用户与系统的交互信息,而不是描述用户接口的显示形式; 系统接口和设备接口:集中描述所定义的通信或交换协议,而不是说明协议如何实现的。
21
识别边界类 :学生课程注册系统 边界类 说明 LoginForm 为教师、学生和注册管理员提供登录的操作
RegisterCoursesForm 为学生提供选课注册的操作 ViewReportForm 为学生提供成绩查询的操作 SelectTeachCoursesForm 为教师提供查看学生选课情况的操作 SubmitGradesForm 为教师提供登记成绩的操作 MaintainProfessorsForm 为注册管理员提供维护教师信息的操作 MaintainStudentsForm 为注册管理员提供维护学生信息的操作 MaintainCoursesForm 为注册管理员提供维护课程信息的操作 CloseRegistrationForm 为注册管理员提供关闭注册的操作 BillingSystemNotice 提供与收费系统的信息交换接口
22
发现和定义对象类:识别控制类 控制类负责协调边界类和实体类,通常在现实世界中没有对应的事物,它负责接收边界类的信息,并将其分发给实体类。
控制类与用例存在着密切的关系,它在用例开始执行时创建,在用例结束时取消。 一般来说,一个用例对应一个控制类。
23
识别控制类 :学生课程注册系统 控制类 说明 RegisterCoursesControl 负责新学期学生的选课登记
ViewReportControl 负责学生成绩的查询 SelectTeachCoursesControl 负责新学期课程的学生选择情况 SubmitGradesControl 负责学生成绩的登记 CloseRegistrationControl 负责关闭课程注册
24
发现和定义对象类:将用例行为分配到对象类1
时序图表示完成某项行为的对象类和这些对象类之间传递消息的时间顺序。
25
时序图:注册课程
26
发现和定义对象类:将用例行为分配到对象类2
协作图包含一组对象和以消息交换为纽带的关联,用于描述系统的行为是如何由系统的成分合作实现的。 协作图与时序图是同构的,二者表示的都是同样的系统交互活动,只是各自的侧重点不同而已。 通过对用例建立交互图,实现了将系统责任分配到对象类中,即交互图中的每一个消息就是消息接收对象的一个服务。
27
协作图:注册课程
28
发现和定义对象类:定义属性 初步发现 整理和筛选 按照一般常识,找出对象的某些属性,如人员的姓名、性别、年龄、地址等;
认真研究问题域,找出对象的某些属性,如商品的条形码、学生的学号等; 根据系统责任的要求,找出对象的某些属性; 考虑对象需要系统保存和管理的信息,找出对象的相应属性,如“课程”需要保存和管理的信息; 对象为了在服务中实现其功能,需要增设一些属性; 识别对象需要区别的状态,考虑是否需要增加一个属性来区别这些状态; 确定属性表示整体与部分结构和实例连接。 整理和筛选 检查这些属性是否系统使用的特征、是否描述了对象本身的特征、是否可以通过继承得到、是否可以从其他属性直接导出等。
29
识别对象的外部联系 对象之间的分类关系,即泛化关系; 对象之间的组成关系,即聚合关系; 对象之间的静态关系,即关联关系;
对象之间的动态关系,即依赖关系。
30
识别对象的外部联系:发现泛化关系 查看一个类的属性与服务是否适合这个类的全部对象,如果某些属性或服务只适合该类的一部分对象,说明应该从这个类中划分出一部分特殊类,建立泛化关系; 检查是否某些类具有相同的属性和服务,如果把这些相同的属性和服务提取出来,能否在概念上构成这些类的父类,形成泛化关系。
31
识别对象的外部联系:发现聚合关系 物理上的整体事物和组成部分,如设备与零部件的关系; 组织机构及其下级组织,如学校和系的关系;
团体(组织)与成员,如学校和教师的关系; 抽象事物的整体与部分,如法律与法律条文; 具体事物及其某个抽象方面,如人员与身份。
32
识别对象的外部联系:发现关联关系 认识对象之间的静态联系,如“学生”与“课程”之间存在选课关系,那么这两个类存在关联关系;
认识关联的属性和操作,如在“学生”和“课程”的连接中,需要给出开课学期、讲课教师等属性信息; 分析关联的多重性,如“学生”和“课程”是多对多的连接; 对于多元关联,需要增加一个对象类,使之转化为二元关联; 对于多对多的关联,需要增加一个对象类,使之转化为两个一对多的关联。
33
识别对象的外部联系:发现依赖关系 通过消息模拟和跟踪对象服务的执行过程,考虑当该对象执行时是否需要请求其它对象提供服务、是否需要向其他对象提供或索取某些数据等问题,从而建立依赖关系。
Similar presentations