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

在上个世纪60年代中期爆发了众所周知的软件危机。为了克服这一危机,在19681969年连续召开的两次著名的NATO会议上提出了软件工程这一术语,并在以后不断发展、完善。与此同时,软件研究人员也在不断探索新的软件开发方法。至今已形成了八类软件开发方法。本文对其中的两种方法——结构化方法和面向对象方法进行比较。

一、结构化方法。

    1.基本思想。结构化方法的基本要点是:自顶向下、逐步求精、模块化设计、结构化编码。

    结构化分析方法是以自顶向下,逐步求精为基点,以一系列经过实践的考验被认为是正确的原理和技术为支撑,以数据流图,数据字典,结构化语言,判定表,判定树等图形表达为主要手段,强调开发方法的结构合理性和系统的结构合理性的软件分析方法。

结构化设计方法是以自顶向下,逐步求精,模块化为基点,以模块化,抽象,逐层分解求精,信息隐蔽化局部化和保持模块独立为准则的设计软件的数据架构和模块架构的方法学。

结构化方法按软件生命周期划分,有结构化分析(SA),结构化设计(SD),结构化实现(SP)。 其中要强调的是,结构化方法学是一个思想准则的体系,虽然有明确的阶段和步骤,但是也集成了很多原则性的东西,所以学会结构化方法,不是能够单从理论知识上去了解就足够的,要的更多的还是实践中慢慢的理解个个准则,慢慢将其变成自己的方法学。

数据流图:反映系统中需要完成的逻辑功能,是一种功能模型,一般在需求分析阶段产生。数据流图可以根据层级分为顶层数据流图、中层数据流图、底层数据流图。顶层数据流图用一个加工来表示整个系统,输出的数据流和输入的数据流为系统的输入输出数据,表示出系统的范围。中层的数据流图是对上层的数据流图中的某个加工进行进一步的细化,而本层的数据流图的某个加工也可以再次被细化,变为另一个子数据流图。底层的数据流图一般是不能再分解的数据流图。

数据字典:数据字典用于对数据的数据项、数据结构、数据流、存储、处理等进行定义描述,目的是对数据流程图中的各个元素做以详细说明。

判定树:又被称为决策树,是一种描述加工的图形工具,适合描述问题处理中存在多个判断,且每个判断又和若干条件有关。利用判定树描述时,要细分判定条件与决策,找出判定条件的从属、并列关系,以此为依据构建判定树。

2.所遵循的基本原则。

   1)抽象原则

    抽象原则是一切系统科学方法都必须遵循的基本原则它注重把握系统的本质内容而忽略与系统当前目标无关的内容它是一种基本的认知过程和思维方式

 

    2)分解原则

    分解原则是结构化方法中最基本的原则它是一种先总体后局部的思想原则在构造信息系统模型时它采用自顶向下分层解决的方法。

 

3)模块化原则

模块化是结构化方法最基本的分解原则的具体应用它主要出现在结构化设计阶段中其目标是将系统分解成具有特定功能的若干模块从而完成系统指定的各项功能。

二、面向对象方法。

1. 简介。面向对象方法(Object-Oriented Method)是一种把面向对象的思想应用于软件开发过程中,指导开发活动的系统方法,简称OO (Object-Oriented)方法,是建立在"对象"概念基础上的方法学。对象是由数据和容许的操作组成的封装体,与客观实体有直接对应关系,一个对象类定义了具有相似性质的一组对象。而每继承性是对具有层次关系的类的属性和操作进行共享的一种方式。所谓面向对象就是基于对象概念,以对象为中心,以类和继承为构造机制,来认识、理解、刻画客观世界和设计、构建相应的软件系统。

2. 基本概念。

封装

封装使得对象的设计和使用得以分开,使用者不必知道对象的实现细节即可访问。它主要用于类的说明,使得类成为一种具有独立性的模块,拥有自己的属性和操作的方法,而类之间的交互尽可能的减少。

继承

继承性是类之间共享数据与方法的一种机制,子类可以继承父类方法和属性。继承机制的存在,减少了冗余代码,增强了系统和类的重用性。

多态

多态使得同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。利用多态机制,可以解决项目中的紧耦合问题,提高程序的可扩展性。应用程序不必再为每个派生类编写功能调用,只需要对抽象基类进行处理即可,这提高了程序的可复用性。派生类的功能可以被基类的方法调用,实现了向后兼容,这提高了程序的可维护性。

3.特点。

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

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

3)系统的开发周期长。

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

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

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

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

三、比较。

相同之处:1、二者在分解和抽象原则上一致。2.局部化和重用性设计上的一致。

区别:

1、处理问题时的出发点不同  结构化方法是强调过程抽象化和模块化,以过程为中心构造或处 理客观世界问题的,它是一种面向过程的开发方法;面向对象方法强调 把问题域的要领直接影射到对象及对象之间的接口上,是用符合人们 通常的思维方式来处理客观世界的问题。

2、处理问题的基本单位和层次逻辑关系不同  结构化方法把客观世界的问题抽象成计算机可以处理的过程,处 理问题的基本单位是能清晰表达过程的模块,用模块的层次结构概括 模块或模块间的关系和功能;面向对象方法是用计算机逻辑来模拟客 观世界中的物理存在,以对象的集合类作为处理问题的基本单位,尽可 能使计算机世界向客观世界靠拢,以使问题的处理更直截了当,面向对 象方法是用类的层次结构来体现类之间的继承和发展。

3、 数据处理方式与控制程序方式不同 。结构化方法是直接通过程序来处理数据,处理完毕后即可显示处 理结果,在控制程序方式上是按照设计调用或返回程序不能自由导航, 各模块程序之间存在着控制与被控制的关系;面向对象方法将数据与 对应的代码封装成一个整体,原则上其它对象不能直接修改其数据,即 对象的修改只能由自身的成员函数完成,控制程序方式上是通过“事件 驱动”来激活和运行程序。

四、结语。软件开发的目标是以最小的代价开发出满足用户需求 的软件。为此,根据系统的实际需求,分别针对具体情况选择采用不同的 设计方法,可以充分发挥面向对象与结构化方法各自的优势。目前在大 多数软件系统的分析设计过程中,这两种方法都兼而有之。开发者在开发实践中, 从实际出发, 考虑执行效率、开发 者的技术水平、系统规模、是否为易需求变化的系统等因素, 尽量利用 它们各自的优点, 避免它们的缺点。如对于开发一些小型嵌入式实时监 控系统或同等稳定小系统, 可用结构化方法;对于开发入门者, 使用结 构化方法和面向对象方法相结合;对于大型系统或者需求易变系统, 使 用面向对象方法。总之, 根据实际出发, 选取合适的软件开发方法, 达到 最佳的开发效益。

 

 

 

1http://wenku.baidu.com/view/861ce9b91a37f111f1855b74.html

2】《软件开发方法——结构化方法与面向对象方法比较》 科技信息 201113期 作者:汪寒昊 谢加胜 邢 跃