结构化与面向对象化之应用比较

结构化与面向对象化之应用比较

引言

软件工程中构建工程经常使用两种方法:结构化方法和面对对象方法。结构化方法由艾兹格.迪杰斯特拉在1967年发表《goto陈述有害论》时提出。面向对象方法在80年代起逐步形成。两种方法各有优点,相伴存在至今。下面我们就来分析、探讨结构化程序设计方法与面向对象的方法的区别,以及在现实应用中如何在两种方法中做出选择。

一、结构化方法

1. 基本思想

结构化方法程序设计的基本思想是:

a.自顶向下

b.采用模块化技术

c.分而治之

d.逐步求精地将信息系统按功能分解为若干模块进行分析与设计

应用子程序实现模块化, 模块内部由顺序结构、选择结构、循环结构等三大基本控制结构组成。即从代表目标系统整体功能的单个处理着手, 自顶向下不断地把复杂的处理分解为子处理, 这样一层一层地分解下去, 直到仅剩下若干个容易实现的子处理为止, 并写出对每个最低层处理的描述。

2. 分析步骤

结构化分析是一种面向数据流而基于功能分解的分析方法,在该阶段主要通过采用数据流程图、编制数据字典等工具,描述边界和数据处理过程的关系,力求寻找功能及功能之间的说明。

通常所说的“结构化分析”就是“数据流分析”。

数据流分析的核心特征是“分解”与“抽象”。“分解”和“抽象”是两个相互有机联系的概念,下层是上层的分解,上层是下层的抽象。例如,假设系统很复杂,为了理解它,将它分成了5个子系统, 如果子系统仍然比较复杂还可以再继续分解它, 如此下去, 直到每个子系统足够简单, 能清楚地被理解和表达为止。

典型的结构化分析方法可以描述为: 功能分解=功能+子功能+功能接口。问题域映射为功能和子功能, 规格说明间接反映问题域。分析的结果是系统、子系统、功能、子功能层次结构的建立。

3. 优点

1)执行效率高

2)易学易用

3)便于与用户沟通

4. 缺点

1)不能直接反映问题域: 结构化分析方法以数据流为中心, 强调数据的流动及每一个处理过程, 不是以问题域中的各事物为基础, 打破了各事物的界限, 分析结果不能直接反映问题域, 容易隐蔽一些对问题域的理解偏差。

2)数据和代码缺乏保护机制: 一个特定全程数据既可以被操作这些数据的过程访问, 也可以被其他过程访问, 这给程序设计带来了不安定因素, 一个不正常的数据修改或者过程调用可能会破坏正常的程序执行流程或结果。

3)开发过程复杂: 由于结构化方法将过程和数据分离为相互独立的实体, 程序员在编程时必须时刻考虑到所要处理的数据的格式。对于不同的数据格式做相同的处理或对于相同的数据格式做不同的处理都需要编写不同的程序。结构化程序的可重用性不好,修改扩充难度大。

4. 适应项目场合

   综上,结构化设计方法的应用域为:

1)适合开发数据处理较多,对反应速度由要求的项目。

2)功能需求明确、规模较小、扩展性要求不高的系统。

3)高性能、大规模并发和嵌入式系统应用开发。

二、面对对象方法

1. 基本思想

面向对象方法的出发点是尽可能模拟人类习惯的思维方式, 使开发软件的方法与过程尽可能接近人类认识世界、解决问题的方法与过程, 也就是使描述问题的问题空间与实现解法的求解空间在结构上尽可能一致。面向对象是一种运用对象、类、继承、封装、聚合、消息传递、多态性等概念来构造系统的软件开发方法。它打破了传统的代码、数据分离做法, 将一种数据结构和操作该数据结构的方法捆在一起, 封装在一个程序内, 实现了数据封装和信息隐藏, 通过“操作”作为接口实现信息传递。对外部来说, 只知道“它是做什么的”, 而不知道“它是如何做的”, 使得数据封装、信息隐藏、抽象代码共享等软件工程思想得到充分体现。

2. 重要特征

1)抽象: 从许多事物中舍弃个别的、非本质的特征, 抽取共同的、本质性的特征, 就叫作抽象。抽象是形成概念的必须手段。

