《软件工程》
7.2.2 面向对象的分析 面向对象的分析(OOA)方法是相当于软件开发过程中的问题定义和需求分析阶段,它是用面向对象的概念和方法为软件需求建造模型,分析的过程是提取和确定系统需求的过程。 面向对象分析的需求规格说明主要包括三种模型:对象模型、动态模型和功能模型。在面向对象方法中,类、对象和事物等概念之间的关系如图3.3.7所示。
1.面向对象分析过程 (1)分析过程概述 分析过程就是提取系统的需求的过程,是指为了满足用户的需求,系统必须“做什么”,而不是“怎么做”(系统如何实现)。系统分析通常是从一个需求文档(陈述)和用户一系列的讨论开始的。一般来说,由用户、领域专家、系统的开发者以及其他有关人员参加制定需求文档。 首先,系统分析员要对需求文档进行分析。需求文档通常是不完整、不准确的,也可能还是非正式的。通过分析可以发现和改正需求文档中的歧义性、不一致性,剔除冗余的内容,挖掘潜在的内容,弥补不足,从而使需求文档更完整、更准确。快速地建立一个原型系统,通过在计算机上运行原型系统,使得分析员和用户尽快交流和相互理解,从而能更正确地、更完整地提取和确定用户的需求。
然后,是需求建模。系统分析员根据提取的用户需求,深入理解用户需求,识别出问题域内的对象,并分析它们相互之间的关系,抽象出目标系统应该完成的需求任务,并用OOA模型准确地表示出来,即用面向对象观点建立对象模型、动态模型和功能模型。 最后,是需求评审。通过用户、领域专家、系统分析员和系统设计人员的评审,并进行反复修改后,确定需求规格说明。 (2)面向对象分析的三个模型与五个层次 面向对象分析的三个模型: 面向对象分析的模型包括:对象模型、动态模型和功能模型。对象模型描述了系统的静态结构;动态模型描述了系统的交互次序;功能模型描述了系统的数据变换。 其中,对象模型是最基础的、最核心的、最重要的。无论解决什么问题,首先要在问题域中提取和定义出对象模型。
当问题涉及用户界面与过程控制时,动态模型是重点。如果问题涉及大量数据变换,则功能模型非常重要。对象模型中的操作(即服务)可以出现在动态模型和功能模型内。 2) 面向对象分析的五个层次 面向对象分析由五个主要活动组成,即确定类-&-对象、识别结构、识别主题、定义属性和定义服务(方法)。对于一个复杂问题的面向对象的模型可用五个层次表示:类-&-对象层、结构层,主题层、属性层和服务层,见图3.3.8。
主题(Subject)层:主题给出分析模型的总体概貌,是控制读者在同一时间所能考虑的模型规模的机制。 类-&-对象(Class & Object)层:对象是数据及其处理的抽象。它反映了保存有关信息和与现实世界交互的能力。 结构(Structure)层:结构表示问题域的复杂性。类 - 成员结构反映了一般-特殊关系,整体 - 部分结构反映了整体 - 部分的关系。 属性(Attribute)层:属性是数据元素,用来描述对象或分类结构的实例,可在图中给出并在对象的储存中指定,即给出对象定义的同时,指定属性。 服务(Serves)层:服务是接收到消息后必须执行的一些处理,可在图上标明它并在对象的储存中指定,即给出对象定义的同时,定义服务。
3) 五个层次对应的五个活动 五个主要活动可以同时(并行)处理;可以从较高抽象层转移到较低的具体层,然后再返回到较高抽象层继续处理;当系统分析员在确定类-&-对象的同时,想到该类的服务,则可以先确定服务后,再返回去继续寻找类-&-对象;没有必要遵循自顶向下,逐步求精的原则。 4) 面向对象分析流程 一般情况下,面向对象分析过程可按照下列流程进行:确定类—&—对象、识别结构、识别主题、定义属性、建立动态模型、建立功能模型、定义服务(方法)。但是,对于大型的、复杂的问题,不可能严格按照上面流程进行,需要反复多次进行寻找、确定、识别、建立和定义来构造模型。
2.面向对象建模 (1)建模与模型 建模是将问题域的解空间定义成一种模型,以帮助系统分析人员更好地理解问题。 模型是为了理解问题而对问题所做出的一种抽象,而且是对问题的一种无歧义的描述。模型由一组图示符号和组织这些符号的规则组成。利用它们来定义和描述问题域中的术语和概念。 建模的目的主要是为了减少复杂性。 (2)面向对象模型 用面向对象方法开发软件,通常需要建立对象模型、动态模型和功能模型三种模型。对象模型是描述系统数据结构的;动态模型是描述系统控制结构的;功能模型是描述系统功能的。
数据、控制和操作等是这三种模型都涉及到的共同概念,只不过是各自描述的侧重点不同罢了。一个典型的软件系统应包含数据结构(对象模型)、执行操作(动态模型)和完成数据值的变化(功能模型)。 3.常用的面向对象分析与设计模型 常用的面向对象分析与设计模型有四类: ● James Rumbaugh 等人的 OMT 模型; ● Coad 和 Yourdon 的模型; ● Booch 开发模型; ● UML 统一建模语言(在3.4节专门介绍)。
Rumbaugh的对象模型化技术OMT (object modeling technique) 对象模型化技术的三类模型:对象模型、动态模型和功能模型。 这个模型化的过程是一个迭代过程通过不断更新、细化,直到切合系统真正需求为止。。 动态模型 对象模型 功能模型
1. 对象模型 是三个模型中最关键的一个模型,它的作用是描述系统的静态结构,包括构成系统的类和对象,它们的属性和操作,及它们之间的关系。 在OMT中,类与类之间的关系叫做关联。关联代表一组存在于两个或多个对象之间的,具有相同结构和含义的具体连接。关联可以是物理的,也可以是逻辑的。
类 类的实例 类定义示例 类名 自动售货机 (类名) 属性值 饮料编号 价格 属性 操作 投入货币 送出饮料 显示金额 按下按钮 按退币杆 显示售完
(0个或1个) (0个或多个) (1个或多个) (1~2个或4个) 聚合,代表整体与部分的关系,这是一种特殊形式的关联。 菱形框 表示整体侧对象 限定,用以对关联的含义做某种约束。 角色,用来说明关联的一端。由于多数关联具有两个端点,因而涉及到两个角色。 附加的:说明对象之间的连接属性。 (0个或1个) (0个或多个) 1+ (1个或多个) 12,4 (1~2个或4个)
整体 部分 段落 句子 聚合 类A 类B 限定词 目录 文件 文件名 限定 类A 角色 类B 公司 名字 个人 工作 职务 工资 雇主 雇员
泛化关联(继承性) 派生类A 基类
金额计算器 金额 累加 找零 重置 自动售货机 饮料编号 价格 投入硬币 送出饮料 显示金额 按下按钮 按退币杆 显示售空 存量计算器 递减 退币杆 退币杆状态 顾客 姓名 硬币 取出饮料 选择按钮 按钮状态 按钮灯亮 按钮灯灭 售空灯亮 顾客按 购买 下按钮 属于
对系统的词汇建模(即建类图): 例:建立对象模型:P141 1、确定类----即标出来自问题域的相关的对象类,如下图所示: 排除假的类 选取名词 需求说明 类 暂定的类 从中去掉冗余类、不相干的类、模糊类、属性及操作。 2、准备数据字典:准确描述类的含义及范围(成员等)。 3、确定关联:常用描述性动词(或词组)表示。 4、确定属性:属性是个体对象的性质,常用修饰性的名词词组表示。 5、使用继承来细化类:指将现有类细化出父类及具体的子类。 6、完善类模型图(或对象模型图)
实例 设计支持银行网络的软件,银行网络包括出纳站和分行共享的自动出纳机。每个分析通信,出纳站录入用户和事务数据;自动出纳机与分行计算机通信,分行计算机与拨款分理处结帐,自动出纳机与用户接口接受现金卡,与分行计算机通信完成事务,发放现金,打印收据;系统需要记录保管和安全措施;系统必须正确处理同一账户的并发访问;每个分理处为自已的计算机准备软件,银行网络费用根据顾客和现金卡的数目分摊给各分理处。 出纳站 自动出纳机 分行计算机 分理处 计算机 账户 ……
[注意]对象之间的关联常用动词(词组)表示 出纳员 自动出纳机 分行 分行计算机 分理处 账户 顾客 现金卡 出纳事务 出纳站 远程事务 组成 所 有 通 信 雇用 访问 涉及 认可 录入 [注意]对象之间的关联常用动词(词组)表示 对象图
图3.3.16 某社区卫生综合管理系统的对象模型(一)
状态图 2. 动态模型 状态图是一个状态和事件的网络,侧重于描述每一类对象的动态行为。 动态模型着重于系统的控制逻辑,它包括两个图,一是状态图,一是事件追踪图。 状态图 状态图是一个状态和事件的网络,侧重于描述每一类对象的动态行为。 状态A 活动 状态B 状态A / 操作 事件B [条件] 起始状态 终结状态
取出饮料 结算找零 扣减存量 完成交易 显示售 货机就 绪,所 有灯灭 显示 金额 总数 饮料 售空 灯亮 显示总 额已够 饮料选 择灯亮 投入硬币 (有效的) 规定金额 金额不足 再投币 按下 选择 按钮 回到就绪状态 取消 无效硬币
事件追踪图 事件追踪图侧重于说明发生于系统执行过程中的一个特定“场景”。 场景也叫做脚本,是完成系统某个功能的一个事件序列。 场景通常起始于一个系统外部的输入事件,结束于一个系统外部的输出事件,它可以包括发生在这个期间的系统所有的内部事件。
自动售货机售货脚本(事件序列) 顾客投入硬币 自动售货机计算并显示金额 顾客持续投入硬币直到足够的金额 自动售货机选择按钮灯亮 顾客选择饮料种类并按下选择按钮 自动售货机送出相应饮料并结算、找零 自动售货机扣除该饮料的存量 如自动售货机该饮料有存货,回到初始状态 如自动售货机该饮料无存货,显示该饮料“售空”灯亮,不再接受选择,回到初始状态 自动售货机售货脚本(事件序列)
顾客 售货机 金额计算器 选择按钮 存量计算器 售空灯 投入硬币 累加 总额 显示总额 金额足够 灯亮 选择按钮 按下按钮 送出饮料 结算 余额 找零 扣减存量 存量为零
3. 功能模型 顶层数据流图 功能模型由数据流图组成,指明从外部输入到外部输出,数据在系统中传递和变换的情况。 自动 顾客 售 货机 输入:投币、按选 择按钮、取消交易 输出饮料 投币金额 显示屏 选择按 钮灯 售空灯 显示投 币金额 钮灯亮 售空灯亮 顶层数据流图
数据流图 顾客 投入 按下选 硬币 择按钮 饮料按 钮灯亮 判断何 种饮料 判断 存量为 零否 饮料编号 存量非零 存量为零 计算 售空 扣减存量 找零 存量非零 送出饮料 售空 灯亮 存量为零 数据流图
1. 面向对象分析的概念模型 Coad 与 Yourdon 的分析 通过面向对象分析建立的系统模型是以概念为中心的,因此称为概念模型。 这样的模型由一组相关的类组成。 构造和评审面向对象分析概念模型的顺序和由五个层次组成,即类与对象、属性、服务、结构和主题。
类与对 象层 属性层 服务层 结构层 主题层 主题 服务 消息 属性 实例连接 类边界 实例边界
(聚合关系)
图3.3.20 某社区卫生综合管理系统的对象模型(二)
Booch 开发模型 在Booch方法中,用于说明系统要求的表示方法和手段非常丰富,相当灵活。 下面列出了几种基本的类与类之间的关系图示(图3.3.21):
小结: 1、掌握OOA的三种模型和五个层次。 2、掌握对象模型三种不同方法的建模方法。
作业: P171 三、1,2,3
谢谢使用 本课件!