一、基本概念

1、结构化方法

  结构化方法是一种传统的软件开发方法,它是由结构化分析、结构化设计和结构化程序设计三部分有机组合而成的。

  基本思想:把一个复杂问题的求解过程分阶段进行,而且这种分解是自顶向下,逐层分解,使得每个阶段处理的问题都控制在人们容易理解和处理的范围内。

2、面向对象方法

  面向对象方法是一种把面向对象的思想应用于软件开发过程中,指导开发活动的系统方法,简称OO,是建立在“对象”概念基础上的方法学。对象是由数据和容许的操作组成的封装体,与客观实体有直接对应关系,一个对象类定义了具有相似性质的一组对象。

  基本思想:尽可能模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类认识世界、解决问题的方法与过程, 也就是使描述问题的问题空间与实现解法的求解空间在结构上尽可能一致。

二、两者对比

1、基本单位不同

  结构化方法的基本单位是模块。

  面向对象方法的基本单位是对象。

2、分析方法不同

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

  面向对象分析是把对问题域和系统的认识理解, 正确地抽象为规范的对象( 包括类、继承层次) 和消息传递联系, 最终建立起问题域的简洁、精确、可理解的面向对象模型, 为后续的面向对象设计和面向对象编程提供指导。面向对象分析通常建立三种模型: 对象模型、动态模型、功能模型。其中, 对象模型描述了系统的静态结构,确定类的名称和类间的关系;动态模型表示瞬时的、行为化的系统的“ 控制”性质, 规定了对象模型中的对象的合法变化序列;功能模型表明了系统中数据之间的依赖关系, 以及有关数据的处理功能。

3、各自局限

(1)结构化方法

  i.不能直接反映问题域: 结构化分析方法以数据流为中心, 强调数据的流动及每一个处理过程, 不是以问题域中的各事物为基础, 打破了各事物的界限, 分析结果不能直接反映问题域, 容易隐蔽一些对问题域的理解偏差。
  ii.数据和代码缺乏保护机制: 一个特定全程数据既可以被操作这些数据的过程访问, 也可以被其他过程访问, 这给程序设计带来了不安定因素, 一个不正常的数据修改或者过程调用可能会破坏正常的程序执行流程或结果。
  iii.分析和设计体系不一: 结构化分析的结果是数据流图, 结构化设计的结果是模块结构图。 二者的表示体系不一致, 分析文档很难与设计文档对应, 所以从分析到设计的“ 转换”过程容易因理解上的错误而使得设计文档与用户的原本需求相差甚远。
  iv.开发过程复杂: 由于结构化方法将过程和数据分离为相互独立的实体, 程序员在编程时必须时刻考虑到所要处理的数据的格式。 对于不同的数据格式做相同的处理或对于相同的数据格式做不同的处理都需要编写不同的程序, 而且往往不能对数据的安全性进行有效的控制。 如果程序进行扩充或升级, 也需要大量修改函数, 因此结构化程序的可重用性不好。 要使数据与程序始终保持兼容, 已成为程序员的一个沉重的负担。

(2)面向对象方法

  i.开发过程管理要求高:在面向对象分析过程中,需要多次迭代,开发过程要经过“修改-评价-再修改”的多次反复。

  ii.系统复用性低:面向对象方法通过信息隐藏和封装等手段屏蔽了对象内部的执行细节,控制了错误的蔓延,但发生错误时,定位故障代价大,对于需求变化频繁的系统,很难得到一个高度可复用的面向对象软件系统设计。

  iii.开发人员易将原型取代规范系统分析:缺乏规范化的文档资料,不易于后期维护。

三、个人体会

  在用C语言写时,我需要想的是,我要做什么事情,我需要完成什么功能,自然,完成不同的功能就要用到不同的模块;而在学习JAVA时,我需要思考的是,有几个对象,这个对象需要什么属性,需要完成什么事情,与其他对象之间又有什么联系。

  所以在设计C语言的结构时,我是这么一层一层,逐渐细化设计的,功能之间是利用数据流进行联系。在真正实现时,如果发现哪个功能还不完善或可以更加细化时,需要由下往上依次修改子模块,工作量比较大。

  而在设计JAVA语言时,我基本是利用UML图设计,不存在层次关系,每个类就是一个对象,类里包括了对象的属性和对象可以做的事情,类之间通过发送请求来进行通信。我感觉实现起来比C语言更为方便,它的继承机制很好地提高了代码的复用性,并且在进行功能扩展时,仅需要设计新的对象,或在对象原有基础上进行扩展。

  

  结构化和面向对象是软件工程的程序设计方法中最本质的思想方法。结构化编程的基本思想就是把大的程序划分为若干个相对独立、功能简单的程序模块,它以过程为中心, 强调的是过程, 强调功能和模块化, 通过一系列过程的调用和处理完成相应的任务。 面向对象编程以对象为中心, 是对一系列相关对象的操纵, 发送消息给对象, 由对象执行相应的操作并返回结果, 强调的是对象。 理论上, 面向对象的程序设计方法将产生更好的模块内聚和耦合特性, 使得软件更易于重用与维护。在执行效率上来说,结构化方法比面向对象方法产生的代码更直接,更高效。从应用的范围看,结构化方法适用于数据少而操作多的问题。时间证明对于像操作系统这样的以功能为主的系统,结构化方法比较适应它。面向对象方法正好相反,对于数据库,信息管理等以数据为主的而操作较少的系统,用面向对象方法描述要好于结构化方法。 在实践中程序设计方法关注软件生命周期的各个环节, 从需求分析、总体设计到编码、测试和维护,同时设计方法在各个阶段需要工具和环境的支撑, 因此在选择程序设计方法时, 需要综合考虑这些因素。

