面向对象技术与工具(第2版)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.4 软件开发方法

为了克服软件危机,从20世纪60年代末开始,各国的软件工作者一直在进行软件开发方法的研究与实践,并取得了一系列研究成果。

软件工程的内容包括技术和管理两方面,两方面又紧密结合。通常,把在软件生命期中所使用的一整套技术的集合称为方法学(Methodology)或范型(Paradigm)。

软件开发方法是一种使用早已定义好的技术集及符号表示习惯来组织软件生产过程的方法,其方法一般表述成一系列的步骤,每一步骤都与相应的技术和符号相关。其目标是要在规定的投资和时间内,开发出符合用户要求的、高质量的软件,为此,需要有成功的开发方法。

软件开发方法可分为两大类:面向过程的开发方法和面向对象的开发方法。本节将对结构化开发方法、原型化开发方法和面向对象的开发方法进行简介。

1.4.1 结构化开发方法

结构化开发方法(Structured Developing Method)是一种面向数据流的开发方法,它的基本原则是功能的分解与抽象。结构化方法提出了一组提高软件结构合理性的准则,如分解和抽象、模块的独立性、信息隐蔽等。它是现有的软件开发方法中最成熟、应用最广泛的方法。该方法的主要特点是快速、自然和方便。

结构化方法的指导思想是“自顶向下、逐步求精”。

1.结构化开发方法的组成

结构化方法由三部分构成,按照推出的先后次序为:

① 20世纪70年代初推出的结构化程序设计方法,即SP(Structured Program)法;

② 20世纪70年代中推出的结构化设计方法,即SD(Structured Design)法;

③ 20世纪70年代末推出的结构化分析方法,即SA(Structured Analysis)法。

SA法、SD法、SP法相互衔接,形成了一整套开发方法。将SA法与SD法结合起来,又称为结构化分析与设计技术(SADT)。

2.结构化方法的工作模型

结构化方法的工作模型为瀑布模型(Waterfall Model)。但从20世纪80年代开始,逐渐发现其不足。软件开发过程是个充满回溯的过程,而瀑布模型却将其分割为独立的几个阶段,不能从本质上反映软件开发过程本身的规律。此外,过分强调复审,并不能完全避免较为频繁的变动。尽管如此,瀑布模型仍然是开发软件产品的一个行之有效的工程模型。

1.4.2 原型化开发方法

原型是指软件开发过程中,软件的一个早期可运行的版本,它反映了最终系统的部分重要特性。原型化方法的基本思想是,花费少量代价建立一个可运行的系统,使用户及早获得学习的机会。原型化开发方法又称速成原型(Rapid P rototyping)法,强调的是软件开发人员与用户的不断交互,通过原型的演进不断适应用户任务改变的需求。将维护和修改阶段的工作尽早进行,使用户验收提前,从而使软件产品更加适合实际应用。原型化开发方法有两种方法。

① 快速建立需求规格原型(Rapid S pecification Pr ototyping,RSP)法所建立的原型反映了系统的某些特征,让用户学习,有利于获得更加精确的需求说明书,需求说明书一旦确定,原型就被废弃,后阶段的工作仍按照瀑布模型开发,所以也称为废弃(Throw Away)型。

② 快速建立渐进原型(Rapid Cyclic Prototyping,RCP)法采用循环渐进的开发方式,对系统模型作连续精化,将系统需要具备的功能逐步添加上去,直至所有功能全部满足,此时的原型模型也就是最终的产品,所以也称为追加(add on)型。

原型化开发方法适合于开发探索型、实验型与进化型的软件系统。其工作模型如图1-9所示,这是一个循环的模型。原型化开发方法按以下步骤循环执行。

图1-9 原型化开发方法工作模型

① 快速分析。快速确定软件系统的基本要求,确定原型所要体现的特征(界面、总体结构、功能、性能)。

② 构造原型。在快速分析的基础上,根据基本规格说明,忽略细节,只考虑主要特征,快速构造一个可运行的系统。有三类原型:用户界面原型、功能原型和性能原型。

③ 运行和评价原型。用户试用原型并与开发者之间频繁交流,目的是验证原型的正确性。

④ 修改与改进。对原型进行修改、增删。

1.4.3 面向对象的软件开发方法

面向对象的软件开发方法(Object-Oriented Software Development,OOSD)是20世纪80年代推出的一种全新的软件开发方法。OOSD非常实用且强有力,被誉为20世纪90年代软件的核心技术之一。

其基本思想是:对问题领域进行自然的分割,以更接近人类通常思维的方式建立问题领域的模型,以便对客观的信息实体进行结构和行为的模拟,从而使设计的软件更直接地表现问题的求解过程。面向对象的开发方法以对象作为最基本的元素,是分析和解决问题的核心。

Coad和Yourdon给出一个面向对象的定义如下:

面向对象 = 对象 + 类 + 继承 + 消息

如果一个软件系统是按照这样4个概念设计和实现的,则可以认为这个软件系统是面向对象的。

OOSD由OOA(面向对象的分析)、OOD(面向对象的设计)和OOP(面向对象的程序设计)三部分组成。

(1)OOA(Object-Oriented Analysis)法

OOA就是解决“做什么”的问题。它的基本任务就是建立以下三种模型。

对象模型(信息模型):定义构成系统的类和对象,以及它们的属性与操作。

状态模型(动态模型):描述任何时刻对象的联系及其联系的改变,即时序。常用状态图与事件追踪图描述。

处理模型(函数模型):描述系统内部数据的传送处理。

显然,在三大模型中,最重要的是对象模型。如何建立三大模型,我们将在第5章中介绍。

(2)OOD(Object-Oriented Design)法

在需求分析的基础上,进一步解决“如何做”的问题。OOD法分为概要设计和详细设计两步。

概要设计:细化对象行为,添加新对象,认定类,组类库,确定外部接口及主要数据结构。

详细设计:详细的对象描述。

(3)OOP(Object-Oriented Program)法

使用面向对象的程序设计语言,如C++进行程序设计,因为该类语言支持对象、类、多态性和继承等概念,因此比较容易实现面向对象的程序设计。

用面向对象方法开发的软件,其结构基于客观世界界定的对象结构,因此与传统的软件相比较,软件本身的内容结构发生了质的变化,因而易复用性和易扩充性都得到了提高,而且能支持需求的变化。