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

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

 

软件开发常用的两种方法便是结构化方法和面对对象方法。我们在之前的学习中也接触了这两种软件开发方法,它们各有利弊,这也是它们共同存在的原因,下面就来分别介绍一下这两种软件开发方法。

结构化方法

结构化方法对现实世界的应用问题进行分解,面向过程设计问题空间的解域,强调自顶向下、逐步求精、模块化设计。这是一种传统的软件开发方法,由结构化分析、结构化设计和结构化程序设计三部分组合而成。它把一个复杂的问题分阶段求解,自顶向下、逐层分解的方法使每个阶段都控制在人们容易处理的范围内。

结构化分析SA

结构化分析包括将系统概念转换为用数据及控制的来表示,也就是转换为数据流程图。数据流程图中的程序以泡泡来表示,因此也称为“泡泡图”。不过完整的数据流程图中可能有许多的“泡泡”,使得很难去追踪数据流动的情形。此时可以先定义外界需要系统回应的事件,每一个事件指定一个泡泡,当系统定义完成后,再将事件的泡泡和回应的程序的泡泡相连接。也可以将程序对应泡泡加以分组,组合成较高级的程序。数据字典用来描述数据和指令的流动,而用程序规格来描述交易或数据转换的相关信息。

系统关系图

系统关系图将系统放在整个图的中心,不描述其内部结构,周围则是和其有关的系统、活动及环境,环境图的目的是专注在哪些会影响系统需求及限制的外部因素及事件。它有助于了解系统和外界的关系。

数据流程图DFD

它是描述系统数据流程的工具,它将数据独立抽象出来,通过图形方式描述信息的实际流程。

对于复杂的软件系统,DFD可分层描述:

顶层。决定系统范围,说明系统的边界,体现了系统的各方面功能。

中间层。中间层有若干,是上层加工的分解,也是下层若干加工的抽象。

底层。若DFD中没有加工可分解,便是底层DFD。体现了系统的基本加工。

DFD基本成分:

外部实体

处理过程

处理指对数据逻辑处理,也就是数据变换,它用来改变数据值。而每一种处理又包括数据输入、数据处理和数据输出等部分。在数据流程图中处理过程用带圆角的长方形表示处理,长方形分三个部分,标识部分用来标识一个功能,功能描述部分是必不可少的,功能执行部门表示功能由谁来完成。

数据流

数据流是指处理功能的输入或输出。它用来表示中间数据流值,但不能用来改变数据值。数据流是模拟系统数据在系统中传递过程的工具。在数据流程图中用一个水平箭头或垂直箭头表示,箭头指出数据的流动方向。

数据存储

数据存储表示数据保存的地方,它用来存储数据。系统处理从数据存储中提取数据,也将处理的数据返回数据存储。与数据流不同的是数据存储本身不产生任何操作,它仅仅响应存储和访问数据的要求。在数据流程图中数据存储用右边开口的长方条表示。在长方条内写上数据存储名字。

数据字典

数据字典是结构化分析方法的核心。数据字典是对所有与系统相关的数据元素的一个有组织的列表,以及精确严格的定义,使用户和系统分析员对输入、输出、存储和中间结果有共同的理解。数据字典的作用是对DFD中出现的被命名的图形元素的确切解释,通常数据词典包含的信息有:名称、别名、何处使用/如何使用、内容描述、补充信息等。

结构化设计SD

结构化设计主要是把结构化分析过程中得到的数据流程图转化为系统结构图,并使它尽可能反映要解决的问题。

抽象化

常用的抽象化手段有过程抽象、数据抽象和控制抽象

过程抽象:任何一个完成明确功能的操作都可被使用者当作单位的实体看待,尽管这个操作时机上可能由一系列更低级的操作来完成。

数据抽象:与过程抽象一样,允许设计人员在不同层次上描述数据对象的细节。

控制抽象:与过程抽象和数据抽象一样,控制抽象可以包含一个程序控制机制而无须规定其内部细节。 

自顶向下,逐步细化

将软件的体系结构按自顶向下方式,对各个层次的过程细节和数据细节逐层细化,直到用程序设计语言的语句能够实现为止,从而最后确立整个的体系结构。

