第10章---面向对象分析

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

确定类与对象
非正式分析
把陈述中的名词作为类与对象的候选者。 形容词作为确定属性的线索, 动词作为服务(操作)的候选者。
银行,自动取款机(ATM),系统,中央计算机, 分行计算机,柜员终端,网络,总行,分行, 软件,成本,市,街道,营业厅,储蓄所,柜 员,储户,现金,支票,账户,事务,现金兑 换卡,余额,磁卡,分行代码,卡号,用户, 副本,信息,密码,类型,取款额,账单,访 问。
UML9大视图
用例图 状态图 活动图 顺序图 交互图 部署图 类图 对象图 组件图
建立动态模型
第一步,是编写典型交互行为的脚本。 第二步,从脚本中提取出事件,确定触发每个 事件的动作对象以及接受事件的目标对象。 第三步,排列事件发生的次序,确定每个对象 可能有的状态及状态间的转换关系,并用状态 图描绘它们。 最后,比较各个对象的状态图,检查它们之间 的一致性,确保事件之间的匹配。
• (1) 误把对象当作属性
– 例如,在邮政目录中,“城市”是一个属性,而在人 口普查中却应该把“城市”当作对象。
• (2) 误把关联类的属性当作一般对象的属性
确定属性
(3) 把限定误当成属性
“分行代码”、“账号”、“雇员号”、 “站号”等都是限定词。
(4) 误把内部状态当成了属性 (5) 过于细化 (6) 存在不一致的属性 经过筛选之后,得到ATM系统中各个类 的属性,如图10.4(见书235页)所示。
图10.3 ATM系统原始的类图
划分主题
为了降低复杂程度,系统可以再进一步 划分成几个不同的主题。 ATM系统:可以把它划分成总行(包含 总行和中央计算机这两个类)、分行 (包含分行、分行计算机、柜员终端、 柜员事务、柜员和账户等类)和ATM (包含ATM、远程事务、现金兑换卡和 储户等类)等3个主题。
确定关联
(5) 派生关联
去掉可以用其他关联定义的冗余关联。
• “总行拥有多台ATM”实质上是“总行拥有中央 计算机”和“ATM与中央计算机通信”这两个关 联组合的结果。 • 而“分行计算机维护账户”的实际含义是“分行 保管账户”和“事务修改账户”。
确定关联
3. 进一步完善
(1) 正名
• 仔细选择含义更明确的名字作为关联名。 • 例如,“分行提供分行计算机和柜员终端”不如 改为“分行拥有分行计算机”和“分行拥有柜员 终端”。
事件包括系统与用户(或外部设备)交互的所 有信号、输入、输出、中断、动作等等。
表10.1和表10.2(见书240页)分别给出 了ATM系统的正常情况脚本和异常情况 脚本。
设想用户界面
交互行为:
分为应用逻辑和用户界面两部分。
同样的程序逻辑可以采用不同界面(例如, 命令行或图形用户界面)。
图10.7 ATM的界面格式
画事件跟踪图
用自然语言书写的脚本往往不够简明。 1. 确定事件
面向对象分析的基本过程
概述
面向对象分析,就是抽取和整理用户需求并 建立问题域精确模型的过程。 通过分析,可以发现和改正原始陈述中的二 义性和不一致性。 注意:
• 快速建立原型系统。 • 系统分析员必须认真向领域专家学习。 • 仔细研究以前相同的或类似的问题域。
面向对象分析的基本过程
3个子模型与5个层次
确定关联
(2) 需求陈述中隐含的关联 总行由各个分行组成。 分行保管账户。 总行拥有中央计算机。 系统维护事务日志。 系统提供必要的安全性。 储户拥有现金兑换卡。 (3) 根据问题域知识得出的关联 现金兑换卡访问账户。 分行雇用柜员。
确定关联
2. 筛选
(1) 已删去的类之间的关联
• 如: “系统”、“网络”、“市”、“街道”、“成本”、 “软件”、“事务日志”、“现金”
一个事务包含对账户的若干次更新, 如(取 款、存款或查询)。
3. 把“分行”与“分行计算机”合并 参见图10.6(见书238页)
第十章面向对象分析
10.1 10.2 10.3 10.4 10.5 10.6 面向对象分析的基本过程 需求陈述 建立对象模型 建立动态模型 建立功能模型 定义服务