2)类和对象: “类”是面向对象语言中的一种抽象数据类型。面向对象方法认为客观世界是由各种对象组成的, 复杂的对象可以由比较简单的对象以某种方式组合而成。每个对象都有自己的属性( 状态和特征) 和方法( 行为) 。

3)继承: 即特殊类的对象拥有其一般类的全部属性与服务。由于具有“继承”性这个特点, 使得程序员对共同的属性以及方法只说明一次, 并且在具体的情况下可以扩展细化或修改这些属性及方法。

4)封装: 表示对象状态的数据和实现各个操作的代码, 都被封装在对象里面, 它与外界的联系是通过对象的对外接口(方法)实现。外界不需要关心对象是如何进行各种细节处理。

5)多态: 指相同的操作或函数、过程可作用于多种类型的对象上并获得不同的结果。就如不同的对象, 收到同一消息可以产生不同的结果。

3. 分析步骤

(1) 分析确定在问题空间和解空间出现的全部对象及其属性;

(2) 确定应施加于每个对象的操作,即对象固有的处理能力;

(3) 分析对象间的联系,确定对象彼此间传递的消息;

(4) 设计对象的消息模式,消息模式和处理能力共同构成对象的外部特性;

(5) 分析各个对象的外部特性,将具有相同外部特性的对象归为一类,从而确定所需要的类;

(6) 确定类间的继承关系,将各对象的公共性质放在较上层的类中描述,通过继承来共享对公共性质的描述;

(7) 设计每个类关于对象外部特性的描述;

(8) 设计每个类的内部实现(数据结构和方法);

(9) 创建所需的对象(类的实例),实现对象间应有的联系(发消息)。

3. 优点

面向对象技术与传统的结构化方法相比有以下优点:

1)可重用性。可重用性是面向对象软件开发的一个核心思路。通过类的继承关系, 使公共的特性能够共享, 简化了对象、类的创建工作量, 增加了代码的可重性。另外, 重用经过测试的代码还可以使产生额外错误的可能性达到最小。

2)可扩展性。可扩展性是对现代应用软件提出的又一个重要要求。类的继承性使类能反映现实世界的层次结构, 多态性反映了现实世界的复杂多样。类的继承性和多态性使软件编码具有良好的可重用性和可扩展性。无需修改源代码就可以使软件功能容易扩充和修改。

3)数据保护。数据和操作数据的算法不再分离, 它们被封装在一起, 对象内部的行为实现细节被隐藏。封装防止了程序相互依赖性而带来的变动影响。

4)可管理性。面向对象的开发方法采用类作为构建系统的部件, 以对象作为系统的基本组成单元, 使整个项目的组织更加合理、方便, 因为归纳事物、划分成类符合人们在认识和管理客观世界的习惯思维方式。

4. 缺点

(1)面向对象方法中对象的确定有时会因客观边界模糊而难以确定,这样就很难保证软件描述的正确性;

(2)面向对象在描述问题域方面的不足。在问题域模型中,面向对象方法把具体或抽象的问题域现象直接表述为对象,同时把现象类型直接表述为类.大多数OOA方法支持多视角模型,即对同一问题域现象,不同的主体可以将它表述为同一对象或类型。但系统的描述者在应用面向对象方法进行建模时常遇到这样的困惑,描述者力图通过面向对象的表述对存在的问题域现象达成一致,然而,结果得到的对象或类并不很适合于某个描述者对对象的独自观察而得到的表述。

5. 适应项目场合

综上,面向对象方法适合对安全性要求较高、需要时常扩展更新、重在用户体验的项目。

三、如何选择开发方法

表1. 结构化与对象化方法的比较

结构化和面向对象是软件工程的程序设计方法中最本质的思想方法。结构化编程的基本思想就是把大的程序划分为若干个相对独立、功能简单的程序模块。它以过程为中心, 强调的是过程, 强调功能和模块化, 通过一系列过程的调用和处理完成相应的任务。面向对象编程以对象为中心, 是对一系列相关对象的操纵, 发送消息给对象, 由对象执行相应的操作并返回结果, 强调的是对象。理论上, 面向对象的程序设计方法将产生更好的模块内聚和耦合特性, 使得软件更易于重用与维护。但在实践中程序设计方法关注软件生命周期的各个环节, 从需求分析、总体设计到编码、测试和维护。

