博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
结构化方法和面向对象方法在软件开发中的对比
阅读量:5102 次
发布时间:2019-06-13

本文共 3622 字,大约阅读时间需要 12 分钟。

学习过C语言和JAVA的同学们一定清楚,这两种语言代表了两种不同的开发方式,即以C语言为代表的结构化开发方法和JAVA代表的面向对象的开发方法。由于二者在程序结构上有着很大的区别,因此,在软件开发领域中,根据自己的需求来选择合理的开发方式就显得尤为重要。

 

开发软件通常有三个层次:

1.满足用户需求

2.可维护性,即可修改性,让软件能随着用户需求的变更而容易改变

3.可重用性(在其它软件中,能尽量重用该软件的模块)

通过对软件的这三个主要层次的分析,我们就能在实际开发中确定我们的选择。

 

结构化方法

结构化方法简述

结构化方法是对现实的问题进行分解,面向过程设计空间的解域,强调自顶向下,逐步求精和模块化设计,是一种以数据流图,数据字典,结构化语言,判定表,判定树等图形表达为主要手段,强调开发方法的结构合理性和系统的结构合理性的软件分析方法。

 

结构化方法分析步骤

面向应用,分解需求(SA):

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

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

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

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

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

  ⑥选择一种方案;

  ⑦建立完整的需求规约。

细化分析结果,过渡软件结构(SD):

  ①评审和细化数据流图;

  ②确定数据流图的类型;

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

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

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

  ⑥描述模块接口。

可以看出,数据流图(DFD)是结构化方法的核心,整个分析过程都是以数据流图作为工具。数据流图以图形的方式描绘数据在系统中流动和处理的过程,由于它只反映系统必须完成的逻辑功能,所以它是一种功能模型。在结构化开发方法中,数据流图是需求分析阶段产生的结果。

数据流图有两种典型结构,一是变换型结构,它所描述的工作可表示为输入、主处理和输出,呈线性状态。另一种是事务型结构,这种数据流图呈束状,即一束数据流平行流入或流出,可能同时有几个事务要求处理。

 

变换型结构数据流图

 

事务型结构数据流图

 

    在完成数据流图的构造后,我们就需要将需求逐步细分,逐层实现,至此就完成全部设计的步骤,之后只需要实现具体的功能即可。整体结构如下图所示:

 

 图中每个圈对应一个数据流图

 

结构化方法的基本原则

(1)抽象原则

抽象原则是一切系统科学方法都必须遵循的基本原则它注重把握系统的本质内容而忽略与系统当前目标无关的内容它是一种基本的认知过程和思维方式。

(2)分解原则

分解原则是结构化方法中最基本的原则它是一种先总体后局部的思想原则在构造信息系统模型时它采用自顶向下分层解决的方法。

(3)模块化原则

模块化是结构化方法最基本的分解原则的具体应用它主要出现在结构化设计阶段中其目标是将系统分解成具有特定功能的若干模块从而完成系统指定的各项功能。

 

结构化方法的优势和缺陷

优点:

①强调系统开发过程的整体性和局部性,强调在整体优化的前提下来考虑具体的分析设计问题。即自顶向下的观点。

②强调开发过程各阶段的完整性和顺序性,强调严格地区分开发阶段,严格地进行系统分析和设计,及时总结,及时问题反馈和纠正,从而避免了开发过程的混乱状态。

③把客观世界的问题抽象成计算机可以处理的过程,处理问题的基本单位是能清晰表达过程的模块,用模块的层次结构概括,模块或模块间的关系和功能。

④结构化方法比面向对象方法产生的可执行代码更直接,更高。所以对于一些嵌入式的系统,结构化方法产生的系统更小,运行效率更高。

 

缺陷:

①它的起点太低,致使系统开发周期过长而带来一系列问题。

②它要求系统开发者在早期调查中就要充分的掌握用户需求、管理状况以及预见能发生的变化,这是不太符合人们循序渐进地认识事务的客观规律性。

③采用结构化方法的系统难以修改和扩充。结构化分析与设计清楚定义了系统的接口,当系统对外界接口发生变动时,往往造成系统结构较大变动,难以扩充新的功能接口。采用结构化方法的系统可复用性较差。结构化方法将数据和操作分离,导致一些可重用的软件构件在特定具体应用环境才能应用,降低了软件的可重用性。

④结构化方法适用于数据少而操作多的问题,而对于数据库,信息管理等以数据为主的而操作较少的系统,结构化方法则不太适用。

 

总而言之,在实际开发中,如果目标系统有功能确定,完成后基本不需要改动,要求的效率和准确度较高,不要求使用大量的数据,结构清晰,小而精,允许的开发周期足够长等特点,适合使用结构化方法。例如:底层系统、嵌入式系统、机械控制系统等。

 

面向对象方法

面向对象方法简述

使用现实世界的概念抽象的思考问题从而自然的解决问题。强调模拟现实世界中的概念而不强调过程和算法,支持重用。思想上,面向对象方法更加贴近实际情况,从实际情况入手。是一种建立在“对象”概念基础上的方法学。

 