建立动态模型
确定类与对象
2. 筛选出正确的类与对象
筛选标准
• (1) 冗余-----两个类表达了同样的信息 • (2) 无关--仅需要把与本问题密切相关的类与 对象放进目标系统中。 • (3) 笼统 • (4) 属性--有些名词实际上描述的是其他对象 的属性。 • (5) 操作--有时可能使用一些既可作为名词, 又可作为动词的词 • (6) 实现--不应该过早地考虑怎样实现目标系 统
3个子模型:静态结构(对象模型)、交互次 序(动态模型)和数据变换(功能模型) 5个层次(复杂问题的对象模型):
• 主题层 • 类与对象层 • 结构层 • 属性层 • 服务层
图10.1 复杂问题的对象模型的5个层次
面向对象分析的基本过程
上述5个层次对应着建立对象模型的5项 主要活动:
找出类与对象,识别结构,识别主题,定义 属性,定义服务。
书写要点:
• 阐明“做什么”而不是“怎样做”。 • 避免对设计策略施加过多的约束,也不要描述系统的内部 结构。 • 需求陈述可简可繁。熟悉的传统问题可能详细,陌生领域 可能简单。 • 系统分析员必须与用户及领域专家密切配合协同工作,共 同提炼和整理用户需求。
需求陈述
2、例子
某银行拟开发一个自动取款机系统,它是一 个由自动取款机、中央计算机、分行计算机 及柜员终端组成的网络系统。ATM和中央计 算机由总行投资购买。总行拥有多台ATM, 分别设在全市各主要街道上。分行负责提供 分行计算机和柜员终端。柜员终端设在分行 营业厅及分行下属的各个储蓄所内。该系统 的软件开发成本由各个分行分摊。
编写脚本
脚本:原意是指“表演戏曲、话剧,拍 摄电影、电视剧等所依据的本子,里面 记载台词、故事情节等”。 在动态模型中,脚本是指系统在某一执 行期间内出现的一系列事件。 编写脚本的目的:
保证不遗漏重要的交互步骤
编写脚本
如何编写脚本:
首先编写正常情况的脚本。然后,考虑特殊 情况;最后,考虑出错情况。
确定类与对象
(1) 冗余
ATM例:储户与用户,现金兑换卡与磁卡及 副本分别描述了相同的两类信息
银行,自动取款机(ATM),系统,中央计算机,分行计算机, 柜员终端,网络,总行,分行,软件,成本,市,街道,营 业厅,储蓄所,柜员,储户,现金,支票,账户,事务,现 金兑换卡,余额,磁卡,分行代码,卡号,用户,副本,信 息,密码,类型,取款额,账单,访问。
确定类与对象
(3) 笼统
如“银行”、“网络”、“系统”、“软件”、 “信息”、“访问”等
(4) 属性
如:“现金”、“支票”、“取款额”、“账单”、 “余额”、“分行代码”、“卡号”、“密码”、 “类型”等
(5) 操作
本身具有属性需独立存在的操作,应该作为类与对 象。
(6) 实现
如:“事务日志”, “通信链路”
1、确定对象类和关联 2、类和关联增添属性 3、利用适当的继承关系进一步合并和组织类。 4、最后确定类操作
确定类与对象
1. 找出候选的类与对象
大多数客观事物可分为5类:
• (1) 可感知的物理实体,例如,飞机、汽车、书、房 屋等等。 • (2) 人或组织的角色,例如,医生、教师、雇主、雇 员、计算机系、财务处等等。 • (3) 应该记忆的事件,例如,飞行、演出、访问、交 通事故等等。 • (4) 两个或多个对象的相互作用,通常具有交易或接 触的性质,例如,购买、纳税、结婚等等。 • (5) 需要说明的概念,例如,政策、保险政策、版权 法等等。
图10.2 ATM系统
第十章面向对象分析
10.1 10.2 10.3 10.4 10.5 10.6 面向对象分析的基本过程 需求陈述 建立对象模型 建立动态模型 建立功能模型 定义服务

建立对象模型
需求陈述、应用领域的专业知识以及关于客观 世界的常识,是建立对象模型时的主要信息来 源。 典型的工作步骤:
确定属性
一般说来,确定属性的过程包括分析和 选择两个步骤。 1. 分析
通常,在需求陈述中用名词词组表示属性, 例如,“汽车的颜色”或“光标的位置”。 但,不可能在需求陈述中找到所有属性,还 必须藉助于领域知识和常识。 仅考虑与具体应用直接相关的属性
确定属性
2. 选择
认真考察经初步分析而确定下来的那些属性, 从中删掉不正确的或不必要的属性。 常见情况:
一般步骤
寻找类与对象,识别结构,识别主题,定义 属性,建立动态模型,建立功能模型,定义 服务。
第十章面向对象分析
10.1 10.2 10.3 10.4 10.5 10.6

