2.11 结构化程序设计思想
2016-06-12 08:46
281 查看
程序设计方法经历了从传统的“面向过程设计”到目前被广泛接受的“面向对象设计”的过程。本节将讨论结构化程序设计。
1976 年 N.Wirth 出版的名为 《Algorithms + Data Structure = Programs》的著作中,明确提出“算法”和“数据结构”是程序的两个要素,即程序设计主要包括两方面的内容。
行为特性的设计:指完整地描述问题求解的全过程,并精确地定义每个解题步骤,这一过程即是“算法设计”
结构特性的设计:指在问题求解的过程中,计算机所处理的数据、及数据之间联系的表示方法。
根据上述定义,传统的程序设计方法可以归结为“程序=算法+数据结构”,将程序定义为处理数据的一系列过程。
结构化程序设计方法SP(Structured Programming)的着眼点是“面向过程”。
结构化程序设计特点是将程序中的数据与处理数据的方法分离。
结构化程序设计方法的核心是“算法设计”,基本思想是:
自顶向下和逐步细化的设计方法:将一个复杂任务按照功能进行拆分,并逐层细化到便于理解和描述的程度,最终形成由若干独立模块组成的树状层次结构,如下图所示。(查看动画演示)
单入单出的控制结构:是指每个模块内部均用顺序、选择、循环结构来描述。
举个较简单的例子:读入一组整数,要求统计其中正整数和负整数的个数。
【分析】:
该任务的顶层模块可设计为3块:
读入数据(模块1);
统计正、负数个数(模块2);
输出结果(模块3);
其中,模块2可继续细化为以下小块:
正整数个数为0;负整数个数为0;
取第一个数;
重复执行以下步骤直到数据统计完。
若该数大于0,正整数个数加1;
若该数小于0,负整数个数加1;
取下一个数。
上述结构化程序设计的方法如下图所示:(查看动画演示)
结构化程序设计方法曾一度成为程序设计的主流方法。 但到20世纪80年代末,这种方法开始逐渐暴露出缺陷。主要表现在以下方面:
难以适应大型软件的设计:在大型多文件软件系统中,随着数据量的增大,由于数据与数据处理相对独立,程序变得越来越难以理解,文件之间的数据沟通也变得困难,还容易产生意想不到“副作用”。
程序可重用性差:结构化程序设计方法不具备建立“软件部件”的工具,即使是面对老问题,数据类型的变化或处理方法的改变都必将导致重新设计。这种额外开销与可重用性相左,称为“重复投入”。
这些由结构化程序设计的特点所导致的缺陷,其本身无法克服!而越来越多的大型程序设计又要求必须克服它们,这最终导致了“面向对象”设计方法的产生。
概念提出
1976 年 N.Wirth 出版的名为 《Algorithms + Data Structure = Programs》的著作中,明确提出“算法”和“数据结构”是程序的两个要素,即程序设计主要包括两方面的内容。行为特性的设计:指完整地描述问题求解的全过程,并精确地定义每个解题步骤,这一过程即是“算法设计”
结构特性的设计:指在问题求解的过程中,计算机所处理的数据、及数据之间联系的表示方法。
根据上述定义,传统的程序设计方法可以归结为“程序=算法+数据结构”,将程序定义为处理数据的一系列过程。
设计特点
结构化程序设计方法SP(Structured Programming)的着眼点是“面向过程”。结构化程序设计特点是将程序中的数据与处理数据的方法分离。
核心思想
结构化程序设计方法的核心是“算法设计”,基本思想是:自顶向下和逐步细化的设计方法:将一个复杂任务按照功能进行拆分,并逐层细化到便于理解和描述的程度,最终形成由若干独立模块组成的树状层次结构,如下图所示。(查看动画演示)
单入单出的控制结构:是指每个模块内部均用顺序、选择、循环结构来描述。
应用举例
举个较简单的例子:读入一组整数,要求统计其中正整数和负整数的个数。【分析】:
该任务的顶层模块可设计为3块:
读入数据(模块1);
统计正、负数个数(模块2);
输出结果(模块3);
其中,模块2可继续细化为以下小块:
正整数个数为0;负整数个数为0;
取第一个数;
重复执行以下步骤直到数据统计完。
若该数大于0,正整数个数加1;
若该数小于0,负整数个数加1;
取下一个数。
上述结构化程序设计的方法如下图所示:(查看动画演示)
缺陷和不足
结构化程序设计方法曾一度成为程序设计的主流方法。 但到20世纪80年代末,这种方法开始逐渐暴露出缺陷。主要表现在以下方面:难以适应大型软件的设计:在大型多文件软件系统中,随着数据量的增大,由于数据与数据处理相对独立,程序变得越来越难以理解,文件之间的数据沟通也变得困难,还容易产生意想不到“副作用”。
程序可重用性差:结构化程序设计方法不具备建立“软件部件”的工具,即使是面对老问题,数据类型的变化或处理方法的改变都必将导致重新设计。这种额外开销与可重用性相左,称为“重复投入”。
这些由结构化程序设计的特点所导致的缺陷,其本身无法克服!而越来越多的大型程序设计又要求必须克服它们,这最终导致了“面向对象”设计方法的产生。
相关文章推荐
- 各种浏览器开启JavaScript脚本方法
- [李景山php]每天laravel-20160826|EncryptionServiceProvider
- 第五讲 用Shared Preferences方式存储数据
- 将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
- Sencha ExtJS 6 Widget Grid 入门
- 云计算教程
- 2.10 转向语句
- 一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。例如6=1+2+3.编程 找出1000以内的所有完数。
- html树形菜单控件
- 基于Flask session机制的单点登录
- 2.9 循环结构-循环的嵌套
- 如何设置域名泛解析及解决恶意泛域名解析的方法
- 输入两个正整数m和n,求其最大公约数和最小公倍数。
- win7更改桌面路径
- Android Studio自定义模板 写页面竟然可以如此轻松
- JavaWeb相关技术简介
- Jquery tab插件wdScrollTab 在chrome中出现不兼容的问题
- 物体碰撞说明(当鼠标放在某一地方,显示此物体的Tag)
- 基于apache的tomcat集群配置
- UBOOT 常用 COMMAND