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

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

结构化方法和面向对象方法皆为在开发软件时所采用的指导开发活动的系统方法。二者之间有所联系,但是亦有很大区别。

一、构化方法

  结构化编程这一概念最早由艾兹格·W·迪杰斯特拉(Edsger Wybe Dijkstra)提出 ,后经赖瑞、迈克尔、汤姆等人完善,最终形成了结构化方法这一完整的软件开发开发体系。

  结构化方法是一种以过程为中心的方法,其由结构化分析(SA)、结构化设计(SD)、结构化实现(SP)三部分组成(另有一说是由SA和SD组成)。其基本思想是将现实世界的复杂应用问题进行分阶段的分解,面向过程设计问题空间的解域,强调自顶向下、逐层分解求精、模块化设计。让每个阶段处理的问题都在人们容易理解和处理的范围之内。

  方法步骤:

  1. 结构化分析SA

(1)     分析当前的情况,做出反映当前物理模型的数据流图(DFD);

(2)     推导出等价的逻辑模型的DFD;

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

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

(5)     确定各种方案的成本和风险等级,据此对各种方案进行分析;

(6)     选择一种方案;

(7)     建立完整的需求规约。

  2.结构化设计SD

(1)     评审和细化数据流图;

(2)     确定数据流图的类型;

(3)     把数据流图映射到软件模块结构,设计出模块结构的上层;

(4)     基于数据流图逐步分解高层模块,设计中下层模块;

(5)     对模块结构进行优化,得到更为合理的软件结构;

(6)     描述模块接口。

  3.结构化实现SP

(1)     编码:根据需求,选择合适的语言和编译环境用代码将设计实现,同时要确保代码的简明性、易读性、和效率性;

(2)     测试:为了发现程序中的错误,在开发过程中,根据各阶段的规格说明和程序的内部结构设计出对应的测试用例,不断地对程序进行测试,要确保测试用例的覆盖率;

(3)     调试:在测试中发现错误后通过调试确定错误的原因和位置并改正。

二、面向对象方法

  面向对象方法与结构化方法相同,都是起源于编程方法。面向对象起源于Simula,由Smalltalk奠基,最后在人们不断地完善下得以完成。

  面向对象方法正如其名字,是一种以对象为中心的方法,由面向对象分析(OOA)和面向对象设计(OOD)组成。面向对象方法基本思想是使用现实世界的概念抽象地思考问题从而自然地解决问题。强调模拟现实世界中的概念而不强调算法或是过程,支持重用。

  基本概念:

  面向对象方法有着许多区别于结构化方法的概念。

  对象:对象指的是要研究的任何事物。从一本书到一家图书馆,单的整数到整数列庞大的数据库、极其复杂的自动化工厂、航天飞机都可看作对象,它不仅能表示有形的实体,也能表示无形的(抽象的)规则、计划或事件。对象由数据(描述事物的属性)和作用于数据的操作(体现事物的行为)构成一独立整体。从程序设计者来看,对象是一个程序模块,从用户来看,对象为他们提供所希望的行为。在对内的操作通常称为方法。一个对象请求另一对象为其服务的方式是通过发送消息。

  类:类是对象的模板。即类是对一组有相同数据和相同操作的对象的定义,一个类所包含的方法和数据描述一组对象的共同行为和属性。类是在对象之上的抽象,对象则是类的具体化,是类的实例。类可有其子类,也可有其它类,形成类层次结构。

  消息:消息是对象之间进行通信的一种规格说明。一般它由三部分组成:接收消息的对象、消息名及实际变元。

  继承:子类从父类获得父类的所有成员和方法。

  方法步骤:

  1.OOA

(1)  确定问题域;

(2)  区分类和对象;

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

(4)  定义属性和服务;

(5)  确定附加的系统约束。

  2.OOD

(1)     该机和完善系统分析的结果;

(2)     设计交互过程和用户接口;

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

(4)     设计全局资源你,确定任务或子系统的资源分配

(5)     对象设计。

方法特性:

  面向对象方法作为一种新的软件开发方法亦有着一些新的特性

  1.封装性

