软件工程导论第10章

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第10章 面向对象分析
10.1 10.2 10.3 10.4 10.5 10.6 10.7 面向对象分析的基本过程 需求陈述 建立对象模型 建立动态模型 建立功能模型 定义服务 小结
1
系统分析员通过与用户及领域专家的充分交流, 力求完全理解用户需求和该应用领域中的关键性的 背景知识,并用某种无二义性的方式把这种理解表 达成文档资料----软件需求规格说明。 面向对象分析(OOA)的关键是识别出问题域内 的类与对象,并分析它们相互间的关系,最终建立 起问题域的简洁、精确、可理解的正确模型。在用 面向对象观点建立起的对象模型、动态模型和功能 模型3种模型中,对象模型是最基本、最重要、最 核心的。
27
2. 筛选 根据下述标准删除候选的关联: (1) 已删去的类之间的关联 如:已经删去了“系统”、“网络”、“市”、 “街道”、“成本”、“软件”、“事务日志”、 “现金”、“营业厅”、“储蓄所”、“账单”等 候选类,因此下列8个关联也应该删去:
28
① ATM、中央计算机、分行计算机及柜员终端组 成网络。 ② ATM设在主要街道上。 ③ 分行分摊软件开发成本。 ④ 系统提供必要的安全性。 ⑤ 系统维护事务日志。 ⑥ ATM吐出现金。 ⑦ ATM打印账单。 ⑧ 柜员终端设在分行营业厅及储蓄所内。
15
10.3.1 确定类与对象
1. 找出候选的类与对象 对象是对问题域中有意义的事物的抽象, 它们既可能是物理实体,也可能是抽象概念。
16
大多数客观事物分为下述5类: (1) 可感知的物理实体,如,飞机、汽车、书、房 屋等。 (2) 人或组织的角色,如,医生、教师、雇主、雇 员、计算机系、财务处等。 (3) 应该记忆的事件,如,飞行、演出、访问、交 通事故等。 (4) 两个或多个对象的相互作用,通常具有交易或 接触的性质,如,购买、纳税、结婚等。 (5) 需要说明的概念,如,政策、保险政策、版权 法等。
19
2. 筛选出正确的类与对象 依据下列标准: (1) 冗余 如果两个类表达了同样的信息,则应该保留在此 问题域中最富于描述力的名称。 如:类储户与用户,去掉“用户” 类现金兑换卡与磁卡及副本,去掉 磁卡、副本。 (2) 无关 有些类与当前要解决的问题无关,应该把它们删掉。 如:ATM系统不处理分摊软件开发成本的问题, ATM和柜员终端放置地点与本软件关系也不大。 因此,应该去掉候选类“成本”、“市”、“街 道”、“营业厅”和“储蓄所”。
9
图10.2 ATM系统
10
银行柜员使用柜员终端处理储户提交的储蓄事务。 储户可以用现金或支票向自己拥有的某个账户内存 款或开新账户。储户也可以从自己的账户中取款。 通常,一个储户可能拥有多个账户。柜员负责把储 户提交的存款或取款事务输进柜员终端,接收储户 交来的现金或支票,或付给储户现金。柜员终端与 相应的分行计算机通信,分行计算机具体处理针对 某个账户的事务并且维护账户。 拥有银行账户的储户有权申请领取现金兑换卡。使 用现金兑换卡可以通过ATM访问自己的账户。目 前仅限于用现金兑换卡在ATM上提取现金,或查 询有关自己账户的信息(如,某个指定账户上的余 额)。将来可能还要求使用ATM办理转账、存款等 事务。
22
(6) 实现 在分析阶段不应该过早地考虑怎样实现目标系统。 因此,应该去掉仅和实现有关的候选的类与对象。 如:“事务日志”是对一系列事务的记录,它的确 切表示方式是面向对象设计的议题;“通信链路” 在逻辑上是一种联系,在系统实现时它是关联类的 物理实现。应该暂时去掉 “事务日志”和“通信 链路”这两个类,在设计或实现时再考虑它们。 综上所述,在ATM系统中,经过初步筛选,剩下 下列类与对象:ATM、中央计算机、分行计算机、 柜员终端、总行、分行、柜员、储户、账户、事务、 现金兑换卡。
这5个层次很像叠在一起的5张透明塑料片,它们一层比一层显现出对 象模型的更多细节。在概念上,这5个层次是整个模型的5张水平切片。
通常在完整地定义每个类中的服务之前,需要先建立起动态模型和功 能模型,通过对这两种模型的研究,能够更正确更合理地确定每个类 应该提供哪些服务。
6
综上所述,在概念上可以认为,面向对象分析大体 上按照下列顺序进行:寻找类与对象,识别结构, 识别主题,定义属性,建立动态模型,建立功能模 型,定义服务。 注、分析不可能严格地按照预定顺序进行,大 型、复杂系统的模型需要反复构造多遍才能建成。 通常,先构造出模型的子集,然后再逐渐扩充,直 到完全、充分地理解了整个问题,才能最终把模型 建立起来。
(5) 操作 在需求陈述中有时可能使用一些既可作为名词,又 可作为动词的词,应该慎重考虑它们在本问题中的 含义,以便正确地决定把它们作为类还是作为类中 定义的操作。 如,谈到电话时通常把“拨号”当作动词,当构造 电话模型时确实应该把它作为一个操作。 在开发电话的自动记账系统时,“拨号”需要 有自己的属性(如日期、时间、受话地点等),应该 把它作为一个类。 总之,本身具有属性需独立存在的操作,应该作为 类与对象。
7
10.2 需求陈述
10.2.1 书写要点
需求陈述的内容包括:问题范围,功能需求, 性能需求,应用环境及假设条件等。 阐明“做什么”而不是“怎样做”。
8
10.2.2 例子
自动取款机(ATM)系统图10.2: 某银行拟开发一个自动取款机系统,它是一个由自 动取款机、中央计算机、分行计算机及柜员终端组 成的网络系统。ATM和中央计算机由总行投资购 买。总行拥有多台ATM,分别设在全市各主要街 道上。分行负责提供分行计算机和柜员终端。柜员 终端设在分行营业厅及分行下属的各个储蓄所内。 该系统的软件开发成本由各个分行分摊。
需求陈述、应用领域的专业知识以及关于客观世界 的常识,是建立对象模型时的主要信息来源。
14
对象模型通常有5个层次。典型的工作步骤是: 首先确定对象类和关联(它们影响系统整体结构和 解决问题的方法); 对于大型复杂问题还要进一步划分出若干主题; 给类和关联增添属性,以进一步描述它们; 利用适当的继承关系进一步合并和组织类; 建立动态模型; 建立功能模型; 对类中操作的确定(上述两个子模型更准确地描 述了对类中提供的服务的需求)。
18
*以ATM系统为例,说明非正式分析过程。 从10.2.2节给出的需求陈述中找出候选的类与对象: 银行,自动取款机(ATM),系统,中央计算机, 分行计算机,柜员终端,网络,总行,分行,软件, 成本,市,街道,营业厅,储蓄所,柜员,储户, 现金,支票,账户,事务,现金兑换卡,余额,磁 卡,分行代码,卡号,用户,副本,信息,密码, 类型,取款额,账单,访问。 分析员根据领域知识或常识进一步把隐含的类 与对象提取出来。例如,在ATM系统中应该包含 “通信链路”和“事务日志”这两个实体。
17
另一种更简单的分析方法----非正式分析: 以用自然语言书写的需求陈述为依据,把陈 述中的名词作为类与对象的候选者,用形容词作 为确定属性的线索,把动词作为服务(操作)的候 选者。用这种简单方法确定的候选者是非常不准 确的,其中往往包含大量不正确的或不必要的事 物,还必须经过更进一步的严格筛选。 通常,非正式分析是更详细、更精确的正式 的面向对象分析的一个很好的开端。
24
(1) 直接提取动词短语得出的关联 ATM、中央计算机、分行计算机及柜员终端组成 网络。 总行拥有多台ATM。 ATM设在主要街道上。 分行提供分行计算机和柜员终端。 柜员终端设在分行营业厅及储蓄所内。 分行分摊软件开发成本。 储户拥有账户。 分行计算机处理针对账户的事务。 分行计算机维护账户。
13
10.3 建立对象模型
面向对象分析首要工作,是建立问题域的对象模型。
这个模型描述了现实世界中的“类与对象”以及它们之间 的关系,表示了目标系统的静态数据结构。静态数据结构 对应用细节依赖较少,比较容易确定;当用户的需求变化 时,静态数据结构相对来说比较稳定。因此,用面向对象 方法开发绝大多数软件时,都首先建立对象模型,然后再 建立另外两个子模型。
20
(3) 笼统 在需求陈述中常常使用一些笼统、泛指的名词,通 常把这些笼统的或模糊的类去掉。 如:“银行”实际指总行或分行,“访问”在这里 实际指事务,“信息”的具体内容在需求陈述中随 后指明等。在本例中应该去掉“银行”、“网络”、 “系统”、“软件”、“信息”、“访问”等候选 类。 (4) 属性 在需求陈述中有些名词实际上描述的是其他对象的 属性,应该把这些名词从候选类与对象中去掉。 如:“现金”、“支票”、“取款额”、“账单”、 “余额”、“分行代码”、“卡号”、“密码”、 “类型”等,都应该作为属性对待。 21
23
10.3.2 确定关联
两个或多个对象之间的相互依赖、相互作用的关系。 1. 初步确定关联 初步确定关联时,大多数关联可以通过直接提取 需求陈述中的动词词组得出。 通过分析需求陈述,发现一些陈述中隐含的关联。 最后,分析员还应该与用户及领域专家讨论问题 域实体间的相互依赖、相互作用关系,根据领域知 识进一步补充一些关联。 以ATM系统为例,经过分析初步确定下列关联:
11
所谓现金兑换卡就是一张特制的磁卡,上面有分行 代码和卡号。分行代码惟一标识总行下属的一个分 行,卡号确定了这张卡可以访问哪些账户。通常, 一张卡可以访问储户的若干个账户,但是不一定能 访问这个储户的全部账户。每张现金兑换卡仅属于 一个储户所有,但是,同一张卡可能有多个副本, 因此,必须考虑同时在若干台ATM上使用同样的 现金兑换卡的可能性。也就是说,系统应该能够处 理并发的访问。
25
柜员终端与分行计算机通信。 ቤተ መጻሕፍቲ ባይዱ员输入针对账户的事务。 ATM与中央计算机交换关于事务的信息。 中央计算机确定事务与分行的对应关系。 ATM读现金兑换卡。 ATM与用户交互。 ATM吐出现金。 ATM打印账单。 系统处理并发的访问。
26
(2) 需求陈述中隐含的关联 总行由各个分行组成。 分行保管账户。 总行拥有中央计算机。 系统维护事务日志。 系统提供必要的安全性。 储户拥有现金兑换卡。 (3) 根据问题域知识得出的关联 现金兑换卡访问账户。 分行雇用柜员。
12
当用户把现金兑换卡插入ATM之后,ATM就与用 户交互,以获取有关这次事务的信息,并与中央计 算机交换关于事务的信息。首先,ATM要求用户 输入密码,接下来ATM把从这张卡上读到的信息 以及用户输入的密码传给中央计算机,请求中央计 算机核对这些信息并处理这次事务。中央计算机根 据卡上的分行代码确定这次事务与分行的对应关系, 并且委托相应的分行计算机验证用户密码。如果用 户输入的密码是正确的,ATM就要求用户选择事 务类型(取款、查询等)。当用户选择取款时,ATM 请求用户输入取款额。最后,ATM从现金出口吐 出现金,并且打印出账单交给用户。
2
10.1 面向对象分析的基本过程
10.1.1 概述
面向对象分析,就是抽取和整理用户需求 并建立问题域精确模型的过程。
3
10.1.2 3个子模型与5个层次
面向对象建模得到的模型包含系统的3个要素: 静态结构(对象模型) 交互次序(动态模型) 数据变换(功能模型)。
解决的问题不同,这3个子模型的重要程度也不同:几乎解决 任何一个问题,都需要从客观世界实体及实体间相互关系抽象出 极有价值的对象模型;当问题涉及交互作用和时序时(例如,用户 界面及过程控制等),动态模型是重要的;解决运算量很大的问题 (例如,高级语言编译、科学与工程计算等),则涉及重要的功能模 型。动态模型和功能模型中都包含了对象模型中的操作(即服务或 方法)。
4
图10.1 复杂问题的对象模型的5个层次
5
类与对象:UML的“类” 结构:类或对象之间的关系) 属性: 服务:操作 主题(或范畴):主题是指导读者(包括系统分析员、软件设计人员、领域 专家、管理人员、用户等,总之,“读者”泛指所有需要读懂系统模 型的人)理解大型、复杂模型的一种机制。也就是说,通过划分主题把 一个大型、复杂的对象模型分解成几个不同的概念范畴。 首先,面向对象分析通过控制读者能见到的层次数目来控制可见性。 其次,面向对象分析增加了一个主题层,它可以从一个相当高的层次 描述总体模型,并对读者的注意力加以指导。
相关文档
最新文档