面向对象分析的基本过程 需求陈述 建立对象模型 建立动态模型 建立功能模型 定义服务
需求陈述
1、书写要点
需求陈述的内容:
• 问题范围,功能需求,性能需求,应用环境及假设条件等。
(2) 分解
• 例如,在ATM系统中,应该把“事务”分解成 “远程事务”和“柜员事务”。
确定关联
(3) 补充
例如,在ATM系统中把“事务”分解成上述 两类之后,需要补充“柜员输入柜员事务”、 “柜员事务输进柜员终端”、“在ATM上输 入远程事务”和“远程事务由现金兑换卡授 权”等关联。
(4) 标明重数
(2) 与问题无关的或应在实现阶段考虑的关联
• 如: “系统处理并发的访问”
(3) 瞬时事件
• 关联应该描述问题域的静态结构,而不应该是一个瞬时事 件。 • 如: “ATM读现金兑换卡”
确定关联
(4) 三元关联
三个或三个以上对象之间的关联,大多可以 分解为二元关联或用词组描述成限定的关联。
• “柜员输入针对账户的事务”可以分解成“柜员 输入事务”和“事务修改账户”这样两个二元关 联。 • “ATM与中央计算机交换关于事务的信息” , 隐含了“ATM与中央计算机通信”和“在ATM上 输入事务”这两个二元关联。
确定类与对象
(2) 无关
如:“成本”、“市”、“街道”、“营业 厅”和“储蓄所”
银行,自动取款机(ATM),系统,中央计算机,分行计算机, 柜员终端,网络,总行,分行,软件,成本,市,街道,营 业厅,储蓄所,柜员,储户,现金,支票,账户,事务,现 金兑换卡,余额,磁卡,分行代码,卡号,用户,副本,信 息,密码,类型,取款额,账单,访问。
确定类来自百度文库对象
经过初步筛选,剩下下列类与对象: ATM、中央计算机、分行计算机、柜员 终端、总行、分行、柜员、储户、账户、 事务、现金兑换卡。
确定关联
两个或多个对象之间的相互依赖、相互 作用的关系就是关联。 不必花过多的精力去区分关联和聚集。
确定关联
1. 初步确定关联
在需求陈述中使用的描述性动词或动词词组, 通常表示关联关系。 通过分析需求陈述,还能发现一些在陈述中 隐含的关联。
第十章面向对象分析

10.1 10.2 10.3 10.4 10.5 10.6
面向对象分析的基本过程 需求陈述 建立对象模型 建立动态模型 建立功能模型 定义服务
概述
面向对象分析工作主要包括3项内容:理 解、表达和验证。 分析过程的文档资料:软件需求规格说 明。 面向对象分析(OOA)的关键是识别出问题 域内的类与对象并建立起对象模型。
识别继承关系
自顶向下
把现有类细化成更具体的子类,模拟了人类 的演绎思维过程。 例如,带有形容词修饰的名词词组往往暗示 了一些具体类。
图10.5(见书237页)是增加了继承关系 之后的ATM对象模型。
反复修改
1. 分解“现金兑换卡”类
把“现金兑换卡”类分解为“卡权限”和 “现金兑换卡”两个类。
2. “事务”由“更新”组成
识别继承关系
实质上是知识抽取过程 一般说来,可以使用两种方式建立继承 (即泛化)关系:
(1) 自底向上 (2) 自顶向下
识别继承关系
自底向上
抽象出现有类的共同性质泛化出父类,实质 上模拟了人类归纳思维过程。 例如,在ATM系统中,“远程事务”和“柜 员事务”是类似的,可以泛化出父类“事 务”;类似地,可以从“ATM”和“柜员终 端”泛化出父类“输入站”。
确定关联
(1) 直接提取动词短语得出的关联 ATM、中央计算机、分行计算机及柜员终端组成网络。 总行拥有多台ATM。 ATM设在主要街道上。 分行提供分行计算机和柜员终端。 柜员终端设在分行营业厅及储蓄所内。 分行分摊软件开发成本。 储户拥有账户。 分行计算机处理针对账户的事务。 分行计算机维护账户。…
相关文档
最新文档