面向对象方法(简称为OO)具有很强的类的概念,因此它能很直观地模拟人类对客观世界的认识方式,这样也就能模拟人类在认知过程中由一般到特殊的演绎或由特殊到一般的归纳功能,前面介绍的类的概念既能够反映出对象的本质属性,又提供了实现对象共享机制的理论根据。
如果遵照面向对象方法的思想进行软件系统的开发,过程共分成4个阶段:
(1)系统调查和需求分析,分析问题并求解
对用户的开发需求以及要开发的系统所面临的问题进行调查和研究。针对复杂的问题领域,抽象出对象及其属性和方法。这一个阶段通常称之为面向对象分析,即OOA。
(2)整理问题:对第一阶段的结果进一步抽象、归类整理
对每 一 部分进行分别的具体的设计,首先是进行类的设计,类的设计可能包含多个层次(利用继承、派生)。然后在这些类的基础之上,提出程序设计的思路和方法,对算法的设计。在设计阶段,不牵扯某一种具体的计算机语言,而是用一种更通用的描述工具进行描述,这个阶段即为面向对象设计OOD。
(3)程序实现
利用面向对象的程序设计语言,进行系统的具体实现,即面向对象编程OOP。
(4)系统测试
系统开发好后,在交付用户使用前,必须对程序进行严格的测试。测试的主要目的就是发现程序中的错误,进行改正,使得系统更健壮。面向对象测试时,采用面向对象的方法进行测试,以类作为测试的一个基本单元。这个阶段称为面向对象测试OOT。
下面将从面向对象开发过程的4个阶段进行详细的描述。
面向对象的系统调查和需求分析阶段主要是提取系统的需求,也就是要分析出为了满足用户的需求,系统必须“做什么”(系统能提供的功能),而不是 “ 怎么做”(系统如何实现)。
(1)分析过程概述
在进行系统调查和需求分析阶段,系统分析员要对需求文档进行分析。通过分析可以发现并对需求文档中的歧义性、不一致性进行修正,剔除那些冗余内容,挖掘系统中应该存在的潜在内容,弥补系统中的不足,从而使需求文档更完整和准确。
对需求文档进行了分析和整理后,为了给面向对象分析过程提供依据,需要进行需求建模。这时系统分析员根据提取的用户需求,对用户的需求进行深入地理解,识别出问题领域内的对象,并分析对象之间的关系,抽象出目标系统需要完成的任务,这样就可以利用OOA模型准确地表示出来,即用面向对象观点建立对象模型、动态模型和功能模型。
经过需求的分析和建模,最后对所获得的需求进行评审。通过用户、领域专家、系统分析员和系统设计人员的评审,并进行反复修改后,最终确定目标系统的需求规格说明。
(2)实例需求文档
需求文档也叫需求陈述或问题陈述。对于需要开发的任何一个系统,需求陈述是首要任务。
因为系统最终是要由用户使用,而在该过程中,主要是陈述用户的需求,即该系统应该“做什么”, 而不是 “ 怎么做”,即系统要完成的任务是什么,而不是解决问题的方法。
在进行需求陈述时,必须要清楚地定义所要解决问题的目标。如果目标模糊,将会影响整个系统分析、设计和实现等后续开发阶段的所有工作。也就是说,需求质量的好坏直接影响到整个系统的质量,因此,需求陈述是很关键的过程,如果想准确表达用户的要求,在对需求进行陈述时需要分析人员和用户一起研究和讨论。
面向对象的分析方法(简称为OOA),指的是按照面向对象的概念和方法,在对任务的分析中,根据客观存在的事物以及事物之间的关系,归纳出相关的对象,包括对象的属性、行为以及对象之间的联系,并将具有共同属性和行为的对象用一个类来表示。
通过面向对象的分析,建立一个能反映真实工作情况的需求模型。在这个阶段所形成的模型只是一个比较粗略的模型。OOA所强调的是在系统调查资料的基础上,进行的对象的归类分析和整理。
使用OOA方法对系统调查和需求分析进行分析处理时,一般要遵循前面讲述的抽象、封装、继承、消息通信等原则。
在使用OOA具体地分析一个事物时,一般要分如下几个阶段:
(1)识别并筛选对象
按照对象的定义,对象应该是实际问题域中有意义的个体或概念实体。对象具有目标软件系统所关心的属性。并且,对象应该以某种方式与系统发生关联,即对象必须与系统中其他有意义的对象进行消息传递,并提供外部服务。
通过对用户需求分析文档的分析可以找出所有的名词或名词短语,合并同义词,这些是极有可能成为对象的。除去具有动作含义的名词,这些动词将被描述为对象的操作而不是对象本身。
(2)标识对象的属性
属性是对问题域中对象性质的一个描述,对象在系统中所有可能的状态就是属性的取值。对象一般具有很多属性,但在分析阶段就要分析出对象的哪些属性是和系统紧密相关的。
在问题域中,如何能够识别出对象的哪些属性是有意义?要识别出所关心的潜在属性,需要对问题领域涉及到的知识进行深刻的理解。
在识别属性的过程中,对于问题领域中的某个实体,不但要求其取值有意义,而且它本身在系统中必须是独立存在的。这时应该将该实体作为一个对象,而不能作为另一对象的属性。此外,为了保持需求模型的简洁性,一般将省略对象的一些导出属性。例如, “ 年龄”可通过 “ 出生日期”和系统当前时间导出,因此,不应该将“年龄 ” 作为人的基本属性。
(3)识别对象的行为
对象的行为可以简单地理解为对象对外提供的所有的功能。比如说,在面向对象模型中,一个对象要处理另一对象的请求、查询或命令,即响应外部的事件,要完成某项操作,这种操作将改变对象自身的属性值或系统的状态,这些都是对象的行为。当对象受到外部事件的刺激或接收另一个对象传来的消息后,为完成某项操作,响应外部事件,该对象可能又需要向其他对象发送消息。因此,我们可以把整个系统看成是对象之间的相互通信,以及在通信过程中引发的动作。
一般可以将对象的行为分为以下三类:
① 对象生命周期中的创建、维护、删除行为
例如,图书管理系统中的图书信息的创建,删除和修改等行为。
② 计算性行为
典型的计算性行为主要包括:利用基本的对象属性值计算出派生出的属性值,以及为了响应其他对象的请求,完成某些数据处理功能,并将结果返回。这类计算性行为往往完成的是数据处理功能,即对象提供的外部的计算性行为。因此,分析人员可以在定义对象的外部行为时,针对其他对象发出的消息请求提取计算性行为。
③ 监视性行为或称响应行为
为了提取对象的响应行为,分析人员需要对对象的主要状态进行定义。对于每一个状态,列出可能的外部事件,预期的反应,并进行适当的精化。例如,“图书 ” 对象的状态可以为借出、库存等,在每一状态可处理的事件及预期反应可以表示为响应行为。
面向对象的设计方法(简称为OOD)是面向对象方法中一个中间过渡环节。其主要作用是对OOA分析的结果进行规范化的整理,以便为面向对象程序设计阶段打下基础。在OOD的设计过程中,主要进行如下几个过程:
(1)精化对象的定义规格
对于OOA所抽象出来的对象和类以及在分析过程中产生的分析文档,在OOD过程中,根据设计要求对其进行整理和精化,使之更能符合面向对象程序设计的需要。整理和精化的过程主要包括两个方面:一个是根据面向对象的概念模型,整理分析所确定的对象结构、属性和方法等内容,纠正错误的内容,删去不必要和重复的内容等。另一个是进行分类整理,这样便于下一步数据库设计、程序处理模块设计。整理的方法主要是进行归类,即对类和对象、属性、方法和结构等进行归类。
(2)数据模型和数据库设计
数据模型的设计是对系统中的类和对象的属性、方法等内容的确定,以及消息连接的方式、系统访问数据模型的方法等内容的确定。最后将每个对象实例化数据都映射到面向对象的库结构模型中。
(3)优化
OOD的优化设计过程是从另一个角度对分析结果和处理业务过程的整理归纳,优化包括对象和结构的优化、抽象、集成。对象和结构的模块化表示OOD提供了一种范式,这种范式支持对类和结构的模块化。集成化使得单个构件有机地结合在一起,相互支持。