600 likes | 755 Views
第 4 章 面向对象分析. 4.1 概述 4.2 分析建模 4.3 Jocobson 方法 4.4 Coad 与 Yourdon 面向对象分析. 4.1 概述. 早期的 OOD 方法 :Booch86 、 GOOD (通用面向对象的开发)、 HOOD (层次式面向对象的设计)、 OOSD (面向对象的结构设计)。 1989 年之后,面向对象方法的研究重点开始转向软件生命周期的分析阶段,并将 OOA 和 OOD 密切地联系在一起。. 分析任务. 当开发一个新的产品或系统时,需考虑下面的问题 : 如何以遵从 OO 软件工程的方式来刻划它? 什么是相关的对象?
E N D
第4章 面向对象分析 • 4.1 概述 • 4.2分析建模 • 4.3 Jocobson 方法 • 4.4 Coad与Yourdon面向对象分析
4.1 概述 • 早期的OOD方法:Booch86、GOOD(通用面向对象的开发)、HOOD(层次式面向对象的设计)、OOSD(面向对象的结构设计)。 • 1989年之后,面向对象方法的研究重点开始转向软件生命周期的分析阶段,并将OOA和OOD密切地联系在一起。
分析任务 • 当开发一个新的产品或系统时,需考虑下面的问题: • 如何以遵从OO软件工程的方式来刻划它? • 什么是相关的对象? • 它们如何相互关联? • 对象如何在系统的范围内工作? • 如何对问题刻划或建模?
OOA 的意图是定义所有和被求解的问题相关的类(及同类关联的关系和行为),为了达到这个目标,必须完成以下任务: 1.在客户和软件工程师之间沟通了解基本的用户需求。 2.标识类(即,定义属性和方法)。 3.划分类层次。 4.表示对象—对象关系(对象连接)。 5.对象行为建模。 6.重复任务1到5,直至完成建模。
传统方法与 OO 方法 • 结构化分析对需求采用独特的“输入-加工-输出”视角,数据被脱离数据的变换过程而单独考虑; • 结构化分析方法着重于功能分解的使用。
Fichman和Kemerer建议了11 个建模方面,可用它们来比较各种传统的和面向对象的分析方法: 1.实体的标识/分类。 2.一般到特殊以及整体到部分的实体关系。 3.其他实体关系。 4.实体属性的描述。 5.大型模型的划分。 6.状态和状态间的变迁。 7.功能的详细描述。 8.自顶向下的分解。 9.端到端的处理序列。 10.排它性服务的标识。 11.实体通信(通过消息或事件)。
面向对象的分析与设计(OOA&D)方法 • Booch方法:包含“微开发过程”和“宏开发过程”两个过程, Booch 的OOA 宏观开发过程概述如下: • 标识类和对象; • 标识类和对象的语义; • 标识类和对象间的关系; • 进行一系列精化; • 实现类和对象。
Coad/Yourdon方法:经常被视为最容易学习的OOA 方法之一。建模符号相当简单且开发分析模型的指引是直接明了的。 过程如下: • 使用“寻找什么(what to look for)”标准来标识对象 • 定义一般—特殊结构 • 定义整体—部分结构 • 标识主题(子系统构件的表示) • 定义属性 • 定义服务
Jacobson 方法:也称为OOSE(面向对象软件工程),其特点是特别强调使用实例——用以描述用户和产品或系统间如何交互的场景。 过程概述如下: • 标识系统的用户和他们的整体责任 • 建造需求模型 • 建造分析模型
Rumbaugh方法:Rambaugh及其同事开发了用于分析、系统设计和对象级设计的对象建模技术(Object Modeling Technique,OMT)。 分析活动创建三个模型: • 对象模型(对象、类、层次和关系的表示); • 动态模型(对象和系统行为的表示); • 功能模型(高层的类似DFD 的时系统信息流的表示)。
Wirfs-Brock 方法:Wirfs-Brock 方法[WIR90]并没有明确地区分分析和设计任务,而是从对客户规约的估价到设计完成的一个连续过程。任务概述如下: • ·评估客户规约 • ·使用语法分析从规约中抽取候选类 • ·组合类以试图标识超类 • ·为每个类定义责任 • ·为每个类赋予责任 • ·标识类之间的关系 • ·定义类之间基于责任的协作 • ·构造类的层次表示以显示继承关系 • ·构造系统的协作图
虽然这些OOA方法的术语和过程步骤各有差异,但整体的OOA 过程是非常相似的。为了完成面向对象分析,软件工程师应该完成如下的分析过程: • 获取客户需求 • 标识场景或用例 • 使用基本的需求作为指南来选择类和对象 • 为每个系统对象标识属性和操作 • 定义组织类的结构和层次 • 建造对象—关系模型 • 建造对象—行为模型 • 根据用例/场景来评审OO分析模型
统一的OOA方法(UML) Booch、Rumbaugh和Jacobson将他们各自方法的最好特征组合成为一种统一方法,形成统一建模语言UML。
4.2分析建模 • 什么是模型? 现实世界某些重要方面的表示。有时使用术语 • 为什么要构建模型?为什么不直接构建系统本身? “答案是我们可以按照如下方式构建模型:突出或强调某些关键的系统特征,同时削弱系统的其他方面。”___Ed Yourdon
系统描述 分析模型 设计模型 分析模型是系统描述和设计模型之间的桥梁
4.3 Jocobson 方法 也称为OOSE(面向对象软件工程),该方法和其他方法的不同点是特别强调使用实例——用以描述用户和产品或系统间如何交互的场景。 Jocobson 的OOA 过程概述如下: • 标识系统的用户和他们的整体责任 • 建造需求模型 定义参与者(actor)和他们的责任 为每个参与者标识使用实例 准备系统对象和关系的初步视图 应用使用实例作为场景去复审模型以确定有效性
建造分析模型 使用参与者交互的信息来标识界面对象 创建界面对象的结构视图 表示对象行为 分离出每个对象的子系统和模型 使用使用实例作为场景去复审模型以确定合法性
OOA 过程并不是从考虑对象开始,而是从理解系统的使用方式开始,如果系统是人机交互的,则考虑被人使用的方式;如果系统是涉及过程控制的,则考虑被机器使用的方式;或者如果系统协调和控制应用,则考虑被其他程序使用的方式。定义了使用场景后,即开始软件的建模过程。 需求收集总是任何软件分析活动的第一步。基于这些需求,软件工程师(分析员)可以创建一组场景,每个场景标识系统的一个使用序列。场景,经常称为用例,描述系统将如何运作。 为了创建用例,分析员必须首先标识使用该系统或产品的不同类型的人(或设备),这些参与者(actor)真实地代表了当系统运行时人(或设备)所扮演的角色,更正式地定义,参与者是存在于系统之外和系统或产品通信的任何事物。
4.4 Coad与Yourdon面向对象分析 Coad 和Yourdon 方法经常被视为最容易学习的OOA 方法之一。建模符号相当简单且开发分析模型的指引是直接明了的。 过程概述如下: • 使用“寻找什么(what to look for)”标准来标识对象 • 定义一般—特殊结构 • 定义整体—部分结构 • 标识主题(子系统构件的表示) • 定义属性 • 定义服务
OOA概念模型 • 通过OOA建立的系统模型是以对象概念为中心的,因此称为概念模型。 • 这样的模型由一组相关的类组成。 • 软件规格说明就是基于这样的概念模型形成的,以模型描述为基本部分,再加上接口要求、性能限制等其它方面的要求说明。
构造OOA概念模型的层次 • 构造和评审OOA概念模型的顺序由五个层次组成。 • 这五个层次是分析过程中的层次。 • 每个层次的工作都为系统的规格说明增加了一个组成部分。 • 这五个层次是:类与对象、属性、服务、结构和主题。
类名 属性 服务
面向对象分析的第一个层次主要是识别类和对象。面向对象分析的第一个层次主要是识别类和对象。 • 类和对象是对与应用有关的概念的抽象。不仅是说明应用问题的重要手段,同时也是构成软件系统的基本元素。 • 这一层工作是整个分析模型的基础。 1. 识别类和对象
选择类和对象的原则 • 对象的属性应当是系统所关心的,或是系统正常运行所必需的。 • 类和对象应当提供某些服务或处理 • 对象应当具有多个有意义的属性。仅有一个属性的对象最好表示为其他对象的属性。 • 所有属性对于类中所有实例都应有意义 • 对象类应表示问题论域的需求
选择类和对象的方法 • 找出候选的类和对象 • 客观事物分为五类 • 可感知的物理实体,如:房屋,汽车等。 • 人或组织的角色,如:教师,计算机系等。 • 应该记忆的事件,如:演出,交通事故等。 • 两个或多个对象的相互作用,通常带有交易或接触的性质,如购买,教学等。 • 需要说明的概念,如:保险法,政策等 • 基于语言的信息分析 • 筛选出正确的类和对象
例:公共习题库管理系统。功能需求是: • 教师可以向题库系统添加新的习题及其标准答案。 • 教师可以从题库中选取一组习题,作为学生作业,或者作为考试题,并在适当时间公布答案。 • 学生可以在系统中完成教师布置的作业,也可以自主练习。 • 教师可以通过系统检查学生的作业,学生也可以在教师公布答案后自己检查作业。 • 系统对题库进行管理,对教师和学生的权限进行设置:只有本课程教师可以添加和修改习题,并指定哪些习题答案可以公开,何时公开。
教师 学生 习题板 练习本 题库服务器 班级 考试板 习题 题库管理系统(类与对象层)
标识属性 • 对象所保存的信息称为它的属性, 通常把它们封装在对象内部。 • 类的属性所描述的是状态信息,每个实例的属性值表达了该实例的状态值。
标识属性的方法和策略 • 按一般常识这个对象应该有哪些属性; • 在当前问题域中这个对象应该有哪些属性; • 根据系统责任要求,这个对象应该有哪些属性; • 建立这个对象是为了保存和管理哪些信息; • 对象为了在服务中实现其功能,应该有哪些属性; • 对象有哪些需要区别的状态,是否需要增加一个属性来区别这些状态;
属性的审查与筛选 • 属性必须是以系统责任为目标的抽象(提供有用信息)。 • 属性必须描述对象的本身特征。 • 对象的导出属性应当略去。 • 仅有一个属性的对象可以标识为其它对象的属性。 • 这个属性是否可以通过继承得到,特殊类中不重复一般类的属性;
定义服务 • 对象收到消息后所能执行的操作称为它可提供的服务。 • 对每个对象和结构的增加、修改、删除、选择等服务有时是隐含的,在图中不标出,但在存储类和对象有关信息的对象库中有定义。 • 其它服务则必须显式地在图中画出。
学生 姓名 学号 班级 练习 习题解答 题目 解答 标准答案 答题 班级 班级名称 学生名单 教师名单 题库服务器 权限表 题库索引 ... 题库管理 权限检查 习题入库 习题选取 教师 姓名 教学任务 ... 工作 习题板 习题组 所属课程 布置时间 完成期限 通知 选题 查阅题目 公布答案 查阅答案 练习本 使用者 课程名 习题解答 取作业题 核对答案 检查作业 自选题目 考试板 分数分布 答卷 收卷 阅卷 习题 编号 题目内容 标准答案 所属课程 难度系数 题目编写 答案编写 习题入库 题库管理系统(属性服务层)
标识结构 • 典型的结构 • 一般化-特殊化结构(Gen-Spec结构) • 整体-部分结构(Whole-Part结构)
文章 发表的文章 接受的文章 一般化-特殊化结构
以特殊化的视点来看,一个Gen-Spec结构可以看作是“is a”或“is a kind of”结构。例如, a Truck Vehicle is a Vehicle a Truck Vehicle is a kind of Vehicle • 在Gen-Spec结构中,使用继承将较一般化的属性和服务放在一般化的类和对象中。
如何发现一般—特殊结构 • 学习当前领域的分类知识分类学是一门学问,很多行业已经形成一套科学的分类方法。例如:动物分类学、图书分类学。 • 按常识考虑事物的分类从不同的角度考虑事物的分类。 例如:人员的分类:男、女;黄、白、黑种人; 干部、工人;股东、职员。
公司人员 姓名 ID 股东 股份 职员 工资 公司人员 姓名 ID 股份? 工资? • 考察类属性与服务 • 看一个类的属性或服务是否适合这个类的全部对象,如果适合部分对象应从该类中划分出一些特殊类。
股东 姓名 ID 股份 职员 姓名 ID 工资 公司人员 姓名 ID 股东 股份 职员 工资 • 看两个或多个类是否含有相同的属性和服务,将其公共的属性的服务提取出来,构成一般类。
收款机 A B C X Y 现钞收款机 A B C D X Y Z 现钞收款机 D Z • 考虑领域范围内的复用
报社 1 m 1 1 采访组 编辑室 印刷厂 整体-部分结构
从整体的视点来看,一个Whole-Part结构可看作一个“has a”或“is a part of”结构。例如, Vehicle has a Engine Engine is a part of Vehicle • 其中,Vehicle是整体对象,Engine是局部对象。
如何发现整体—部分结构 • 物理上的整体与部分机器---零件 • 组织机构和它的下级机构公司---部门 • 团体与成员班级—学生 • 空间上的包容厂房—机器 • 抽象事物的整体和部分学科---分支学科
汽车 制冷设备 冷藏车 汽车 冷藏车 制冷设备 冷藏车 汽车 制冷设备 一般—特殊结构和整体—部分结构 • 区别 • 整体—部分结构:描述对象的组成关系。 • 一般—特殊结构:描述对象之间的继承关系。 • 联系:有些情况下,二者可以互相变通的。
1 1 类A 连接名称 m n 1 m 类B m n 实 例 连 接 • 概念:用于表达对象之间的静态联系,即最终可通过对象属性来表示的一个对象对另一个对象的依赖关系。 • 表示法
教师 课程 教师 课程 1 1 m n 讲课任务 主讲教师 课程 n m 多对多的关联的改进 • 改进方法:引入“互交实体”的第三个实体实例,将一个多对多的关联转换成两个一对多的关系。 一个教师可以完成多个讲课任务,但一个讲课任务只有一个教师去完成。
消 息 连 接 • 消息是一个对象向另一个对象发出的服务请求。 • 消息的分类 • 发送对象激活接收对象; • 发送对象传送信息给接收对象; • 发送对象询问接收对象; • 发送对象请求接收对象提供服务。
消息连接OOA或OOD模型中对对象之间行为依赖关系的表示。消息连接OOA或OOD模型中对对象之间行为依赖关系的表示。 • 消息连接表示从一个对象发送消息到另一个对象,由那个对象完成某些处理。 • 表示法用箭头表示方向从发消息的对象指向收消息的对象。
题库服务器 权限表 题库索引 ... 题库管理 权限检查 习题入库 习题选取 教师 姓名 教学任务 ... 工作 1 m 习题板 习题组 所属课程 布置时间 完成期限 通知 选题 查阅题目 公布答案 查阅答案 习题 编号 题目内容 标准答案 所属课程 难度系数 题目编写 答案编写 习题入库
找出消息连接的方法及策略 • 对于每一个对象,执行: • 查询该对象需要哪些对象的服务,从该对象画一箭头到哪个对象; • 查询哪个对象需要该对象的服务,从那个对象画一箭头到该对象; • 循消息连接找到下一个对象,重复以上步骤。