2.11 结构化程序设计思想
程序设计方法经历了从传统的“面向过程设计”到目前被广泛接受的“面向对象设计”的过程。本节将讨论结构化程序设计。
概念提出
1976 年 N.Wirth 出版的名为 《Algorithms + Data Structure = Programs》的著作中,明确提出“算法”和“数据结构”是程序的两个要素,即程序设计主要包括两方面的内容。
- 行为特性的设计:指完整地描述问题求解的全过程,并精确地定义每个解题步骤,这一过程即是“算法设计”
- 结构特性的设计:指在问题求解的过程中,计算机所处理的数据、及数据之间联系的表示方法。
根据上述定义,传统的程序设计方法可以归结为“ 程序=算法+数据结构 ”,将程序定义为处理数据的一系列过程。
设计特点
- 结构化程序设计方法SP(Structured Programming)的着眼点是“面向过程”。
- 结构化程序设计特点是将程序中的数据与处理数据的方法分离。
核心思想
结构化程序设计方法的核心是“算法设计”,基本思想是:
- 自顶向下和逐步细化的设计方法:将一个复杂任务按照功能进行拆分,并逐层细化到便于理解和描述的程度,最终形成由若干独立模块组成的树状层次结构,如下图所示。(查看动画演示)
- 单入单出的控制结构:是指每个模块内部均用顺序、选择、循环结构来描述。
应用举例
举个较简单的例子:读入一组整数,要求统计其中正整数和负整数的个数。
【分析】:
- 该任务的顶层模块可设计为3块:
- 读入数据(模块1);
- 统计正、负数个数(模块2);
- 输出结果(模块3);
其中,模块2可继续细化为以下小块:
- 正整数个数为0;负整数个数为0;
- 取第一个数;
- 重复执行以下步骤直到数据统计完。
- 若该数大于0,正整数个数加1;
- 若该数小于0,负整数个数加1;
- 取下一个数。
上述结构化程序设计的方法如下图所示:( 查看动画演示 )
缺陷和不足
结构化程序设计方法曾一度成为程序设计的主流方法。 但到20世纪80年代末,这种方法开始逐渐暴露出缺陷。主要表现在以下方面:
- 难以适应大型软件的设计:在大型多文件软件系统中,随着数据量的增大,由于数据与数据处理相对独立,程序变得越来越难以理解,文件之间的数据沟通也变得困难,还容易产生意想不到“副作用”。
- 程序可重用性差:结构化程序设计方法不具备建立“软件部件”的工具,即使是面对老问题,数据类型的变化或处理方法的改变都必将导致重新设计。这种额外开销与可重用性相左,称为“重复投入”。
这些由结构化程序设计的特点所导致的缺陷,其本身无法克服!而越来越多的大型程序设计又要求必须克服它们,这最终导致了“面向对象”设计方法的产生。
2.11 结构化程序设计思想相关推荐
- 微软推出新语言Bosque,超越结构化程序设计
微软近期推出了一款全新的编程语言 Bosque,该语言参考了 TypeScript 的语法与类型,还有 ML 和 Node/JavaScript 的语义. 作者微软计算机科学家 Mark Marron ...
- 微软推出新编程语言 Bosque,超越结构化程序设计
微软近期推出了一款全新的编程语言 Bosque,该语言参考了 TypeScript 的语法与类型,还有 ML 和 Node/JavaScript 的语义.作者微软计算机科学家 Mark Marron ...
- 编译器-FORTRAN(公式翻译)语言,第一个全球正式推广的高级语言,Pascal(帕斯卡)可称为第一个结构化程序设计语言Pascal基于ALGOL编程语言BASIC初学者通用符号指令代码17语句微软
编译器-FORTRAN(公式翻译)语言,第一个全球正式推广的高级语言,Pascal(帕斯卡)它可称为第一个结构化程序设计语言,Pascal基于ALGOL编程语言,ALGOL是算法语言(ALGOrith ...
- 「完结」总结12大CNN主流模型架构设计思想
http://blog.sina.com.cn/s/blog_cfa68e330102zocn.html 专栏<CNN模型解读>正式完结了,在这一个专栏中,我们给大家回顾了深度学习中的各类 ...
- MapReduce原理与设计思想
转自:http://www.cnblogs.com/archimedes/p/mapreduce-principle.html 简单解释 MapReduce 算法 一个有趣的例子 你想数出一摞牌中有多 ...
- c语言是非结构化程序设计语言,第章_结构化程序设计基础和C语言的控制结构(fb).ppt...
第章_结构化程序设计基础和C语言的控制结构(fb).ppt 2.4.2 continue语句 例2-24 编程序实现功能:检测从键盘上输入的以换行符结束的字符流,统计非字母字符的个数. 分析:通过循环 ...
- 【设计思想解读开源框架】java监听模式和观察者模式
深耕技术,啃下22个技术点 互联网行业更新换代非常快,行业常态便是不断学习,因此这些主流技术你一个都不能落下! ①并发编程 Java并发编程是整个Java开发体系中最难以理解,但也是最重要的知识点之一 ...
- 一个插排引发的设计思想 (三) 委托与事件
一个插排引发的设计思想 (一) 观察者模式 一个插排引发的设计思想 (二) 抽象类与接口 一个插排引发的设计思想 (三) 委托与事件 ...待续.... 前两篇文章循序渐进的介绍了观察者模式.抽象类和 ...
- 一个插排引发的设计思想 (一) 观察者模式
一个插排引发的设计思想 (一) 观察者模式 一个插排引发的设计思想 (二) 抽象类与接口 一个插排引发的设计思想 (三) 委托与事件 ...待续.... 不知道聊到设计模式, 经常给人两种感觉: 1 ...
最新文章
- 蛋壳公寓再获5亿美元C轮融资,老虎环球基金、蚂蚁金服联合领投
- IP地址与子网掩码总结
- 定时器和promise_从Promise链理解EventLoop
- Java破碎重组_Java代码重组
- 日期类型前后台传递格式控制注解@DateTimeFormat@JsonFormat@JSONField
- 指数分布的定义形式及应用
- 【POJ2453】An Easy Problem
- visual studio可以开发app吗_做好APP定制开发的计划,可以让你的应用开发事半功倍...
- Agisoft Metashape Professional for Mac(三维建模软件)
- gazebo 模型导入
- angular7.0+ngx-weui公众号开发,开发及框架搭建(一)
- Juniper防火墙常用命令
- 计算机会计系统与手工会计系统有什么异同,会计电算化系统与手工会计系统的比较研究...
- java 防篡改_用JAVA写一个简易图片防篡改
- Pycharm新建项目配置虚拟环境
- 汽车灯具、连接器IPX9K IP69K防护等级测试
- SAP PO IDOC开发上(SAP PO 开发十一)
- oracle查看视图定义语句_oracle视图详解
- 幸运数47:给定正整数n,求不大于n的仅由4和7组成的数字的个数
- 灵飞经4 西城八部 第十八章 暗通款曲(三)