结构化方法分析步骤

立足应用,刻画问题(OOA):

  ①确定问题域。

  ②区分类和对象

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

  ④定义属性和服务

  ⑤确定附加的系统约束

细化分析结果,补充实现相关(OOD):

  ①改进和完善系统分析结果

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

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

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

  ⑤对象设计

在面向对象方法设计上,我们常用的工具是UML图,UML图设计中的对象结构如下图所示:

 

在结束设计后我们就可以根据设计来实现我们的对象了。面向对象方法在设计上会和设计文档结合较为紧密,封装好的对象内部信息只能通过相应的方法和接口进行查看和改变,更加接近现实世界的操作。下图是面向对象方法的大致图解:

 

面向对象方法的基本原则

(1)抽象

抽象是处理现实世界复杂性的最基本方式在OO方法中它强调一个对象和其他对象相区别的本质特性对于一个给定的域确定合理的抽象集是面向对象建模的关键问题之一

(2)封装

封装是对抽象元素的划分过程抽象由结构和行为组成封装用来分离抽象的原始接口和它的执行。

封装也称为信息隐藏Information Hiding它将一个对象的外部特征和内部的执行细节分割开来并将后者对其他对象隐藏起来

(3)模块化

模块化是已经被分为一系列聚集的和耦合的模块的系统特性对于一个给定的问题确定正确的模块集几乎与确定正确的抽象集一样困难通常每个模块应该足够简单以便能够被完整地理解

(4)层次

抽象集通常形成一个层次,层次是对抽象的归类和排序。在复杂的现实世界中有两种非常重要的层次一个是类型层次另一个是结构性层次 。确定抽象的层次是基于对象的继承,它有助于在对象的继承中发现抽象间的关系,搞清问题的所在理解问题的本质

 

面向对象方法的优势和缺陷

优点:

①强调从现实世界中客观存在的事物(对象)出发来认识问题域和构造系统,这就使系统开发者大大减少了对问题域的理解难度,从而使系统能更准确地反映问题域。

②运用人类日常的思维方法和原则(体现于OO方法的抽象、分类、继承、封装、消息通讯等基本原则)进行系统开发,有益于发挥人类的思维能力,并有效地控制了系统复杂性。

③对象的概念贯穿于开发过程的终,使各个开发阶段的系统成分具良好的对应,从而显著地提高了系统的开发效率与质量,并大大降低系统维护的难度。

④对象概念的一致性,使参与系统开发的各类人员在开发的各所段具有共同语言,有效地改善了人员之间的交流和协作。

⑤对象的相对稳定性和对易变因素隔离,增强了系统的应变能力。

⑥ 对象类之间的继承关系和对象的相对独立性,对软件复用提供了强有力的支持。

 

缺陷:

①面向对象方法,通过编译器实现代码的面向对象性。也就是说经过编译器后,代码会被翻译为相对应的结构化代码。所以要熟练开发,还要懂一定的结构化方法做为基础。

②面向对象方法比结构化对象方法复杂,难于理解。

③从执行效率来说,面向对象方法的执行效率较低

④需要一定的软件支持环境。

⑤不太适宜大型的MIS开发,若缺乏整体系统设计划分,易造成系统结构不合理、各部分关系失调等问题。

⑥由于面向更高的逻辑抽象层,使得面向对象在实现的时候,不得不做出性能上面的牺牲,计算时间和空间存储大小的都开销很大。

 

总而言之,在实际开发中,如果目标系统有需求比较灵活,执行效率要求较低,需要经常升级或者改动要求管理和使用较多的数据,系统需要较多的功能,数据多操作少等特性就比较适合面向对象的开发方式。例如:数据库,平常使用的APP、游戏等。

转载于:https://www.cnblogs.com/wxs1406/p/6172198.html

你可能感兴趣的文章
Enable SSH Server
查看>>
如何终止线程的运行(C/C++)
查看>>
"远程桌面连接--“发生身份验证错误。要求的函数不受支持
查看>>
【BZOJ1565】 植物大战僵尸
查看>>
视频:"我是设计师"高清完整版Plus拍摄花絮
查看>>
sicp solutions
查看>>
VALSE2019总结(4)-主题报告
查看>>
浅谈 unix, linux, ios, android 区别和联系
查看>>
PhotoZoom放大图片,真的能无损吗?
查看>>
转载分享移动网站最佳实践
查看>>
spark--环境搭建--4.ZooKeeper345集群搭建
查看>>
【Leetcode_easy】1103. Distribute Candies to People
查看>>
Codeforces Round #426 (Div. 2) C. The Meaningless Game
查看>>
51nod 1428 活动安排问题 (贪心+优先队列)
查看>>
leetcode - Next Permutation
查看>>
C#创建Windows服务程序
查看>>
Spring Boot 2.0系列文章(五):Spring Boot 2.0 项目源码结构预览
查看>>
中国烧鹅系列:利用烧鹅自动执行SD卡上的自定义程序(含视频)
查看>>
Solaris11修改主机名
查看>>
latex for wordpress(一)
查看>>