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

 

引言

计算机软件在现代科学技术中有着十分重要地位和作用,已成为信息社会高技术竞争的关键领域之一。为了在项目投资规模和时间限制内,设计、实现符合用户需求的高质量软件,根据软件开发的特点,人们提出了多种软件开发策略,软件开发方法不断推陈出新,其中结构化方法经过30多年的研究及应用,最为成熟且影响最大,直到现在仍有许多系统是用它开发的。而面向对象方法是在结构化方法、信息建模方法等基础上发展起来的,10年来发展较快

 

一、结构化方法

 

1.1简介

  结构化方法(Structured Methodology)是计算学科的一种典型的系统开发方法。它采用了系统科学的思想方法,从层次的角度,自顶向下地分析和设计系统。结构化方法包括结构化分析(Structured Analysis,简称SA)、结构化设计(Structured Design,简称SD)和结构化程序设计(Structured Program Design,简称SP)三部分内容。其中,SASD主要属于学科抽象的内容,SP则主要属于学科设计方面的内容。

 

1.2起源

  1966年,C-BOhmG-Jacopini提出了关于“程序结构”的理论,并给出了任何程序的逻辑结构都可以用顺序结构、选择结构和循环结构来表示的证明。在程序结构理论的基础上,1968年,戴克斯特拉提出了“GOTO语句是有害的”的问题,并引起普遍重视,SP逐渐形成,并成为计算机软件领域的重要方法,对计算机软件的发展具有重要的意义。

 

1.3基本原则

  结构化方法基于功能分解设计系统结构,通过不断把复杂的处理逐层分解来简化问题,它从内部功能上模拟客观世界。用结构化开发的软件运行效率较高,且能够增加软件系统的可靠性。

  结构化方法的基本思想就是将待解决的问题看作一个系统,从而用系统科学的思想方法来分析和解决问题。结构化方法遵循以下基本原则。

  ①抽象原则。

  ②分解原则。

  ③模块化原则。

 

1.4建模

  建模通常是从系统的需求分析开始。在结构化方法中,就是使用SA方法构建系统的环境模型。然后使用SD方法,确定系统的行为和功能模型。最后用SP方法进行系统的设计。SD的主要任务就是要在系统环境模型的基础上建立系统的行为和功能模型,完成系统内部行为的描述。

 

1.5数据字典

  数据字典是一个包含所有系统数据元素定义的仓库。数据元素的定义必须是精确的、严格的和明确的。一个实体一般应包括以下几个部分的内容:

  ①名字。

  ②别名。

  ③用途。

  ④内容描述。

  ⑤备注信息。

 

1.6数据流图

  数据流图是SASD的核心技术,它采用面向处理过程的思想来描述系统,它是一种描述信息流和数据从输入到输出变换的应用图形技术。模拟系统的一个大致边界,并展示系统和外部的接口、数据的输入和输出以及数据的存储。

 

二、面向对象方法

 

2.1简介

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

 

2.2起源

  面向对象方法起源于面向对象程序语言(Object Oriented Program Language,简称OOPL)。面向对象程序语言始于20世纪60年代后期,第一个OOPL是挪威计算中心的Kristen-NygaardOle-JohanDahl1967年研制的Simula语言,该语言引入了许多面向对象的概念,如类和继承性等。

 

2.3发展

  20世纪90年代,面向对象分析(Object Oriented Analysis,简称OOA)和面向对象设计(Object Oriented Design,简称OOD)开始成熟,一些实用的面向对象开发方法和技术相继出现。如G-Booch提出的面向对象开发方法,P-CoadE-Yourdon提出的OOAOOD等等。这些方法的提出,标志着面向对象方法逐步发展成为完整的系统化的技术体系。

 

2.4基本思想

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

 

2.5模型

  面向对象模型主要由OOA模型、OOD模型组成。其中,OOA主要属于学科抽象方面的内容,OOD主要属于学科设计方面的内容。

 