从应用的范围看结构化方法适用于数据少而操作多的问题。实践证明对于像操作系统这样的以功能为主的系统结构化方法比较适应它。面向对象方法正好相反,对于数据库信息管理等以数据为主的而操作较少的系统,用面向对象方法描述要好于结构化方法。

笔者认为,在选择开发方法时,不光要考虑项目本身适合什么方法,还要综合考虑一些现实因素。

软件开发的目标是以最小的代价开发出满足用户需求的软件,为此根据系统的实际需求可以针对具体情况选择采用不同的设计方法,充分发挥面向对象与结构化方法各自的优势。目前在大多数软件系统的分析设计过程中,这两种方法都兼而有之。笔者以为,开发者在开发实践中从实际出发考虑执行效率、开发者的技术水平、系统规模、是否为需求易变化的系统等因素,尽量利用它们各自的优点,尽可能地避免他们的缺点。

如对于开发一些小型嵌入式实时监控系统或同等稳定小系统可用结构化方法;对于开发入门者使用结构化方法和面向对象方法相结合;对于大型系统或者需求易变系统使用面向对象方法;开发的大型软件系统通常是混合型系统,即需要处理实时信息,又需要数据库的支持,同时还涉及大量的事务性操作请求,在这种情况下,在选用面向对象方法的同时在局部处理上可以结合使用结构化方法。总之,根据实际出发,选取合适的软件开发方法,达到最佳的开发效益。

[参考文献]

[1]喻梅.结构化程序设计方法与面向对象程序设计方法之比较[J].科技信息,2009,14:453-454.

[2]符于江.程序设计中结构化方法和面向对象方法的比较[J].电脑知识与技术,2008,21:451-452+456.

[3]张莉,裘国永.结构化方法与面向对象方法的比较分析[J].陕西师范大学学报(自然科学版),2001,02:29-32.

[4]曹昊,许玲,谢赞福,马云云.结构化较面向对象方法优势应用域的研究[J].微计算机信息,2010,21:194-196+78.

时间: 2024-10-09 22:30:56

结构化与面向对象化之应用比较的相关文章

结构化和面向对象语言的区别

Java语言是一门面向对象语言,C语言是一门结构化语言.而它们的区别在于结构化编程 是一整个时间为主,在将其分为一个个的小函数写出来:而面向对象语言试讲一个程序中的对 象拿来做文章,用代码来描述这些对象,从而完成整个程序.这个也是Java语言相对于C语言 更受程序员喜欢的原因.它减轻程序员的代码量. 了解到这些后我们就该了解如何实例化一个对象.它的形式是这样的: public class Employee{} 总共有3个东西:访问修饰符.数据类型和对象名称.

hbase非结构化数据库与结构化数据库比较

目的:了解hbase与支持海量数据查询的特性以及实现方式 传统关系型数据库特点及局限 传统数据库事务性特别强,要求数据完整性及安全性,造成系统可用性以及伸缩性大打折扣.对于高并发的访问量,数据库性能不是很好,类似于互联网这样的访问量容易造成宕机. hbase hbase是基于列存储的数据库与传统的基于行存储的关系型数据库相比,可扩展性好.Hbase是一个面向列存储的分布式存储系统,它的优点在于可以实现高性能的并发读写操作,同时Hbase还会对数据进行透明的切分,这样就使得存储本身具有了水平伸缩性

非结构化数据的存储与查询

当今信息化时代充斥着大量的数据.海量数据存储是一个必然的趋势.然而数据如何的存储和查询,尤其是当今非结构化数据的快速增长,对其数据的存储,处理,查询.使得如今的 关系数据库存储带来了巨大的挑战.分布存储技术是云计算的基础,主要研究如何存储.组织和管理数据中心上的大规模海量数据.由于面临的数据规模和用户规模更加庞大,在可扩展性.容错性以及成本控制方面面临着更加严峻的挑战[1]. 对于大量的半结构化数据(semi-structure data)和非结构化数据,对其存储和并发计算以及扩展能力而设计出了

