一、基本概念

1、结构化方法

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

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

2、面向对象方法

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

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

二、两者对比

1、基本单位不同

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

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

2、分析方法不同

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

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

3、各自局限

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

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

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

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

三、个人体会

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

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

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

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

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

  1. 3/14课程 第三章 结构化的项目前期和面向对象的项目前期实例

    ---恢复内容开始--- 3.1项目前期的主要工作 现状分析(硬件分析 软件分析) 需求收集 粗略设计(体系结构设计 硬件网络设计 应用系统设计 安全设计 配套设计) 可行性分析(经济可行性分析 技术 ...

  2. python医学科研中能做什么-非结构化数据-病历智能处理引擎的设计、实现和应用...

    图2 医学知识库与词库结构关系 医学知识库的建设繁杂,但是对于医疗业务的可持续发展意义重大,所有基于知识库的工作成果,可以在任何时间任何地点无壁垒解读,持续的放大价值,推动医疗领域的发展.需要注意的是 ...

  3. 《10分钟学会结构化思考》一张掌握系统思维方法的思维导图

    适用于:不善言辞,讲话摸不着重点,缺少逻辑性思维的人: 阅读重点:纵向思考,横向思考,用归纳法和演绎法概括结论,清晰的表达训练 提醒:10分钟了解,100天训练 参考书籍:<金字塔原理>, ...

  4. 【设计原则】面向对象的设计原则(六原则一法则)

    (一)单一职责原则:一个类只做它该做的事情. 单一职责想表达的就是"高内聚",所谓高内聚就是一个代码模块只完成一项功能,在面向对象中,如果只让一个类完成它该做的事,而不涉及与它无关 ...

  5. html5创建对象的方法,JavaScript面向对象-使用工厂方法和构造函数方法创建对象...

    在上一篇文章中我们介绍了JavaScript简单对象的创建方法,简单js对象的最大问题是由于没有类的约束,无法实现对象的重复利用,并且没有一种约定,在操作时会带来问题.所以人们从设计模式中借用了一种工 ...

  6. 面向对象设计原则_面向对象的设计原则

    面向对象设计原则 Programming is fun until you have to incorporate a new requirement that changes the whole d ...

  7. C++设计模式的设计原则(面向对象八大设计原则)

    面向对象设计八大设计原则 一.温故面向对象 二.八大设计原则 三.以史为鉴    先掌握八大设计原则,再详细看23种设计模式(

  8. 『软件工程9』结构化系统分析——解决软件“做什么”问题

    结构化系统分析--解决软件"做什么"问题 一.系统分析的任务和过程 1.系统分析的任务 2.系统分析的过程 (1)问题识别 (2)分析与综合 (3)编制文档 (4)系统分析评审 二 ...

  9. 软件设计的第一性原理:结构化抽象

    软件设计的第一性原理,是结构化抽象.术生于道,技术生于原理. 引语 所谓的第一性原理,就是无论使用什么方法论,都无法绕过的那最最基础的部分.无论是 DDD 设计,还是面向模式的架构设计,或 微服务架构 ...

最新文章

  1. chm文件打不开问题
  2. 巴西CC成为FreeStor全球首个用户
  3. JavaScript 公有 私有 静态属性和方法
  4. MIT、CMU 美国计算机专业最牛20名学校大点评
  5. 科大星云诗社动态20210226
  6. 除掉字符串里面相同的字符
  7. 经典问题之「分支预测」
  8. %@ taglib prefix=c uri=http://java.sun.com/jsp/jstl/core %会报错
  9. powerdesigner显示工具面板_Adobe After Effects:如何使用木偶工具
  10. linux find prune文件,Linux中find命令-path -prune用法详解
  11. 使链接在新窗口中打开
  12. VGG使用重复元素的网络
  13. 手淘适配-flexible
  14. ubuntu16.04安装配置mysql数据库,分割视频为帧图像
  15. k1075停运吗_全国铁路大调图,怀化火车站6对旅客列车停运!
  16. 数据库实验报告一-创建数据库和表
  17. Ubuntu桌面管理器
  18. PS3主机数据完全一览及关键词解释
  19. 关于WIN10开机自动开启小键盘解决方案
  20. -----已搬运-------Linux的/proc/self/学习 ++ CTF例题

热门文章

  1. 解决“The method XXXXXX of type XXXXXXXXX must override a superclass method”
  2. 为了教会小学弟PID,我连夜肝出了这篇PID的实操(未完成坑学弟版)
  3. 【历史上的今天】1 月 7 日:Mosaic 正式停止开发;Sketchpad 问世;PDA 被命名
  4. python填充颜色函数_Python使用Turtle图形函数画图 颜色填充!(学习笔记)
  5. 骑士放置 Page435 最大独立集
  6. 干货 | PCB电路板短路了!试试这六种检查方法
  7. 计算机课作文200字,玩电脑日记200字
  8. 硕盟 type c六合一 扩展坞苹果电脑转换器
  9. 什么是白皮书?【理解较局限,仅个人学习记录】
  10. 凭什么同窗好友Java开发都是三年,他能进大厂,工资还是我的双倍?