四、参考文献

  1. http://baike.baidu.com/view/551681.htm,百度百科,结构化方法
  2. http://baike.baidu.com/subview/7867/11370681.htm,百度百科,面向对象方法
  3. http://www.docin.com/p-725901488.html,结构化方法与面向对象方法之比较
  4. 《程序设计中过程化方法与面向对象方法的比较》,符于江,2008

转载于:https://www.cnblogs.com/katniss-smile/p/6208816.html

软件工程:结构化方法 VS 面向对象方法相关推荐

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

    本博客旨在通过基本概念.主要特征以及针对需求变更的项目所选用的开发模型等方面进行结构化方法与面向对象方法的比较. 软件开发方法指在项目投资规模和时间限制内,设计.实现符合用户需求的高质量软件,根据软件 ...

  2. 结构化方法和面向对象方法详解

    一.结构化方法和面向对象方法的地位 在系统建模中占主导地位. 二.结构化方法(Structure Analysis,SA) 软件工程中, 结构化方法是较为经典的设计与开发方式之一, 侧重于对系统进行功 ...

  3. 结构化方法与面向对象方法

    结构化方法与面向对象方法 一.结构化方法 1.1结构化方法概述 结构化方法起源于结构化程序设计,具有面向功能.结构清晰.支持逐步求精等特点,使软件易于维护.在运用结构化开发方法时,设计人员首先需要运用 ...

  4. 结构化方法和面向对象方法的比较

    结构化方法和面向对象方法的比较 翁松秀 北京航空航天大学 摘要:编程之精髓在于编程思想,而不同的编程方法有不同的编程思想.结构化程序设计方法一直以来都是编程人员基本的编程方法,而近年来流行的面向对象方 ...

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

    结构化方法与面向对象方法之比较 随着计算机软硬件各方面的飞速发展,计算机领域的观念和方法日新月异.面向对象方法始于20世纪60年代挪威奥斯陆大学和挪威计算机中心共同研究的SMULA语言.70 年代,人 ...

  6. 结构化方法、面向对象方法的区别

    结构化方法.面向对象方法的区别 1.结构化方法遵循的基本原则 结构化方法的基本思想就是将待解决的问题看作一个系统从而用系统科学的思想方法来分析和解决问题结构化方法遵循以下基本原则 (1)抽象原则 抽象 ...

  7. 结构化方法与面向对象方法应用比较

    1.结构化方法 1.1概述 结构化方法(SD方法)是一种传统的软件开发方法,它是由结构化分析.结构化设计和结构化程序设计三部分有机组合而成的.它的基本思想:把一个复杂问题的求解过程分阶段进行,而且这种 ...

  8. 结构化方法和面向对象方法

    结构化方法 1.结构化方法:面向过程的方法 结构化分析(SA,  Structured Analysis) 结构化设计(SD,  Structured Design) 结构化编程(SP,  Struc ...

  9. 简述以上结构化方法和面向对象方法的特点和优缺点

    特点: (1)结构化方法的思想是一种分层的思想,模块化思想,它语句结构化,不再使用GOTO语句. 结构化方法还遵循分解原则,自顶向下进行分层解决. (2)面向对象方法显然是面向对象思想,将系统中要处理 ...

最新文章

  1. AtCoder Petrozavodsk Contest 001
  2. js中的null和undefined总结
  3. authinfo.php,【nginxphp】后台权限认证方式
  4. 阿里云服务器从购买,备案,安装部署中遇到的一些坑
  5. 【实践】Angel深度学习在广告推荐训练优化中的实践.pdf(附下载链接)
  6. html5 原生 弹窗,HTML5 Popmotion.js实现的弹窗控件
  7. Flex4 在advanceddatagrid组件中以“树形结构”显示数据
  8. “返回顶部”实现一例
  9. 2022-2028全球骨科创伤植入物行业调研及趋势分析报告
  10. 第一章 SQL命令 ALTER TABLE(一)
  11. 计算机综合布线基本知识,综合布线系统基础知识学习
  12. MATLAB 绘制柱状图
  13. 共聚焦扫描显微镜的工作原理
  14. 机器学习之手写字体(digits)识别——利用sklearn实现
  15. 初识 GitHub · 简介篇
  16. Java进阶学习路线图
  17. Ubuntu 22.10安装搜狗输入法教程
  18. Dashboard安装配置
  19. 会计毕业实习报告模板
  20. 窗口看门狗实验定时器基本原理

热门文章

  1. 解决win10安装net framework 3.5失败问题错误代码0x800f0950
  2. android 清理程序,浅谈:Android应用清理内存
  3. ATMEL (爱特梅尔)公司EEPROM命名规则
  4. ./configure --with参数
  5. linux 图形化创建文件,Arronax - 在Ubuntu中创建桌面启动器的图形工具
  6. 【java并发】AQS中acquire方法解析
  7. OpenWrt之quilt打补丁
  8. 正则表达式爬取电影天堂
  9. 【Python爬虫】 之 Beautiful Soup
  10. 钱塘江涌潮特性及其数值模拟