结构化和面向对象之应用比较

---恢复内容开始--- 结构化和面向对象之应用比较 在无数程序设计人员的不断实践和理论改进中,软件工程程序设计中极其重要的指导性思路一直在发生着变革.在相对较长的时间里,不断有新的软件工程中的程序设计思路涌现,其中在生产实践中得到了十分广泛的应用的,当属结构化和面向对象的方法. 结构化程序设计在结构上将软件系统划分为若干功能模块或实体,分别采用模块化程序设计语言编程实现,再由各模块联结,组合成相应结构的软件系统. 而在面向对象的程序设计中,所谓对象是指具有一定结构.属性和功能的实体,采用对象和

软件评测师笔记_结构化需求分析法20161019

需求分析 需求分析的任务不是具体地解决问题,而是要准确地确定目标系统必须做什么. 用户了解他们所面对的问题,知道必须做什么,但通常不能完整准确地表达出他们的要求,也不知道计算机软件可以解决他们的哪些问题:软件开发人员知道软件可以做什么,但并不完全清楚特定用户的具体需求.系统分析员在需求分析阶段必须和用户充分交流,密切配合,以便得出一个能够真实反应用户要求的"需求分析模型"或"软件需求说明书",这个模型或说明书将作为软件系统设计的依据. 需求分析模型通常使用UML中的

【转】移动Web单页应用开发实践——页面结构化

1. 前言 在开发面向现代智能手机的移动Web应用的时候,无法避免一个事实,就是需要开发单页应用(Single Page WebApp).对于不同的系统需求,单页应用的粒度会不同,可能是整个系统都使用一个页面装载,也可能是按模块分为独立页面装载.在开发单页应用时第一个要处理的问题就是页面结构化,由于多个功能集中在一个页面呈现,就必然需要考虑如何实现多个视图布局?如何实现视图之间动画切换?等问题. 下面我就来讲述下手机搜狐前端团队在单页应用开发的页面结构化上做过的一些尝试与努力. 2. 页面视图

什么是结构化数据?什么是半结构化数据?

概述 相对于结构化数据(即行数据,存储在数据库里,可以用二维表结构来逻辑表达实现的数据)而言,不方便用数据库二维逻辑表来表现的数据即称为非结构化数据,包括所有格式的办公文档.文本.图片.XML.HTML.各类报表.图像和音频/视频信息等等. 非结构化数据库是指其字段长度可变,并且每个字段的记录又可以由可重复或不可重复的子字段构成的数据库,用它不仅可以处理结构化数据(如数字.符号等信息)而且更适合处理非结构化数据(全文文本.图象.声音.影视.超媒体等信息). 非结构化WEB数据库主要是针对非结构化

淘宝杨志丰:OceanBase--淘宝结构化大数据解决之道

时至今日,“Big data”(大数据)时代的来临已经毋庸置疑,尤其是在电信.金融等行业,几乎已经到了“数据就是业务本身”的地步.这种趋势已经让很多相信数据之力量的企业做出改变.恰逢此时,为了让更多的人了解和使用分析大数据,CSDN独家承办的大数据技术大会于今日在北京中旅大厦召开.本次大会汇集Hadoop.NoSQL.数据分析与挖掘.数据仓库.商业智能以及开源云计算架构等诸多热点话题.包括百度.淘宝.新浪等业界知名专家与参会者齐聚一堂,共同探讨大数据浪潮下的行业应对法则以及大数据时代的抉择. 淘

移动Web单页应用开发实践——页面结构化

1. 前言 在开发面向现代智能手机的移动Web应用的时候,无法避免一个事实,就是需要开发单页应用(Single Page WebApp).对于不同的系统需求,单页应用的粒度会不同,可能是整个系统都使用一个页面装载,也可能是按模块分为独立页面装载.在开发单页应用时第一个要处理的问题就是页面结构化,由于多个功能集中在一个页面呈现,就必然需要考虑如何实现多个视图布局?如何实现视图之间动画切换?等问题. 下面我就来讲述下手机搜狐前端团队在单页应用开发的页面结构化上做过的一些尝试与努力. 2. 页面视图