软件⼯程:结构化软件设计⽅法VS⾯向对象软件设计⽅法
⼀、基本概念
1、结构化⽅法
结构化⽅法是⼀种传统的软件开发⽅法,它是由结构化分析、结构化设计和结构化程序设计三部分有机组合⽽成的。
基本思想:把⼀个复杂问题的求解过程分阶段进⾏,⽽且这种分解是⾃顶向下,逐层分解,使得每个阶段处理的问题都控制在⼈们容易理解和处理的范围内。
2、⾯向对象⽅法
⾯向对象⽅法是⼀种把⾯向对象的思想应⽤于软件开发过程中,指导开发活动的系统⽅法,简称OO,是建⽴在“对象”概念基础上的⽅法学。对象是由数据和容许的操作组成的封装体,与客观实体有直接对应关系,⼀个对象类定义了具有相似性质的⼀组对象。
基本思想:尽可能模拟⼈类习惯的思维⽅式,使开发软件的⽅法与过程尽可能接近⼈类认识世界、解决问题的⽅法与过程, 也就是使描述问题的问题空间与实现解法的求解空间在结构上尽可能⼀致。
⼆、两者对⽐
1、基本单位不同
结构化⽅法的基本单位是模块。
⾯向对象⽅法的基本单位是对象。
2、分析⽅法不同
结构化分析⽅法是⼀种⾯向数据流⽽基于功能分解的分析⽅法, 在该阶段主要通过采⽤数据流程图、编制数据字典等⼯具, 描述边界和数据处理过程的关系, ⼒求寻功能及功能之间的说明。
⾯向对象分析是把对问题域和系统的认识理解, 正确地抽象为规范的对象( 包括类、继承层次) 和消息传递联系, 最终建⽴起问题域的简洁、精确、可理解的⾯向对象模型, 为后续的⾯向对象设计和⾯向对象编程提供指导。⾯向对象分析通常建⽴三种模型: 对象模型、动态模型、功能模型。其中, 对象模型描述了系统的静态结构,确定类的名称和类间的关系;动态模型表⽰瞬时的、⾏为化的系统的“ 控制”性质, 规定了对象模型中的对象的合法变化序列;功能模型表明了系统中数据之间的依赖关系, 以及有关数据的处理功能。
3、各⾃局限
(1)结构化⽅法
i.不能直接反映问题域: 结构化分析⽅法以数据流为中⼼, 强调数据的流动及每⼀个处理过程, 不是以问题域中的各事物为基础, 打破了各事物的界限, 分析结果不能直接反映问题域, 容易隐蔽⼀些对问题域的理解偏差。
ii.数据和代码缺乏保护机制: ⼀个特定全程数据既可以被操作这些数据的过程访问, 也可以被其他过程访问, 这给程序设计带来了不因素, ⼀个不正常的数据修改或者过程调⽤可能会破坏正常的程序执⾏流程或结果。
iii.分析和设计体系不⼀: 结构化分析的结果是数据流图, 结构化设计的结果是模块结构图。 ⼆者的表⽰体系不⼀致, 分析⽂档很难与设计⽂档对应, 所以从分析到设计的“ 转换”过程容易因理解上的错误⽽使得设计⽂档与⽤户的原本需求相差甚远。
iv.开发过程复杂: 由于结构化⽅法将过程和数据分离为相互独⽴的实体, 程序员在编程时必须时刻考虑到所要处理的数据的格式。 对于不同的数据格式做相同的处理或对于相同的数据格式做不同的处理都需要编写不同的程序, ⽽且往往不能对数据的安全性进⾏有效的控制。如果程序进⾏扩充或升级, 也需要⼤量修改函数, 因此结构化程序的可重⽤性不好。 要使数据与程序始终保持兼容, 已成为程序员的⼀个沉重的负担。
(2)⾯向对象⽅法
i.开发过程管理要求⾼:在⾯向对象分析过程中,需要多次迭代,开发过程要经过“修改-评价-再修改”的多次反复。
ii.系统复⽤性低:⾯向对象⽅法通过信息隐藏和封装等⼿段屏蔽了对象内部的执⾏细节,控制了错误的蔓延,但发⽣错误时,定位故障代价⼤,对于需求变化频繁的系统,很难得到⼀个⾼度可复⽤的⾯向对象软件系统设计。
iii.开发⼈员易将原型取代规范系统分析:缺乏规范化的⽂档资料,不易于后期维护。
三、个⼈体会
在⽤C语⾔写时,我需要想的是,我要做什么事情,我需要完成什么功能,⾃然,完成不同的功能就要⽤到不同的模块;⽽在学习JAVA 时,我需要思考的是,有⼏个对象,这个对象需要什么属性,需要完成什么事情,与其他对象之间⼜有什么联系。
所以在设计C语⾔的结构时,我是这么⼀层⼀层,逐渐细化设计的,功能之间是利⽤数据流进⾏联系。在真正实现时,如果发现哪个功能还不完善或可以更加细化时,需要由下往上依次修改⼦模块,⼯作量⽐较⼤。
vs编程软件⽽在设计JAVA语⾔时,我基本是利⽤UML图设计,不存在层次关系,每个类就是⼀个对象,类⾥包括了对象的属性和对象可以做的事情,类之间通过发送请求来进⾏通信。我感觉实现起来⽐C语⾔更为⽅便,它的继承机制很好地提⾼了代码的复⽤性,并且在进⾏功能扩展时,仅需要设计新的对象,或在对象原有基础上进⾏扩展。
结构化和⾯向对象是软件⼯程的程序设计⽅法中最本质的思想⽅法。结构化编程的基本思想就是把⼤的程序划分为若⼲个相对独⽴、功能简单的程序模块,它以过程为中⼼, 强调的是过程, 强调功能和模块化, 通过⼀系列过程的调⽤和处理完成相应的任务。 ⾯向对象编程以对象为中⼼, 是对⼀系列相关对象的操纵, 发送消息给对象, 由对象执⾏相应的操作并返回结果, 强调的是对象。 理论上, ⾯向对象的程序设计⽅法将产⽣更好的模块内聚和耦合特性, 使得软件更易于重⽤与维护。在执⾏效率上来说,结构化⽅法⽐⾯向对象⽅法产⽣的代码更直接,更⾼效。从应⽤的范围看,结构化⽅法适⽤于数据少⽽操作多的问题。时间证明对于像操作系统这样的以功能为主的系统,结构化⽅法⽐较适应它。⾯向对象⽅法正好相反,对于数据库,信息管理等以数据为主的⽽操作较少的系统,⽤⾯向对象⽅法描述要好
于结构化⽅法。 在实践中程序设计⽅法关注软件⽣命周期的各个环节, 从需求分析、总体设计到编码、测试和维护,同时设计⽅法在各个阶段需要⼯具和环境的⽀撑, 因此在选择程序设计⽅法时, 需要综合考虑这些因素。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论