结构化方法与面向对象方法的分析比较

软件开发方法指:在项目投资规模和时间限制内,设计、实现符合用户需求的高质量软件,根据软件开发的特点,提出的多种软件开发策略。在计算机软件领域,很多新的方法与技术都起源于程序设计语言,这种发展趋势具有十分重要的意义,它使那些富有生命力的新方法和新技术就此形成自己系统化的技术体系,它极大地推动了计算机软件技术的发展。

结构化方法和面向对象方法都是计算技术中常用的软件开发方法,两种开发方法目前都非常流行,选择哪一种方法要根据分析者的熟练程度和项目的类型而定。就目前而言,十全十美的开发方法是不存在的,真正实用的系统开发方法往往是多种开发方法的结合。如何综合应用,要根据开发系统的规模、系统的复杂程度、系统开发方法的特点,以及所能使用的计算机软件等诸多因素综合考虑后决定。

一、结构化方法

结构化方法是最早最传统的软件开发方法,也是迄今为止信息系统中应用最普遍、最成熟的一种,它引入了工程思想和结构化思想,使大型软件的开发和编程都得到了极大的改善。

1、基本思想

结构化方法的基本思想可概括为:自顶向下、逐步求精、模块化技术。

(1)自顶向下逐层分解,是指在程序设计时,先考虑问题大的方面,在确定了主要方向后,再由表及里深入到问题具体的细节,由易到难,逐层解决问题。这是一个由模糊到清晰,由概括到具体的过程。

(2)逐步求精是在遇到复杂问题的时候,先设计一些子目标作为过渡,来逐步细化。比如在对学生编写资料时,应先将学生分为专科生、本科生、研究生。在对本科生填写资料时,又可对其的专业、班级、学号、姓名、籍贯等进行进一步的划分,依次类推,逐步把资料填写完全。

(3)功能抽象和模块化。由于它采取了分块处理问题的方法,可以把一个比较复杂的问题分解为若干个容易处理解决的部分,从而降低了问题处理的难度。由于结构化方法思路清晰,条理清楚,又有效地分解了繁复的问题,使得编写程序时清晰明了,简化了编程人员繁杂的工作;而在阅读时也能够一气呵成,给人以明朗的感觉。

2、核心问题

模型问题是结构化方法的核心问题,建立模型简称建模是为了更好地理解我们要模拟的现实世界,建模通常是从系统的需求分析开始,在结构化方法中就是使用SA方法构建系统的环境模型,然后使用SD方法确定系统的行为和功能模型, SD 的主要任务就是要在系统环境模型的基础上建立系统的行为和功能模型,完成系统内部行为的描述。实现系统行为和功能模型的主要工具有:数据字典、数据流图、状态变迁图和实体一联系模型等。最后使用SP方法进行系统的设计并确定用户的现实模型。

3、特点

(1)面向用户,用户自始至终参与系统的分析工作;

(2)强调调查工作的重要性;

(3)对管理业务中的各种数据进行分解;

(4)采用了层次分解的系统思想;

(5)用图形工具来分析和构建新方案。

4、局限

(1)结构化方法在需求分析中对问题域的认识和描述不是以问题域中固有的事物作为基本单位,而是打破了各项事物之间的界限,在全局范围内以数据流为中心进行分析,所以分析结果不能直接反映问题域。同时,当系统较复杂时,很难检验分析的正确性。因此,结构化分析方法容易隐蔽一些对问题域的理解偏差,与后续开发阶段的衔接也比较困难;

(2)结构化方法中设计文档很难与分析文档对应,因为二者的表示体系不一致。结构化方法的结果数据流图(DFD)和结构化设计结果模块结构图(MSD)是两种不同的表示体系,从分析到设计的“转换”实际上并不存在可靠的转换规则,而是带有人为的随意性,容易因理解上的错误而埋下隐患,使得设计文档与问题域的本来面貌相差甚远;

(3)结构化方法对需求变化的适应能力比较弱,软件系统结构对功能的变化十分敏感,功能的变化会引起一个加工和它相连的许多数据流的修改,同时设计出的软件难以重用,延缓了开发的过程。

二、面向对象方法

面向对象(Object—oriented,简称OO)方法是以面向对象思想为指导进行系统开发的一类方法的总称。这类方法以对象为中心,以类和继承为构造机制来抽象现实世界,并构建相应的软件系统。

1、基本思想

“分类学理论”中有关人类认识现实世界普遍采用的 3 个构造法则是:

(1)区分对象及其属性;

(2)区分整体对象及其组成部分;

(3)形成并区分不同对象的类。

而面向对象思想正是根据以上3个常用的构造法而建立起来的。

在实际应用中,它采用对象及其属性,整体和部分,类、成员和它们之间的区别等3个法则来对系统进行分析和设计,遵循了分类学理论的基本原理,符合认识来源于实践,又服务于实践的科学思维方式。

