首页 > 代码库 > 结构化方法与面向对象方法之比较

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

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

  软件开发的方法众多,其中最具有代表性的是结构化方法与面向对象方法。这两种方法在软件开发中有着广泛的应用。由于其解决问题的思想不同,使用的手段不同,在不同的问题环境下,也各有优劣。   

  一、结构化方法    

  结构化方法(SD)是传统的软件开发方法之一,它把问题的求解过程分阶段进行,自顶向下逐层分解,使得每个阶段处理的问题都控制在可控的范围内。结构化方法主要由结构化分析、结构化设计、结构化程序设计这三部分有机组合而成。

  1、结构化分析

  结构化分析是一种面向数据流的系统分析方法。一般为自顶向下逐步求解,以一系列已经被认为视正确的原理与技术为支撑,使用数据流图、数据字典、判定树、判定表等手段,使开发方法和系统具有合理性。

  数据流图:

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

  数据字典:

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

  判定树:

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

  2、结构化设计

  是一种面向数据流的设计方法,用来确定软件的结构。它的基本思想是根据结构化分析的数据流图建立一个模块结构图。结构化设计具有如下特点:

  A.模块结构相对独立,功能单一。结构化设计将系统设计成多个相对独立、功能单一的模块组成的结构。每一个模块可以单独地被理解、实现、测试、修改,因其独立性而防止了错误在模块之间的蔓延。

  B.模块遵循内部联系大、块间联系小

  C.采用模块结构图的描述方式。

  3、结构化程序设计

  结构化程序设计是过程是程序设计的一个子集,它有三种基本的结构:顺序结构、选择结构、循环结构。而任何程序都可以由这三种基本控制结构构造。

  二、面向对象方法

  面向对象方法实际上是从内部结构模拟客观世界。它主张对象是对现实世界客观实体的描述,对象由属性和相关的操作组成,是组成系统的基本结构。面向对象从对象出发构造软件系统,在构造的过程中尽可能运用人的思维方式,以现实存在的事物为中心建模,抽象出类作为系统的基本构成单位,以此来维持问题域中事物及其相互关系的本来面貌。面向对象技术强调运用人类在日常逻辑思维中采用的思想方法和原则,如抽象、分类、继承、封装等。

  封装

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

  继承

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

  多态

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

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

  A. 处理问题的角度

  面向对象方法强调把问题域直接映射到对象与对象间的接口,它利用符合人们通常思维的模式来模拟客观世界。结构化方法则是强调过程抽象和模块化。是以过程为中心处理客观世界的问题。

  B. 数据处理方式

  面向对象方法将数据与操作封装起来,包装成一个对象。其设计思想要求尽可能减少类之间的交互,数据的操作尽量由对象自己完成。而机构化方法则直接由函数处理数据,没有其它要求。

  C. 控制程序方式

  面向对象方法通过事件驱动,激活和控制运行程序,而结构化方法只能按照设计来调用和返回。各个模块之间存在控制和被控制的关系。

  D. 名词术语不同

  面向对象中,使用类、继承、封装等术语,而结构化方法则一般使用函数、过程、数据等名词。

  E.  处理问题的基本单位

  面向对象旨在用类和对象模拟客观世界的实体,所以其处理问题的基本单位是类,所以更适合人类阅读与理解实现。而结构化方法则是对处理过程的抽象,将处理问题的基本单位变为处理过程中的某个函数。

  F.  解决问题的原则

  面向对象方法由于其模拟客观世界实体的特性,从分析问题到设计再到实现都可以采用一致的模型概念,其解决问题的过程有一致性。而结构化方法强调自顶向下逐步分解问题,逐步求解,从分析问题、设计、实现逐步完善,从而不具有一致性。

  结构化方法是对系统功能的建模,基于功能来分解设计系统结构,从内部功能上模拟客观世界,其建立起的模型可读性较好,善于把复杂的系统用多个满足独立性要求的小模块实现,有效的提高了软件开发质量。但是当用户的需求发生变更的时候,作为基本组件的部分很容易受到影响,而对它们的修改往往会引起系统的很大变化,这无疑增加了维护难度。

  而面向对象方法则从行为上建模,从内部结构上模拟客观世界。由于其以数据为中心描述系统,所以具有很强的稳定性,在模型的基础上映射出源代码也是简单的事情。所以进行系统维护和组件的重用是一件容易的事情,可以提高软件开发效率,适合需求经常发生变化的情景。另外,在以图形化界面为中心的程序开发中,面向对象方法也被广泛使用。

  因此,在实际的软件开发中,两种方法都不可或缺。两种方法的选择取舍依赖于待解决的具体问题和实际环境。甚至我们可以将这两种方法结合起来,比如某些系统既需要处理实时信息、又需要数据库支持,同时涉及到大量并发,这时我们可以在使用面向对象方法的同时在局部问题上采用结构化方法进行解决。

 

参考文献:

【1】 张 莉,裘国永. 结构化方法与面向对象方法的比较分析. 陕西师范大学学报(自然科学版)

【2】贺宝军,王军. 面向对象方法与结构化方法. 佛山科学技术学院学报(自然科学版)

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