1
面向对象软件工程实践指南
1.2.1.2 1.2 软件工程基本思想
1.2 软件工程基本思想

无论是传统软件工程还是面向对象软件工程,它们都体现了一些共同的思想,这些思想主要有:抽象,分解,分类,复用。

1.2.1 抽象

抽象,是人类解决复杂问题的通用方法。抽象是从众多的事物中抽取出共同的、本质性的特征,而舍弃其非本质的特征。通过硬件基础上运行的软件来解决实际问题时,软件中的概念和实际问题中的概念是有区别的,因此必须采用抽象来实现实际问题在软件世界中的映射。在传统软件工程中,问题被映射成函数、数据结构、算法等软件概念,而在面向对象软件工程中,问题被映射成对象、类以及它们之间的关系,由于对象、类模拟了现实世界,这种抽象更容易理解。为了实现从问题领域到软件领域的映射,软件工程把软件开发分成了多个阶段,每一个阶段中提供了多种模型来完成任务,而模型本身就是一种抽象表达。

1.2.2 分解

分解,也是人类解决复杂问题的通用方法。所谓分解,就是把复杂的系统变成小的系统,采用“各个击破”的原则逐一解决。由于软件本身比较复杂,作为一个整体开发存在一定困难,因此,把软件系统分解成一个个小系统,这样就可以大大降低开发难度。传统的软件工程在分解时,从功能角度出发,各个子系统都对应了一部分功能;而面向对象的软件工程中,把系统分解为一个个对象,通过定义对象间的交互来完成所有的功能。分解也促进了软件重用,由于每一个小的单元(子系统、模块、类、函数)具备一定的功能,在未来的软件开发中可以再次使用,那些具有一定通用性的软件,甚至可以构成一个可重用软件库。

1.2.3 复用

复用,就是利用已有的代码,或者已有的知识、经验编写代码,以进行新的软件开发。复用可以节省很大一部分时间和精力,从而提高开发效率。复用的软件大多经过很长时间的检验,这样可以减少开发过程中可能出现的错误。小部分的创新加上大部分的已有成果来完成新项目,因此利用复用可以高效而又高质量地完成软件开发工作。

复用的形式有多种多样,主要的形式为程序库、类库、软件服务、应用框架、设计模式等。

(1)程序库是代码复用最直接的例子。有很多的函数或者模块在软件之间都是通用的,比如说对一个数组的排序函数,文件的读、写函数等。将这些函数、模块封装在一个程序库中,后续进行开发工作的程序员只需要简单地进行调用就可以了。程序库的好处是显而易见的:程序员通过调用相应函数或模块,可以提高开发的效率;同时,程序库中的操作一定是经过充分测试后正确的代码,减少了出错的可能。

(2)类库是面向对象软件开发时实现复用的有效方式。将普遍需要的类放入类库,在软件开发时可以直接使用这些类来创建对象,或者通过继承这些类并加以修改和扩充产生所需要的子类。

(3)软件服务:随着互联网、Web服务、Web API、云计算等技术的发展,在开发过程中可以直接利用由服务提供商提供的服务或者API来构建系统,而无须了解实现服务的具体代码和服务运行的具体方式。

(4)软件开发者可以采用第三方的应用程序或应用框架实现代码的复用。这种代码复用往往范围比较大,可以在很大程度上提高开发效率。

(5)设计模式是许多年软件开发经验的结晶,它对各类问题提供了一些具有普遍借鉴意义的解决方法。因而设计模式的重用实际上代表了一种知识的重用。