在OO方法中,对象和类是其最基本的概念。其中,对象是系统运行时的基本单位,是类的具体实例,是一个动态的概念;而类是对具有相同属性和操作(或称方法、服务)的对象进行的抽象描述,是对象的生成模板,是一个静态的概念。

类可以形式化定义为:

Class=<ID,INH,ATT,OPE,ITF>

其中:

ID——类名:

INH——类的继承性集;

ATT——属性集;

OPE——操作集;

ITF——接口消息集。

2、核心问题

面向对象方法与结构化方法一样其核心问题也是模型问题,面向对象模型主要由OOA模型OOD模型组成,其中OOA主要属于学科抽象形态方面的内容,关心的是构建现实世界的模型问题。解决现实世界的建模问题,就需要对复杂的系统进行分解,最常用的分解方法就是分层;OOD主要属于学科设计形态方面的内容,根据设计的需要,仅对OOA 在问题域方面建立的抽象层次进行必要的增补和调整,同时,OOD还必须对人机交互、任务管理和数据管理 3 个部分的内容进行抽象,最后建立完整的 OOD 模型。OOA与OOD不存在转换的问题。

3、特点

(1)强调系统开发的整体性和全局性;

(2)侧重于数据转换的过程而不是数据本身;

(3)系统的开发周期长;

(4)封装性。对象的概念突破了传统数据与操作分离的模式。对象作为独立存在的实体,将自由数据和操作封闭在一起,使自身的状态、行为局部化。

(5)继承性。继承是面向对象特有的,亦是最有力的机制。通过类继承可以弥补由封装对象而带来的诸如数据或操作冗余的问题,通过继承支持重用,实现软件资源共享、演化以及增强扩充。

(6)多态性。同一消息发送至不同类或对象可引起不同的操作,使软件开发设计更便利,编码更灵活。

(7)易维护性。面向对象的抽象封装使对象信息隐藏在局部。当对象进行修改,或对象自身产生错误的时候,由此带来的影响仅仅局限在对象内部而不会波及其他对象乃至整个系统环境,这极大方便了软件设计、构造和运行过程中的检错、修改。

4、局限

(1) 面向对象方法中对象的确定有时会因客观边界模糊而难以确定,这样就很难保证软件描述的正确性;

(2) 面向对象在描述问题域方面的不足。在问题域模型中,面向对象方法把具体或抽象的问题域现象直接表述为对象,同时把现象类型直接表述为类。大多数OOA方法支持多视角模型,即对同一问题域现象,不同的主体可以将它表述为同一对象或类型。但系统的描述者在应用面向对象方法进行建模时常遇到这样的困惑,描述者力图通过面向对象的表述对存在的问题域现象达成一致,然而,结果得到的对象或类并不很适合于某个描述者对对象的独自观察而得到的表述。也就是说,在面向对象模型中,不同的系统描述者在观察描述同一个问题域现象时,都可以把该现象表述为对象(或类),但却不能表述各自之间存在的对问题域现象的不同认识,除非通过底层结构(如操作、协议等) 的处理。

三、总结

从上面的分析设计过程可以看出,结构化方法是对系统功能建模,基于功能分解设计系统结构,从内部功能上模拟客观世界。面向对象方法则是从行为的角度进行建模,基于行为分析法认定对象及它们之间的关系,从内部结构上模拟客观世界,它采用了新概念、新方法、新的表示形式,有助于软件开发人员加深对系统的理解,给软件开发带来很大益处。但在实际应用中,开发的大型软件系统通常是混合型系统,即需要处理实时信息、又需要数据库的支持,同时还涉及大量的事务性操作请求,在这种情况下,在选用面向对象方法的同时在局部处理上可以结合使用结构化方法。

无论是用什么方法开发软件,交给用户的都应该是满足用户当前需求的软件。用户在短期内不会发现开发者使用先进方法学给他们带来的益处,倒是开发者本身由于大大减轻了开发负担而最先受益。但是随着时间的推移,获得最大收益的还是用户,因为软件的长期质量(包括维护成本低和生存周期长)给用户带来的好处才是根本的。

 

参考文献

1、缪淮扣,高晓雷,李刚.结构化方法、面向对象方法和形式方法的比较与结合

2、张莉,裘国永. 结构化方法与面向对象方法的比较分析

3、霍迎旦.软件工程中结构化方法与面向对象方法之比较

4、栾咏红.结构化方法学与面向对象方法学在软件开发中的比较

5、汪寒昊,谢加胜,邢跃.软件开发方法——结构化方法与面向对象方法比较

posted @ 2016-12-11 16:37  1406卜令军  阅读(603)  评论(0编辑  收藏  举报