软件工程课件
第7章 面向对象分析面向对象分析( 通常缩写为OOA) 的关键, OOA)的关键 面向对象分析 ( 通常缩写为 OOA) 的关键 , 是 识别出问题域内的对象, 识别出问题域内的对象,并分析它们相互间的关 最终建立起问题域的简洁、精确、 系,最终建立起问题域的简洁、精确、可理解的 正确模型。 正确模型。在用面向对象观点建立起的三种模型 对象模型是最基本、最重要、最核心的。 中,对象模型是最基本、最重要、最核心的。
软件工程课件
7.1 分析过程 7.2 需求陈述 7.3 建立对象模型 7.4 建立动态模型 7.5 建立功能模型 7.6 定义服务 7.7 面向对象分析实例 7.8 小结
软件工程课件
7.1 分析过程概述 7.1.1 概述面向对象分析, 面向对象分析,就是抽取和整理用户需求并建立问 题域精确模型的过程。 题域精确模型的过程。
软件工程课件
三个子模型与五个层次 7.1.2 三个子模型与五个层次正如本书6.4节所述, 正如本书6.4节所述,面向对象建模得到的模型包含系统的 6.4节所述 三个要素, 静态结构(对象模型) 交互次序(动态模型) 三个要素,即静态结构(对象模型),交互次序(动态模型)和数据 变换(功能模型) 解决的问题不同, 变换(功能模型)。解决的问题不同,这三个子模型的重要程度也 不同:几乎解决任何一个问题, 不同:几乎解决任何一个问题,都需要从客观世界实体及实体间 相互关系抽象出极有价值的对象模型; 相互关系抽象出极有价值的对象模型;当问题涉及交互作用和时 序时(例如,用户界面及过程控制等),动态模型是重要的;解决 序时(例如,用户界面及过程控制等) 动态模型是重要的; 运算量很大的问题(例如,高级语言编译、科学与工程计算等) 运算量很大的问题(例如,高级语言编译、科学与工程计算等), 则涉及重要的功能模型。 则涉及重要的功能模型。动态模型和功能模型中都包含了对象模 型中的操作(即服务或方法) 型中的操作(即服务或方法)。 复杂问题(大型系统)的对象模型由下述五个层次组成: 复杂问题(大型系统)的对象模型由下述五个层次组成:主题 五个层次组成 对象层、 层(也称为范畴层)、类—&—对象层、结构层、属性层和服务层, 也称为范畴层) & 对象层 结构层、属性层和服务层, 如图7.1所示。 如图7.1所示。 7.1所示
软件工程课件
图7.1 复杂问题的对象模型
软件工程课件
综上所述,我们在概念上可以认为, 综上所述,我们在概念上可以认为,面向对象分析 大体上按照下列顺序进行:寻找类 & 对象 识别结构, 对象, 大体上按照下列顺序进行:寻找类—&—对象,识别结构, 识别主题,定义属性,建立动态模型,建立功能模型, 识别主题,定义属性,建立动态模
型,建立功能模型, 定义服务。但是,正如前面已经多次强调指出过的, 定义服务。但是,正如前面已经多次强调指出过的,分 析不可能严格地按照预定顺序进行,大型、 析不可能严格地按照预定顺序进行,大型、复杂系统的 模型需要反复构造多遍才能建成。通常, 模型需要反复构造多遍才能建成。通常,先构造出模型 的子集,然后再逐渐扩充,直到完全、 的子集,然后再逐渐扩充,直到完全、充分地理解了整 个问题,才能最终把模型建立起来。 个问题,才能最终把模型建立起来。
软件工程课件
分析也不是一个机械的过程。 分析也不是一个机械的过程。大多数需求陈述都缺 乏必要的信息,所缺少的信息主要从用户和领域专家那 用户 乏必要的信息,所缺少的信息主要从用户和领域专家那 里获取, 里获取,同时也需要从分析员对问题域的背景知识中提 取。在分析过程中,系统分析员必须与领域专家及用户 在分析过程中,系统分析员必须与领域专家及用户 反复交流,以便澄清二义性,改正错误的概念, 反复交流,以便澄清二义性,改正错误的概念,补足缺 少的信息。面向对象建立的系统模型, 少的信息。面向对象建立的系统模型,尽管在最终完成 之前还是不准确、不完整的,但对做到准确、 之前还是不准确、不完整的,但对做到准确、无歧义的 交流仍然是大有益处的。 交流仍然是大有益处的。
软件工程课件
7.2 需求陈述7.2.1 书写要点通常,需求陈述的内容包括:问题范围,功能需求, 通常,需求陈述的内容包括:问题范围,功能需求, 的内容包括 性能需求,应用环境及假设条件等。总之, 性能需求,应用环境及假设条件等。总之,需求陈述应 该阐明“ 而不是“ 该阐明“做什么”而不是“怎样做”。它应该描述用户 的需求而不是提出解决问题的方法。 的需求而不是提出解决问题的方法。应该指出哪些是系 统必要的性质,哪些是任选的性质。 统必要的性质,哪些是任选的性质。应该避免对设计策 略施加过多的约束,也不要描述系统的内部结构, 略施加过多的约束,也不要描述系统的内部结构,因为 这样做将限制实现的灵活性。 这样做将限制实现的灵活性。对系统性能及系统与外界 环境交互协议的描述,是合适的需求。此外, 环境交互协议的描述,是合适的需求。此外,对采用的 软件工程标准、模块构造准则、 软件工程标准、模块构造准则、将来可能做的扩充以及 可维护性要求等方面的描述,也都是适当的需求。 可维护性要求等方面的描述,也都是适当的需求。
软件工程课件
7.2.2 例子图7.2 所示的自动取款机(ATM)系统, 所示的自动
取款机(ATM)系统,是本书讲 (ATM)系统
述面向对象分析和面向对象设计时使用的一个实例。 述面向对象分析和面向对象设计时使用的一个实例。
软件工程课件
图7.2 ATM系统
软件工程课件
下面陈述对ATM系统的需求。 下面陈述对ATM系统的需求。 ATM系统的需求某银行拟开发一个自动取款机系统, 某银行拟开发一个自动取款机系统,它是一个由自 动取款机、中央计算机、 动取款机、中央计算机、分行计算机及柜员终端组成的 网络系统。ATM和中央计算机由总行投资购买。 网络系统。ATM和中央计算机由总行投资购买。总行拥 和中央计算机由总行投资购买 有多台ATM,分别设在全市各主要街道上。分行负责提 有多台ATM,分别设在全市各主要街道上。 ATM 供分行计算机和柜员终端。 供分行计算机和柜员终端。柜员终端设在分行营业厅及 分行下属的各个储蓄所内。该系统的软件开发成本由各 分行下属的各个储蓄所内。 个分行分摊。 个分行分摊。
软件工程课件
银行柜员使用柜员终端处理储户提交的储蓄事务。 银行柜员使用柜员终端处理储户提交的储蓄事务。 储户可以用现金或支票向自己拥有的某个账户内存款或 开新账户。储户也可以从自己的账户中取款。通常, 开新账户。储户也可以从自己的账户中取款。通常,一 个储户可能拥有多个账户。 个储户可能拥有多个账户。柜员负责把储户提交的存款 或取款事务输进柜员终端,接收储户交来的现金或支票, 或取款事务输进柜员终端,接收储户交来的现金或支票, 或付给储户现金。柜员终端与相应的分行计算机通信, 或付给储户现金。柜员终端与相应的分行计算机通信, 分行计算机具体处理针对某个账户的事务并且维护账户。 分行计算机具体处理针对某个账户的事务并且维护账户。
软件工程课件
拥有银行账户的储户有权申请领取现金兑换卡。 拥有银行账户的储户有权申请领取现金兑换卡。使 用现金兑换卡可以通过ATM访问自己的账户。 ATM访问自己的账户 用现金兑换卡可以通过ATM访问自己的账户。目前仅限 于用现金兑换卡在ATM上提取现金(即取款) ATM上提取现金 于用现金兑换卡在ATM上提取现金(即取款),或查询有 关自己账户的信息(例如,某个指定账户上的余额) 关自己账户的信息(例如,某个指定账户上的余额)。将 来可能还要求使用ATM办理转账、存款等事务。 ATM办理转账 来可能还要求使用ATM办理转账、存款等事务。 所谓现金兑换卡就是一张特制的磁卡, 所谓现金兑换卡就是一张特制的磁卡,上面有分行 代码和卡号。分行代码唯一标识总行下属的一个分行, 代码和卡号。分行代码唯一标识总行下属的一个分行, 卡号确定了这
张卡可以访问哪些账户。通常, 卡号确定了这张卡可以访问哪些账户。通常,一张卡可 以访问储户的若干个账户, 以访问储户的若干个账户,但是不一定能访问这个储户 的全部账户。每张现金兑换卡仅属于一个储户所有, 的全部账户。每张现金兑换卡仅属于一个储户所有,但 同一张卡可能有多个副本,因此, 是,同一张卡可能有多个副本,因此,必须考虑同时在 若干台ATM上使用同样的现金兑换卡的可能性。 ATM上使用同样的现金兑换卡的可能性 若干台ATM上使用同样的现金兑换卡的可能性。也就是 说,系统应该能够处理并发的访问。 系统应该能够处理并发的访问。
软件工程课件
当用户把现金兑换卡插入ATM之后,ATM就与用户交 当用户把现金兑换卡插入ATM之后,ATM就与用户交 ATM之后 互,以获取有关这次事务的信息,并与中央计算机交换 以获取有关这次事务的信息, 关于事务的信息。首先,ATM要求用户输入密码, 关于事务的信息。首先,ATM要求用户输入密码,接下 要求用户输入密码 来ATM把从这张卡上读到的信息以及用户输入的密码传 ATM把从这张卡上读到的信息以及用户输入的密码传 给中央计算机, 给中央计算机,请求中央计算机核对这些信息并处理这 次事务。 次事务。中央计算机根据卡上的分行代码确定这次事务 与分行的对应关系, 与分行的对应关系,并且委托相应的分行计算机验证用 户密码。如果用户输入的密码是正确的,ATM就要求用 户密码。如果用户输入的密码是正确的,ATM就要求用 户选择事务类型(取款、查询等) 当用户选择取款时, 户选择事务类型(取款、查询等)。当用户选择取款时, ATM请求用户输入取款额。最后,ATM从现金出口吐出现 ATM请求用户输入取款额。最后,ATM从现金出口吐出现 请求用户输入取款额 金,并且打印出账单交给用户。 并且打印出账单交给用户。
软件工程课件
7.3 建立对象模型确定类—& 对象 7.3.1 确定类 &—对象对象是在问题域中客观存在的, 类—&—对象是在问题域中客观存在的,系统分析员 & 对象是在问题域中客观存在的 的主要任务,就是通过分析找出这些类 & 对象 首先, 对象。 的主要任务,就是通过分析找出这些类—&—对象。首先, 找出所有候选的类—& 对象 然后,从候选的类—& 对 对象; 找出所有候选的类 &—对象;然后,从候选的类 &—对 象中筛选掉不正确的或不必要的。 象中筛选掉不正确的或不必要的。 1. 找出候选的类—&—对象
软件工程课件
另一种更简单的分析方法,是所谓的非正式分析。 另一种更简单的分析方法,是所谓的非正式分析。 这种分析方法以用自然语言书写的需求陈述为依据,
这种分析方法以用自然语言书写的需求陈述为依据,把 陈述中的名词作为类—& 对象的候选者 对象的候选者, 陈述中的名词作为类 &—对象的候选者,用形容词作为 确定属性的线索, 动词作为服务 操作 的候选者。 操作)的候选者 确定属性的线索,把动词作为服务(操作 的候选者。 下面以ATM系统为例,说明非正式分析过程。认真阅 下面以ATM系统为例,说明非正式分析过程。 ATM系统为例 读7.2.2节给出的需求陈述,从陈述中找出下列名词, 7.2.2节给出的需求陈述,从陈述中找出下列名词, 节给出的需求陈述 可以把它们作为类—& 对象的初步的候选者 对象的初步的候选者。 可以把它们作为类 &—对象的初步的候选者。
软件工程课件
银行、自动取款机(ATM)、系统、中央计算机、 银行、自动取款机(ATM)、系统、中央计算机、分 (ATM) 行计算机、柜员终端、网络、总行、分行、软件、成本、 行计算机、柜员终端、网络、总行、分行、软件、成本、 市、街道、营业厅、储蓄所、柜员、储户、现金、支票、 街道、营业厅、储蓄所、柜员、储户、现金、支票、 账户、事务、现金兑换卡、余额、磁卡、分行代码、 账户、事务、现金兑换卡、余额、磁卡、分行代码、卡 号、用户、副本、信息、密码、类型、取款额、账单以 用户、副本、信息、密码、类型、取款额、 及访问。 及访问。 通常,在需求陈述中不会一个不漏地写出问题域中 通常, 所有有关的类—& 对象 因此, 对象, 所有有关的类 &—对象,因此,分析员应该根据领域知 识或常识进一步把隐含的类—& 对象提取出来 例如, 对象提取出来。 识或常识进一步把隐含的类 &—对象提取出来。例如, ATM系统的需求陈述中虽然没写 通信链路” 系统的需求陈述中虽然没写“ 在ATM系统的需求陈述中虽然没写“通信链路”和“事 务日志” 但是,根据领域知识和常识可以知道, 务日志”,但是,根据领域知识和常识可以知道,在 ATM系统中应该包含这两个实体 系统中应该包含这两个实体。 ATM系统中应该包含这两个实体。
软件工程课件
2. 筛选出正确的类—&—对象显然,仅通过一个简单、 显然,仅通过一个简单、机械的过程不可能正确地 完成分析工作。 完成分析工作。非正式分析仅仅帮助我们找到一些候选 的类—& 对象 接下来应该严格考察每个候选对象, 对象, 的类 &—对象,接下来应该严格考察每个候选对象,从 中去掉不正确的或不必要的, 中去掉不正确的或不必要的,仅保留确实应该记录其信 息或需要其提供服务的那些对象。 息或需要其提供服务的那些对象。 筛选时主要依据下列标准, 筛选时主要依
据下列标准,删除不正确或不必要的 对象。 类—&—对象。 & 对象
软件工程课件
(1) 冗余 冗余 无关 (2) 无关 笼统 (3) 笼统 属性 (4) 属性 操作 (5) 操作 (6) 实现 实现 综上所述, ATM系统的例子中,经过初步筛选, 综上所述,在ATM系统的例子中,经过初步筛选, 系统的例子中 剩下下列类—& 对象 ATM、中央计算机、分行计算机、 对象: 剩下下列类 &—对象:ATM、中央计算机、分行计算机、 柜员终端、总行、分行、柜员、储户、账户、 柜员终端、总行、分行、柜员、储户、账户、事务和现 金兑换卡。 金兑换卡。
软件工程课件
7.3.2 确定关联如前所述,两个或多个对象之间的相互依赖、 如前所述,两个或多个对象之间的相互依赖、相互 作用的关系就是关联。分析确定关联, 作用的关系就是关联。分析确定关联,能促使分析员考 虑问题域的边缘情况, 虑问题域的边缘情况,有助于发现那些尚未被发现的 —&—对象 对象。 类—&—对象。 在分析确定关联的过程中, 在分析确定关联的过程中,不必花过多的精力去区 分关联和聚集。事实上,聚集不过是一种特殊的关联, 分关联和聚集。事实上,聚集不过是一种特殊的关联, 是关联的一个特例。 是关联的一个特例。
软件工程课件
1. 初步确定关联在需求陈述中使用的描述性动词或动词词组, 在需求陈述中使用的描述性动词或动词词组,通常 表示关联关系。因此,在初步确定关联时, 表示关联关系。因此,在初步确定关联时,大多数关联 可以通过直接提取需求陈述中的动词词组而得出。通过 可以通过直接提取需求陈述中的动词词组而得出。 分析需求陈述,还能发现一些在陈述中隐含的关联。最 分析需求陈述,还能发现一些在陈述中隐含的关联。 后,分析员还应该与用户及领域专家讨论问题域实体间 的相互依赖、相互作用关系, 的相互依赖、相互作用关系,根据领域知识再进一步补 充一些关联。 充一些关联。