程序设计方法经历了从传统的“面向过程设计”到目前被广泛接受的“面向对象设计”的过程。本节将讨论结构化程序设计。

概念提出

1976 年 N.Wirth 出版的名为 《Algorithms + Data Structure = Programs》的著作中,明确提出“算法”和“数据结构”是程序的两个要素,即程序设计主要包括两方面的内容。

  • 行为特性的设计:指完整地描述问题求解的全过程,并精确地定义每个解题步骤,这一过程即是“算法设计”
  • 结构特性的设计:指在问题求解的过程中,计算机所处理的数据、及数据之间联系的表示方法。

根据上述定义,传统的程序设计方法可以归结为“ 程序=算法+数据结构 ”,将程序定义为处理数据的一系列过程。

设计特点

  • 结构化程序设计方法SP(Structured Programming)的着眼点是“面向过程”。
  • 结构化程序设计特点是将程序中的数据与处理数据的方法分离。

核心思想

结构化程序设计方法的核心是“算法设计”,基本思想是:

  • 自顶向下和逐步细化的设计方法:将一个复杂任务按照功能进行拆分,并逐层细化到便于理解和描述的程度,最终形成由若干独立模块组成的树状层次结构,如下图所示。(查看动画演示)
  • 单入单出的控制结构:是指每个模块内部均用顺序、选择、循环结构来描述。

应用举例

举个较简单的例子:读入一组整数,要求统计其中正整数和负整数的个数。

【分析】:

  1. 该任务的顶层模块可设计为3块:
  2. 读入数据(模块1);
  3. 统计正、负数个数(模块2);
  4. 输出结果(模块3);

其中,模块2可继续细化为以下小块:

  1. 正整数个数为0;负整数个数为0;
  2. 取第一个数;
  3. 重复执行以下步骤直到数据统计完。
    • 若该数大于0,正整数个数加1;
    • 若该数小于0,负整数个数加1;
    • 取下一个数。

上述结构化程序设计的方法如下图所示:( 查看动画演示 )

缺陷和不足

结构化程序设计方法曾一度成为程序设计的主流方法。 但到20世纪80年代末,这种方法开始逐渐暴露出缺陷。主要表现在以下方面:

  • 难以适应大型软件的设计:在大型多文件软件系统中,随着数据量的增大,由于数据与数据处理相对独立,程序变得越来越难以理解,文件之间的数据沟通也变得困难,还容易产生意想不到“副作用”。
  • 程序可重用性差:结构化程序设计方法不具备建立“软件部件”的工具,即使是面对老问题,数据类型的变化或处理方法的改变都必将导致重新设计。这种额外开销与可重用性相左,称为“重复投入”。

这些由结构化程序设计的特点所导致的缺陷,其本身无法克服!而越来越多的大型程序设计又要求必须克服它们,这最终导致了“面向对象”设计方法的产生。