封装是一种信息隐蔽技术,它体现于类的说明,是对象的重要特性。封装使数据和加工该数据的方法(函数)封装为一个整体,以实现独立性很强的模块,使得用户只能见到对象的外特性(对象能接受哪些消息,具有那些处理能力),而对象的内特性(保存内部状态的私有数据和实现加工能力的算法)对用户是隐蔽的。封装的目的在于把对象的设计者和对象者的使用分开,使用者不必知晓行为实现的细节,只须用设计者提供的消息来访问该对象。

  2.继承性

继承性是子类自动共享父类之间数据和方法的机制。它由类的派生功能体现。一个类直接继职其它类的全部描述,同时可修改和扩充。

继承具有传递性。继承分为单继承(一个子类只有一父类)和多重继承(一个类有多个父类)。类的对象是各自封闭的,如果没继承性机制,则类对象中数据、方法就会出现大量重复。继承不仅支持系统的可重用性,而且还促进系统的可扩充性。

  3.多态性

对象根据所接收的消息而做出动作。同一消息为不同的对象接受时可产生完全不同的行动,这种现象称为多态性。利用多态性用户可发送一个通用的信息,而将所有的实现细节都留给接受消息的对象自行决定,如是,同一消息即可调用不同的方法。多态性的实现受到继承性的支持,利用类继承的层次关系,把具有通用功能的协议存放在类层次中尽可能高的地方,而将实现这一功能的不同方法置于较低层次,这样,在这些低层次上生成的对象就能给通用消息以不同的响应。在OOPL中可通过在派生类中重定义基类函数(定义为重载函数或虚函数)来实现多态性。

三、结构化方法与面向对象方法的相似之处[1]

  1.分解与抽象

  分解和抽象是软件开发中控制问题复杂性的重要原则。分解即化整分零,将问题剥茧抽丝,层层消化;抽象则是通过分解体现,在逐层分解时,上层是下层的抽象,下层是上层的具体解释和体现,运用抽象可以不用一次考虑太多细节,而逐渐的有计划有层次的了解更多细节。面向对象方法与结构化方法在运用分解和抽象原则上的要求是完全一致的。

  2.局部化

  局部化是软件开发中的一个重要原则,即不希望软件一部分过多 地涉及或影响软件的其它部分。在结构化方法中,局部化主要体现在代 码与数据的分隔化,即程序各部分除必要的信息交流外,彼此相互隔离 而互不影响,而面向对象方法则采用数据、代码的封装,即将数据、代码和操作方法封装成一个类似“黑箱”的整体对象,提高了程序的可靠性和安全性,同时增强了系统的可维护性。也就是说面向对象方法比结构化方法的运用更加深入更彻底。

四、结构化方法与面向对象方法的区别

  1.处理问题的角度

  结构化方法正如上文所说,是强调过程的方法,其将问题分解为过程后抽象化,模块化来解决问题;面向对象方法将问题抽象为一个个的对象。

  2.基本单位

  结构化方法的基本单位是模块,模块的层次结构表示各模块之间的关系;面向对象方法的基本单位是类,类之间通过继承和实现来表示相互的关系。

  3.基本单位对整体的影响

  结构化方法中,若是有某个模块出了问题,整个过程都会受到影响,除非进行一次全面的检查,不然无法定位问题的所在。而在面向对象方法中,单个类出了问题对整个软件的影响相对较小,且容易定位。

  4.重用性

  采用结构化方法开发的软件完成后就难以进行修改和扩充。系统接口在结构化分析时就已经定下,当想对接口进行改变时,系统的结构往往需要进行大幅改变;面向对象方法开发的软件可以通过使用继承比较简单地做到。

 

 

[1]http://wenku.baidu.com/link?url=xUpuNM5BnpsMRrSjJ0oflw0qtKqWNWipbzshi8iJ-2lynrOfAEjePWBBOasFq_mJzs3hmdxSFJooEuSIMpJHt_FbFZRPA9Gm_8IzJDHJC93

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