软件工程:实践者的研究方法第20章面向对象分析
第20章 面向对象分析
当开发一个新的产品或系统时,我们如何以遵从OO软件工程的方式来刻划它?什么是相关的对象?它们如何相互关联?对象如何在系统的范围内工作?我们应如何对问题刻划或建模以使得我们可有效地进行设计?
所有这些问题涵盖在面向对象分析(OOA)的范围内,OOA是作为OO软件工程的第一项技术活动来实现的。OOA基于在第11章引入的一组基本原则,为了建立一个分析模型,要运用如下5个基本原则:(1)建模信息域;(2)描述模块功能;(3)表示模型行为;(4)分解以模型显示更多细节;(5)早期模型表示问题的本质,而后期模型提供实现细节。这些原则形成了在本章中讨论的OOA方法的基础。
OOA的意图是定义所有和被求解的问题相关的类(及同类关联的关系和行为),为了达到这个目标,必须完成以下任务显示:
1.必须在客户和软件工程师之间沟通了解基本的用户需求。
2.必须标识类(即,定义属性和方法)。
3.必须刻划类层次。
4.表示对象—对象关系(对象连接)。
5.必须建模对象行为。
6.任务1到5递进地反复使用,直至完成建模。
代替用传统的输入—加工—输出(信息流)模型或仅从层次信息结构地导出模型考察问题的方式,OOA引入了一系列新概念。这些新概念看上去可能有一些不寻常,但是它们实际是相当自然的。Coad和Yourdon[COA91]对该问题有如下论述:些不寻常,但是它们实际是相当自然的。Coad和Yourdon[COA91]对该问题有如下论述:
OOA(面向对象分析)是基于我们在幼儿园首先学到的概念:对象和属性、类和成员、整体和部分。为什么我们花了这么长的时间才将这些概念应用于信息系统的分析和规约——也许是由于我们忙于在结构化分析的全盛时期“跟随潮流”而未曾考虑其他的选择。
重要的是要注意:对作为OOA基础的“概念”,不存在一致的共识,但是一些关键思想重复地出现,这些正是我们将在本章中考虑的。
20.1面向对象的分析
面向对象的分析的目标是开发一系列模型,这些模型被用来描述以满足一组客户需求的计算机软件。OOA和在第12章描述的传统分析方法一样,建造一个多部分的分析模型以满足这个目标。分析模型(在第19章描述的对象模型的元素的语境内)描述信息、功能和行为。
20.1.1传统方法和OO方法
面向对象分析是否确实不同于在第12章讨论的结构化分析方法?虽然争论仍在继续,Fichman和Kemerer[FIC92]正面地阐述了这个问题:够治龇椒ǎ克淙徽廴栽诩绦*
我们的结论是面向对象分析方法代表了相对于面向过程的方法学(如结构化分析)的根本性变化,但相对于面向数据的方法学(如信息工程方法)仅仅是适当增补。面向过程的方法学在建模过程中的关注点不是对象的内在性质,从而导致了和面向对象的三个基本原则(封装、对象分类和继承)相正交的问题域模型。
简而言之,结构化分析对需求采用独特的“输入-加工-输出”视角,数据被脱离数据的变换过程而单独考虑,系统行为虽然是重要的,但在结构化分析中往往扮演第二位的角色。结构化分析方法着重于功能分解的使用(数据流图的划分,第12章)。
Fichman和Kemerer[FIC92]建议了11个“建模维数(modeling dimensions)”,可用它们来比较各种传统的和面向对象的分析方法:
1.实体的标识/分类①。
2.一般到特殊以及整体到部分的实体关系。
3.其他实体关系。
4.实体属性的描述。
5.大型模型的划分。
6.状态和状态间的变迁。
7.功能的详细刻划。
8.自上向下的分解。
9.端到端的处理序列。
10.排它性服务的标识。
11.实体通信(通过消息或事件)。
因为结构化分析方法及OOA方法(见20.1.2节)均有很多种,所以很难在两种方法间进行一般性的比较。然而,可以确定,建模维数8和9总是在结构化分析中出现,而很少在OOA中使用。
20.1.2 OOA概述
对象技术的流行已经衍生出许多的OOA方法②,每个方法都引入一个产品或系统分析的过程、一组随过程演化的模型、以及使得软件工程师能够以一致的方式创建模型的符号体系。在下面篇幅中,概略地讨论了某些流行的OOA方法③,其意图是提供一个由方法的作者建议的OOA过程④的概览。
Booch方法
Booch方法[BOO94]包含“微开发过程”和“宏开发过程”两个过程,微级别定义了一组在宏过程中的每一步反复应用的分析任务,因此,演进途径得以维持。Booch方法得到了一系列自动工具的支持。Booch的OOA宏观开发过程概述如下:
·标识类和对象
提出候选对象
进行行为分析
标识相关场景
为每个类定义属性和操作
·标识类和对象的语义
选择场景并分析
赋予责任以完成希望的行为
划分责任以平衡行为
选择一个对象,枚举其角色和责任
定义操作以满足责任
寻找对象间的协作
·标识类和对象间的关系
定义对象间存在的依赖
描述每个参与对象的角色
通过走查场景进行确认
0条评论