第十章 面向对象分析
? 面向对象分析的基本过程
? 需求陈述
? 建立对象模型
? 建立动态模型
? 建立功能模型
? 定义服务
面向对象分析的基本过程
? 概述
? 三个子模型与五个层次
? Object model,最重要,开发任何系统都需要;
? Dynamic model,对于开发交互式系统 (interactive system)
很重要;
? Function model,对于开发大运算量问题(如科学计算、
编译系统等)很重要。
? Object model 由五个层次组成 (Coad&Yourdon,
1991),相当于把五张透明胶片 (transparencies)叠在
一起,每一层显示更多的细节。
需求陈述
? 10.2.1 书写要点
? 10.2.2 例子
需求陈述
? 书写要点
? 问题范围
? 功能需求
? 性能要求
? 应用环境
? 假设条件
建立对象模型
? 10.3.1 确定类一 &一对象
? 10.3.2 确定关联
? 10.3.3 划分主题
? 10.3.4 确定属性
? 10.3.5 识别继承关系
? 10.3.6 反复修改
建立对象模型
? 确定类一 &一对象
? 列出所有候选对象 (candidates),它们可能是 物
理实体 人或组织 要处理的事件 对象间的活动
抽象概念
? 去粗取精
建立对象模型
? 确定关联
? 收集
? 需求陈述中涉及 objets的动词短语
?需求陈述中隐含的关联
? 根据问题域知识得出的关联
建立对象模型
? 确定关联
? 筛选
? 删除 与已删去的 object 有关的关联
? 与问题无关的或应在实现阶段考虑的关联
? 瞬时事件:注意关联描述静态结构
? 三元关联:分解为二元关联或限定关联
? 派生关联:即可用其它关联定义的冗余关联
? 完善
? 正名分解 补充
? 标明阶数
建立对象模型
? 10.3.1 确定类一 &一对象
? 10.3.2 确定关联
? 10.3.3 划分主题
? 10.3.4 确定属性
? 10.3.5 识别继承关系
? 10.3.6 反复修改
建立对象模型
? 10.3.1 确定类一 &一对象
? 10.3.2 确定关联
? 10.3.3 划分主题
? 10.3.4 确定属性
? 10.3.5 识别继承关系
? 10.3.6 反复修改
建立对象模型
? 划分主题
? 按问题域而不是按功能分解
? 主题间的依赖和交互尽可能少
? 确定属性
? Attribute 不表示 objects 之间的关系,只表示其
本质性质,不要与链属性、限定词混淆。
? 暂不考虑纯用于实现的 attributes(即单纯的内部状
态)。
? 需求陈述中与已确定的 objects 有关的名词、形容词
可能是选择的线索
? 10.3.5 识别继承关系
? 10.3.6 反复修改
建立对象模型
? 识别继承关系
? Bottom-up:将具有相同属性的 classes向上归纳
出父类。
? Top-down,将现有 classes向下细化出子类(但
分析阶段避免过度细化)
? 反复修改
建立动态模型
? 10.4.1 编写脚本
? 10.4.2 设想用户界面
? 10.4.3 画事件跟踪图
? 10.4.4 画状态图
? 10.4.5 审查动态模型
建立动态模型
? 编写脚本
? 正常情况脚本
? 特殊情况脚本(输入 \输出取边界值时)
? 异常情况脚本(应允许用户 异常中止 或 取消 一
个操作)
? 设想用户界面
建立动态模型
? 画事件跟踪图
? 确定事件
? 画出事件跟踪图
? 画状态图
? 审查动态模型
建立功能模型
? 10.5.1 画出基本系统模型图
? 10.5.2 画出功能级数据流图
? 10.5.3 描述处理框功能
定义服务
? 10.6.1 常规行为
? 10.6.2 从事件导出的操作
? 10.6.3 与数据流图中处理框对应的操作
? 10.6.4 利用继承减少冗余操作
? 面向对象分析的基本过程
? 需求陈述
? 建立对象模型
? 建立动态模型
? 建立功能模型
? 定义服务
面向对象分析的基本过程
? 概述
? 三个子模型与五个层次
? Object model,最重要,开发任何系统都需要;
? Dynamic model,对于开发交互式系统 (interactive system)
很重要;
? Function model,对于开发大运算量问题(如科学计算、
编译系统等)很重要。
? Object model 由五个层次组成 (Coad&Yourdon,
1991),相当于把五张透明胶片 (transparencies)叠在
一起,每一层显示更多的细节。
需求陈述
? 10.2.1 书写要点
? 10.2.2 例子
需求陈述
? 书写要点
? 问题范围
? 功能需求
? 性能要求
? 应用环境
? 假设条件
建立对象模型
? 10.3.1 确定类一 &一对象
? 10.3.2 确定关联
? 10.3.3 划分主题
? 10.3.4 确定属性
? 10.3.5 识别继承关系
? 10.3.6 反复修改
建立对象模型
? 确定类一 &一对象
? 列出所有候选对象 (candidates),它们可能是 物
理实体 人或组织 要处理的事件 对象间的活动
抽象概念
? 去粗取精
建立对象模型
? 确定关联
? 收集
? 需求陈述中涉及 objets的动词短语
?需求陈述中隐含的关联
? 根据问题域知识得出的关联
建立对象模型
? 确定关联
? 筛选
? 删除 与已删去的 object 有关的关联
? 与问题无关的或应在实现阶段考虑的关联
? 瞬时事件:注意关联描述静态结构
? 三元关联:分解为二元关联或限定关联
? 派生关联:即可用其它关联定义的冗余关联
? 完善
? 正名分解 补充
? 标明阶数
建立对象模型
? 10.3.1 确定类一 &一对象
? 10.3.2 确定关联
? 10.3.3 划分主题
? 10.3.4 确定属性
? 10.3.5 识别继承关系
? 10.3.6 反复修改
建立对象模型
? 10.3.1 确定类一 &一对象
? 10.3.2 确定关联
? 10.3.3 划分主题
? 10.3.4 确定属性
? 10.3.5 识别继承关系
? 10.3.6 反复修改
建立对象模型
? 划分主题
? 按问题域而不是按功能分解
? 主题间的依赖和交互尽可能少
? 确定属性
? Attribute 不表示 objects 之间的关系,只表示其
本质性质,不要与链属性、限定词混淆。
? 暂不考虑纯用于实现的 attributes(即单纯的内部状
态)。
? 需求陈述中与已确定的 objects 有关的名词、形容词
可能是选择的线索
? 10.3.5 识别继承关系
? 10.3.6 反复修改
建立对象模型
? 识别继承关系
? Bottom-up:将具有相同属性的 classes向上归纳
出父类。
? Top-down,将现有 classes向下细化出子类(但
分析阶段避免过度细化)
? 反复修改
建立动态模型
? 10.4.1 编写脚本
? 10.4.2 设想用户界面
? 10.4.3 画事件跟踪图
? 10.4.4 画状态图
? 10.4.5 审查动态模型
建立动态模型
? 编写脚本
? 正常情况脚本
? 特殊情况脚本(输入 \输出取边界值时)
? 异常情况脚本(应允许用户 异常中止 或 取消 一
个操作)
? 设想用户界面
建立动态模型
? 画事件跟踪图
? 确定事件
? 画出事件跟踪图
? 画状态图
? 审查动态模型
建立功能模型
? 10.5.1 画出基本系统模型图
? 10.5.2 画出功能级数据流图
? 10.5.3 描述处理框功能
定义服务
? 10.6.1 常规行为
? 10.6.2 从事件导出的操作
? 10.6.3 与数据流图中处理框对应的操作
? 10.6.4 利用继承减少冗余操作