模块化

将一个待开发的软件分解成若干个小的简单的部分——模块,每个模块可独立地开发、测试,最后组装成完整的程序。这是一种复杂问题的“分而治之”的原则。模块化的目的是使程序结构清晰,容易阅读,容易理解,容易测试,容易修改。

控制层次

表明了程序构件(模块)的组织情况。控制层次往往用程序的层次结构(树形或 型)来表示。

深度:程序结构的层次数,可以反映程序机构的规模和复杂程度。

宽度:同一层模块的最大模块个数

模块的扇出:一个模块调用(或控制)的其他模块数

模块的扇入:调用(或控制)一个给定模块的模块个数

信息屏蔽

将每个程序的成分隐蔽或封装在一个单一的设计模块中,定义每一个模块时尽可能少的显露其内部的处理,可以提高软件的可修改性,可测试性和可移植性。

模块独立

每个模块完成一个相对特定独立的子功能,并且与其他模块之间的联系简单。衡量度量标准有两个:模块间的耦合和模块的内聚。模块独立性强时,必须做到高内聚低耦合。

耦合:模块之间联系的紧密程度,耦合度越高模块的独立性越差。耦合度从低到高的次序为:非直接耦合、数据耦合、标记耦合、控制耦合、外部耦合、公共耦合、内容耦合。

内聚:内聚是指内部各元素之间联系的紧密程度,内聚度越低模块的独立性越差。内聚度从低到高依次是:偶然内聚、逻辑内聚、瞬时内聚、过程内聚、通信内聚、顺序内聚、功能内聚。

面对对象方法

面向对象方法作为一种新型的独具优越性的新方法正引起全世界越来越广泛的关注和高度的重视,它被誉为”研究高技术的好方法”,更是当前计算机界关心的重点。十多年来,在对OO方法如火如荼的研究热潮中,许多专家和学者预言:正像70年代结构化方法对计算机技术应用所产生的巨大影响和促进那样,90年代OO方法会强烈地影响、推动和促进一系列高技术的发展和多学科的综合。

特征

封装性

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

继承性

继承性是“子类”获得“父类”的数据和方法的机制。它由类的派生功能体现。一个类直接继承其它类的全部描述,同时可修改和扩充。继承具有传递性。继承分为单继承(一个“子类”只有一个“父类”)和多重继承(一个类有多个父类)。类的对象是各自封闭的,如果没继承性机制,则类中数据、方法就会出现大量重复。继承不仅支持系统的可重用性,而且还促进系统的可扩充性。

多态性

对象根据所接收的消息而做出动作。同一消息为不同的对象接受时可产生完全不同的行动,这种现象称为多态性。利用多态性用户可发送一个通用的信息,而将所有的实现细节都留给接受消息的对象自行决定,如是,同一消息即可调用不同的方法。例如:Print消息被发送给一图或表时调用的打印方法与将同样的Print消息发送给一个正文文件而调用的打印方法会完全不同。多态性的实现受到继承性的支持,利用类继承的层次关系,把具有通用功能的协议存放在类层次中尽可能高的地方,而将实现这一功能的不同方法置于较低层次,这样,在这些低层次上生成的对象就能给通用消息以不同的响应。

总结

这两种方法开发软件有很大的区别。结构化方法在于模块化的思想,把系统的功能分解分块,是对功能的抽象。而面对对象方法的核心是将数据按类别抽象封装。通过实例可以发现,面对对象方法更贴合实际,设计、实现、维护中更贴合我们的思维,但结构化方法也有它的优势,结构化方法的执行效率更好,也能更好地支持并发。但另一方面,两种方法的出现时期也说明了很多问题,面对对象方法也可看作是结构化方法的改造,面对对象方法中有许多结构化方法中的元素。改造后的方法更好地加强了数据与处理数据的方法之间的联系,所以当数据量更大时,为了这些联系更加清晰,更适合使用面对对象方法。

相关资源:Veneer:文件屏蔽软件-开源-其它代码类资源-CSDN文库

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2016年11月11日
下一篇 2016年11月11日

相关推荐