2.11 结构化程序设计思想相关推荐

  1. 微软推出新语言Bosque,超越结构化程序设计

    微软近期推出了一款全新的编程语言 Bosque,该语言参考了 TypeScript 的语法与类型,还有 ML 和 Node/JavaScript 的语义. 作者微软计算机科学家 Mark Marron ...

  2. 微软推出新编程语言 Bosque,超越结构化程序设计

    微软近期推出了一款全新的编程语言 Bosque,该语言参考了 TypeScript 的语法与类型,还有 ML 和 Node/JavaScript 的语义.作者微软计算机科学家 Mark Marron  ...

  3. 编译器-FORTRAN(公式翻译)语言,第一个全球正式推广的高级语言,Pascal(帕斯卡)可称为第一个结构化程序设计语言Pascal基于ALGOL编程语言BASIC初学者通用符号指令代码17语句微软

    编译器-FORTRAN(公式翻译)语言,第一个全球正式推广的高级语言,Pascal(帕斯卡)它可称为第一个结构化程序设计语言,Pascal基于ALGOL编程语言,ALGOL是算法语言(ALGOrith ...

  4. 「完结」总结12大CNN主流模型架构设计思想

    http://blog.sina.com.cn/s/blog_cfa68e330102zocn.html 专栏<CNN模型解读>正式完结了,在这一个专栏中,我们给大家回顾了深度学习中的各类 ...

  5. MapReduce原理与设计思想

    转自:http://www.cnblogs.com/archimedes/p/mapreduce-principle.html 简单解释 MapReduce 算法 一个有趣的例子 你想数出一摞牌中有多 ...

  6. c语言是非结构化程序设计语言,第章_结构化程序设计基础和C语言的控制结构(fb).ppt...

    第章_结构化程序设计基础和C语言的控制结构(fb).ppt 2.4.2 continue语句 例2-24 编程序实现功能:检测从键盘上输入的以换行符结束的字符流,统计非字母字符的个数. 分析:通过循环 ...

  7. 【设计思想解读开源框架】java监听模式和观察者模式

    深耕技术,啃下22个技术点 互联网行业更新换代非常快,行业常态便是不断学习,因此这些主流技术你一个都不能落下! ①并发编程 Java并发编程是整个Java开发体系中最难以理解,但也是最重要的知识点之一 ...

  8. 一个插排引发的设计思想 (三) 委托与事件

    一个插排引发的设计思想 (一) 观察者模式 一个插排引发的设计思想 (二) 抽象类与接口 一个插排引发的设计思想 (三) 委托与事件 ...待续.... 前两篇文章循序渐进的介绍了观察者模式.抽象类和 ...

  9. 一个插排引发的设计思想 (一) 观察者模式

    一个插排引发的设计思想 (一) 观察者模式 一个插排引发的设计思想 (二) 抽象类与接口 一个插排引发的设计思想 (三) 委托与事件 ...待续.... 不知道聊到设计模式,  经常给人两种感觉: 1 ...

最新文章

  1. 蛋壳公寓再获5亿美元C轮融资,老虎环球基金、蚂蚁金服联合领投
  2. IP地址与子网掩码总结
  3. 定时器和promise_从Promise链理解EventLoop
  4. Java破碎重组_Java代码重组
  5. 日期类型前后台传递格式控制注解@DateTimeFormat@JsonFormat@JSONField
  6. 指数分布的定义形式及应用
  7. 【POJ2453】An Easy Problem
  8. visual studio可以开发app吗_做好APP定制开发的计划,可以让你的应用开发事半功倍...
  9. Agisoft Metashape Professional for Mac(三维建模软件)
  10. gazebo 模型导入
  11. angular7.0+ngx-weui公众号开发,开发及框架搭建(一)
  12. Juniper防火墙常用命令
  13. 计算机会计系统与手工会计系统有什么异同,会计电算化系统与手工会计系统的比较研究...
  14. java 防篡改_用JAVA写一个简易图片防篡改
  15. Pycharm新建项目配置虚拟环境
  16. 汽车灯具、连接器IPX9K IP69K防护等级测试
  17. SAP PO IDOC开发上(SAP PO 开发十一)
  18. oracle查看视图定义语句_oracle视图详解
  19. 幸运数47:给定正整数n,求不大于n的仅由4和7组成的数字的个数
  20. 灵飞经4 西城八部 第十八章 暗通款曲(三)

热门文章

  1. 渡神纪帧数测试软件,育碧《渡神纪》PC配置要求公布 最低只要i5+GTX 660
  2. 语言模型:Trigram-语言模型
  3. 对CrossFire根目录下的窥探和分析(Lithtech引擎)
  4. 为什么要转mysql_资深程序员剖白:我为何要从MySql转向图形数据库
  5. 突击蓝桥杯嵌入式(六)——第十届省赛真题
  6. 淘宝低价,品牌方如何平台投诉
  7. android 4.4 + 默认短信概念
  8. 博客粉丝群发功能使用文档
  9. 生活随记 - 祝贺大家中秋节国庆节节日快乐
  10. DASCTF六月团队赛(2020)-部分WP