2.6OOA模型

  OOA关心的是构建现实世界的模型问题。根据系统科学的思想,首先需要对复杂的系统进行分解,最常用的分解方法就是分层。OOA模型划分为5个层次,即:主题层、对象层、结构层、属性层和服务层。OOA的主要任务就是要在问题域上构建具有这5个层次内容的OOA模型。

 

2.7OOD模型

  OOD根据设计的需要,仅对OOA在问题域方面建立的5个抽象层次进行必要的增补和调整,同时,OOD还必须对人机交互、任务管理和数据管理3个部分的内容进行抽象,最后建立完整的OOD模型。

 

三、优缺点比较

 

3.1结构化方法的缺陷

  1.重用性差。结构化分析与设计清楚的定义了系统的接口, 当系统对外界接口发生变动时,可能会造成系统结构产生较大变动, 难以扩充新的功能接口

  2.软件可维护性差。由于软件的可修改性差,导致维护困难,造成维护时费用和成本高,可维护性变差

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

 

3.2面向对象方法的缺陷

  1.面向对象方法中对象的确定有时会因客观边界模糊而难以确定,这样就很难保证软件描述的正确性。开发过程管理要求高,整个开发过程要经过“修改—评价—再修改”的多次反复。

  2.面向对象方法通过信息隐藏和封装等手段屏蔽了对象内部的执行细节,控制了错误的蔓延,但发生错误时,定位故障的代价大,尤其是继承的深度很大时。对于需求变化频繁的系统,得到一个高度可复用的面向对象软件系统设计是很困难的事情。

 

3.3结构化方法的优势

  1.从系统整体出发,强调在整体优化的条件下“自上而下”地分析和设计,保证了系统的整体性和目标的一致性

  2.结构化方法强调功能抽象和模块化。由于它采取了分块处理问题的方法,可以把一个比较复杂的问题分解为若干个容易处理解决的部分,从而降低了问题处理的难度。

  3.严格区分系统开发的阶段性,每一阶段的工作成果是下一阶段的依据,便于系统开发的管理和控制。

  4.文档规范化,按工程标准建立标准化的文档资料,便于软件在以后的维护。而且由于结构化方法思路清晰,条理清楚,又有效地分解了繁复的问题,使得编写程序时清晰明了,也大大简化了编程人员繁杂的工作。

 

3.4面向对象方法的优势

  1.编程容易。因为面向对象更接近于现实,所以你可以从现实的东西出发,进行适当的抽象。

  2.面向对象方法的可重用好,并且由于它是把大的问题分解成相互独立的小问题处理,降低了开发的技术难度,开发工作的管理也变的容易了,开发大型软件边的容易,成本也降低了。

  3.它与人类习惯的思维方法一致,使得使用者和维护人员都容易理解,在用户使用时不会出现理解困难,在软件维护中可维护性也较高,并且易于测试和调试。

  4.面向对象可以使工程更加模块化,实现更低耦合高内聚思想。

  5.符合人们认识事物的规律,系统开发循序渐进,反复修改,确保较好的用户满意度。

 

结语

  结构化方法对系统功能建模,基于功能分解设计系统结构,从内部功能上模拟客观世界。面向对象方法从行为的角度进行建模,基于行为分析法认定对象及他们之间的关系,从内部结构上模拟客观世界。

  对于开发一些小型应用,可用结构化方法。对于大型系统或者需求易变系统,更适合使用面向对象方法,也可以综合运用两种方法进行开发。总之,在开发实践中,要尽量利用它们各自的优势,避免他们的缺陷。

 

参考文献

[1]软件开发方法——结构化方法与面向对象方法比较  汪寒昊,谢加胜,邢跃 - 《科技信息》, 2011(13):77-78

[2]结构化方法与面向对象方法的比较分析  张莉,裘国永 - 《陕西师范大学学报(自科版), 2001, 29(2):29-32