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

1.前言

结构化程序设计方法和面向对象程序设计方法是当前计算机行业最常用的程序设计方法。

2.结构化方法

结构化程序设计是进行以模块功能和处理过程设计为主的详细设计的基本原则。其概念最早由迪克斯特拉提出。

2.1基本思想

      结构化程序设计的主要观点是采用自顶向下、逐步求精的程序设计方法;使用三种基本控制结构构造程序,任何程序都可由顺序、选择、循环三种基本控制结构构造。结构化程序以模块化设计为中心,将待开发的软件系统划分为若干个相互独立的模块,使完成每一个模块的工作变单纯而明确,为设计一些较大的软件打下了良好的基础。结构化程序设计的基本原则就是:(1)自顶向下。程序设计时,应先考虑总体,后考虑细节;先考虑全局目标,后考虑局部目标。不要一开始就过多追求众多的细节,先从最上层总目标开始设计,逐步使问题具体化。(2)逐步求精。对复杂问题,应设计一些子目标作为过渡,逐步细化。(3)模块化设计。一个复杂问题,肯定是由若干相对简单的问题构成。模块化是把程序要解决的总目标分解为子目标,再进一步分解为具体的小目标,把每一个小目标称为一个模块。

2.2基本步骤

结构化分析(SA):

①  分析当前的情况,做出反映当前物理模型的DFD;

  ②  推导出等价的逻辑模型的DFD;

  ③  设计新的逻辑系统,生成数据字典和基元描述;

④  建立人机接口,提出可供选择的目标系统物理模型的DFD;

结构化设计(SD)

①   评审和细化数据流图;

  ②   确定数据流图的类型;

  ③   把数据流图映射到软件模块结构;

  ④   基于数据流图逐层分解高层模块,设计中下层模块;

  ⑤   对模块的控制结构和算法进行优化;

  ⑥   描述模块接口;

3.面向对象方法

     面向对象程序设计(OOP)是一种程序设计范型,同时也是一种程序开发的方法。对象指的是类的实例。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性。

3.1基本思想

      面向对象程序设计可以看作一种在程序中包含各种独立而又互相调用的对象的思想,这与传统的思想刚好相反:传统的程序设计主张将程序看作一系列函数的集合,或者直接就是一系列对电脑下达的指令。面向对象程序设计中的每一个对象都应该能够接受数据、处理数据并将数据传达给其它对象,因此它们都可以被看作一个小型的“机器”,即对象。

      使用现实世界的概念抽象的思考问题从而自然地解决问题。强调模拟现实世界中的概念而不强调过程或算法,支持重用。基本思想归结起来就是代码复用,封装,继承,多态性。

3.2基本步骤

面向对象分析:

①   确定问题域和解空间;

  ②   区分类和对象;

  ③   区分整体对象以及组成部分,确定类的关系以及内部结构;

  ④   定义类的数据(属性)和操作(处理事务的行为);

⑤   确定附加的系统约束

面向对象设计:

       ①   改进和完善分析阶段对系统的分析结果;

  ②   设计交互过程和用户接口;

  ③   设计任务管理、子系统以及任务之间的协调方式;

  ④   设计全局资源,确定任务或者子系统的资源分配;

  ⑤   设计对象;

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

     在上面我们已经分别对结构化程序设计和面向对象程序合计的基本思想和主要步骤都进行了描述。现在我们来总结一些结构化方法和面向对象方法的不同。

首先结构化设计是面向整体,将一个问题分解成逻辑上相对独立的几个“过程,”然后再层层分解,逐层向下。结构化设计就是将复杂问题分解简单化,模块化。将一个大的负责问题分解成若干模块后,再将模块精细化,然后再次分解,逐层分解下去。最后依次处理模块的时候,每个模块都相对简单。这种自顶向下,逐步求精能够降低程序设计的难度,特别是复杂问题的设计难度。面向过程的程序设计,在一开始就不是面向整个整体,而是面向对象。在客观世界中,任何问题都是由“对象”发生的,而且对象之间也会存在一定的联系。面向对象程序设计方法就是以对象为基本单位来操作,面向对象方法就是将问题抽象成一个个对象来解决问题。也就是说,面向对象方法和结构化方法编程的时候,基本的思想就是不同的,结构化编程是以编程者为解决问题的出发点,将复杂的问题简单化,模块化。将问题逐层分解,再解决问题。而面向对象编程是以对象的全体为解决的出发点,每个对象都具有相应的属性和方法,最后整体解决问题。二者解决问题的出发点就是不同的,所以相应的结构化设计会分层、模块化,而面向对象设计就是将问题抽象化为对象。

除了基本思想,结构化设计在解决问题的时候需要将问题抽象成物理模型,只有这样才能把问题分成若干个模块,分解到下一层。在这个过程中,模块和分解过程是至关重要的,要将问题一步步分解为合适的模块。面向对象编程在解决问题的时候,分类和封装很重要。在面向对象方法编程时候,我们将属性和操作相同的对象都归为相同的类,这样大大提高了代码的复用率,为了提高程序的安全性,封装也需要时时刻刻都考虑到。

最后,结构化方法编程和面向对象方法编程在解决问题的时候都给人们提供了很好的方法。结构化编程在解决问题的时候,能够将复杂的问题简单化,使得编程的时候,有一个非常清晰的思路,大大的方便了问题的解决。而面向对象方法编程的时候,对象的设计能够让程序维护人员很容易了解代码的结构,功能。同时,因为面向对象方法编程是将问题抽象成一个个方法,所以方法之间的独立性比模块要高,当代码需要修改的时候,不会牵一发而动全身。同时由于较高的独立性,使得团队能够很好的配合开发大型软件。结构化编程,由于清晰的思路,在解决较简单的问题时有比较大的思路,但是使用结构化方法编程需要对代码有着全局的认识,宏观的把控,深刻的理解。在大型程序的开发中,由于团队合作,所以不需要每个人都清晰的理解整个工程,所以在大型软件上面向对象方法编程就有优势。但是这并不代表在开发大型软件时结构化方法编程就被遗弃,在程序中,虽然总体程序是使用面向对象方法来设计的,处处都有问题的抽象,问题的分解,都有结构化方法编程的使用。

posted @ 2016-12-21 20:40  小黑子的爸爸  阅读(352)  评论(0)    收藏  举报