结构化程序设计 ?

面向对象程序设计的雏形早在1960年的Simula语言中就出现过。当时程序设计领域正面临一种危机:面对越来越复杂的软 硬件系统,传统的以C语言为代表的面向过程程序设计思想已越来越无法满足现实的需要——面向过程的设计无法很好地描述整个系统,同时设计结果也让人难以理 解,因而给软件的实现以及后期的维护带来了巨大的挑战,项目越大越难以实现,越到项目后期越难以实现,人们正陷入一场前所未有的软件危机中。为了化解这场 软件危机,人们开始寻找能够消灭“软件危机”这头怪兽的“银弹(silver bullet)”。面向对象程序设计思想正是在这种背景下应运而生,它通过强调设计与实现的可扩展性和可重复性,成功地化解了这场“软件危机”。至此以 后,面向对象的程序设计思想开始在业界大行其道,逐渐成为主流。而从C语言向C++的进化刚好就发生在这个时期,自然而然地,C++也就选择了支持面向对 象程序设计思想。

《人月神话》与银弹

《人月神话》是软件领域里一本具有深远影响的著作。它诞生于软件危机的背景之下,而正是这本书提出了“银弹”的概念。

在西方的神话传说中,只有被银弹击中心脏,才可以杀死怪兽。而在这本书中,作者把那些规模越来越大的、管理与维护越来越困难的软件开发项目比作传说中无法控制的怪兽,并希望有一项技术能够像银弹杀死怪兽那样,彻底地解决这场软件危机。

其实,面向对象程序设计思想并不是完全意义上的银弹,它不可能解决所有大型软件项目所遇到的问题,但是它提出了一种描述软件的更加自然的方式,在一定程度上解决了这场软件危机。

6.1.1 “自顶向下,逐步求精”的面向过程程序设计

要想了解新的面对对象思想有什么优点,最简单直接的方式就是先看看旧的面向过程思想有什么缺点。回顾前面章节中曾经学过的例
子,我们在解决问题时总是按照这样的流程:先提出问题;然后分析问题的处理流程;接着根据流程需要把一个大问题划分为几个小问题;如果细分后的小问题仍然
比较复杂,则进一步细分,直到小问题可以简单解决为止;实现每个子模块,解决每个小问题;最后通过主函数按照业务流程次序调用这些子模块,最终解决整个大
问题,如图6-1所示。像这样从问题出发,自顶向下、逐步求精的开发思想我们称为“面向过程程序设计思想”,它描述的主要是解决问题的“过程”。

图6-1 面向过程程序设计的流程

面向过程程序设计思想诞生于20世纪60年代,鼎盛于20世纪80年代,是当时最为流行的程序设计思想。它的流行有其内在原因,跟当时其他程序设计思想相比,它有着明显的优势。

1. 程序仅由三种基本结构组成

正如第4章中所介绍的程序流程控制结构一样,面向过程程序设计思想限定程序只有顺序、选择和循环这三种基本控制结构。任何程序逻辑,无论是简单的还是复杂的,都可以用这三种基本的控制结构经过不同的组合或嵌套来实现。这就使得程序的结构相对比较简单,易于实现和维护。

2. 分而治之,各个击破

人们在解决复杂问题时,总是采用“分而治之”的策略,把大问题分解为多个小问题后,再“各个击破”并最终让大问题得到解决。
面向过程程序设计思想也采取这种“分而治之”的策略,把较大的程序按照业务逻辑划分为多个子模块,然后分工逐个完成这些子模块,最后再按照业务流程把它们
组织起来,最终使得整个问题得到解决。按照一定的原则,把大问题细分为小问题“各个击破”,符合人们思考问题的一般规律,其设计结果更易于理解,同时这种
方法也更易于人们掌握。通过分解问题,降低了问题的复杂度,使得程序易于实现和维护。另外,部分分解后的小问题(子模块)可以重复使用,从而避免了重复开
发。而多个子模块也可由多人分工协作完成,提高了开发效率。

3. 自顶向下,逐步求精

面向过程程序设计思想倡导的方法是“自顶向下,逐步求精”。所谓“自顶向下,逐步求精”,就是先从宏观角度考虑,按照功能或
者业务逻辑划分程序的子模块,定义程序的整体结构,然后再对各个子模块逐步细化,最终分解到程序语句为止。这种方法使得程序员能够全面考虑问题,使程序的
逻辑关系清晰明了。它让整个开发过程从原来的考虑“怎么做”变成考虑“先做什么,再做什么”,流程也更加清晰。

随着时代的发展,软件开发项目也越来越复杂。虽然面向过程程序设计思想有诸多优点,但在利用它解决复杂问题的时候,其缺点也
逐渐暴露出来:在面向过程程序设计中,数据和操作是相互分离的,这就导致如果数据的结构发生变化,相应的操作函数就不得不重新改写;如果遇到需求变化或者
新的需求,还可能涉及模块的重新划分,这就要修改大量原先写好的功能模块。面向过程程序设计中数据和操作相互分离的特点,使得一些模块跟具体的应用环境结
合紧密,旧有的程序模块很难在新的程序中得到复用。这些面向过程程序设计思想的固有缺点使得它越来越无法适应大型的软件项目的开发,这真是“成也面向过
程,败也面向过程”。于是,人们开始寻找一种新的程序设计思想。正是在这种情况下,一些新的程序设计思想开始不断涌现并逐渐取代面向过程程序设计思想,而
面向对象程序设计思想就是其中的“带头大哥”。

结构化程序设计的概念最早由E。W。Dijikstra在1965年提出的。它的主要观点是采用自顶向下、逐步求精的程序设计方法来对程序进行构造。结构化程序设计的概念、方法和支持这些方法的一整套软件工具,构成了结构化革命。这是存储程序计算机问世以来.对计算机界影响最大的一个软件概念,被称为软件发展中的第三个里程碑,其影响比前两个里程碑(子程序、高级语言)更为深远。

结构化程序是由若干个基本结构组合而成,每一个结构可以包含若干条语句和其他基本结构。结构化程序设计中包含三种基本的结构:顺序结构、选择结构和循环结构由这三种基本控制结构进行构造。

1 顺序结构

世界上的所有事情都是有顺序的,那么顺序结构当然也就表示程序中的各操作是按照它们出现的先后顺序执行的,其流程如图7-16所示。事实上,不论程序中包含了什么样的结构,而程序的总流程都是顺序结构的。

2 选择结构

选择结构顾名思义,当程序到了一定的处理过程时,遇到了很多分支,无法按直线走下去,它需要根据某一特定选择结构表示程序的处理步骤出现了分支,它需要根据某一特定的条件选择其中的一个分支执行,选择结构有单选择、双选择和多选弹三种形式。双选择结构如图7-17所示。当语句1和语句3中的任意一个处理为空时,说明结构中只有一个可供选择的分支。也就是说,当条件不满足时,什么也没执行,所以称为单选择结构。

3.循环结构

不断的重复,被称作循环,所以这里的循环结构通常就是用来表示反复执行一个程序或某些操作的过程,直到某条件为假(或为真)时才可终止循环。在循环结构中最主要的是:什么时候可以执行循环?出现哪些操作需要循环执行?循环结构的基本形式有两种。当型循环和直到型循环,其流程如图7-18所示。虽然什么是结构化程序设计,至今还没有被普遍接受的定义。但是在软件程序设计中,不同编程员的编程效率不同,差异可达-个数量级。主程序员组是指以一个非常能干的程序员为中心,即主程序员,小组中剩余成员为主程序员提供其他能力和服务。主程序员组结构可以提高编程效率并尽量减少开发系统中不必要的人与人之间的通信连线。作为这种组织形式中的一个程序员,应具备程序设计的基本知识,对项目所在的领域有较深入的了解,熟悉开发的技术环境。能承担一定的程序编写,更为重要的是必须有高度的组织纪律性和团队精神,使自己的工作融人整个系统,与组内其他成员协调一致地工作。

时间: 2024-08-07 04:10:40

结构化程序设计 ?的相关文章

结构化程序设计

结构化程序设计方法的主要原则可以概括为自顶向下,逐步求精,模块化,限制使用goto语句. 1.自顶向下:程序设计时,应先考虑总体,后考虑细节:先考虑全局目标,后考虑局部目标.不要一开始就过多追求众多的细节,先从最上层总目标开始设计,逐步使问题具体化. 2.逐步求精:对复杂问题,应设计一些子目标作为过渡,逐步细化. 3.模块化:一个复杂问题,肯定是由若干稍简单的问题构成.模块化是把程序要解决的总目标分解为子目标,再进一步分解为具体的小目标,把每一个小目标称为一个模块. 4.限制使用goto语句 结

【结构化程序设计-01】

结构化程序设计简介 •结构化程序设计方法主张按功能来分析系统需求,其主要原则可概括为自顶向下,逐步求精,模块化等.结构化 程序设计首先采用结构化分析(Structrued Analysis,即SA)方法对系统进行需求分析,然后使用结构化设计 (Structrued Design,即SD)方法对系统进行概要设计.详细设计,最后采用结构化编程(Structrued Program,即SP)方式来实现系统.使用这种SA.SD和SP的方式可以较好的保证软件系统的开发进度和质量. •因为结构化程序设计方法

面向对象和结构化程序设计的区别

结构化编程强调功能模块. 结构化程序的概念首先是从以往编程过程中无限制地使用转移语句而提出的.转移语句可以使程序的控制流程强制性的转向程序的任一处,在传统流程图中,就是用上节我们提到的"很随意"的流程线来描述这种转移功能.如果一个程序中多处出现这种转移情况,将会导致程序流程无序可寻,程序结构杂乱无章,这样的程序是令人难以理解和接受的,并且容易出错.尤其是在实际软件产品的开发中,更多的追求软件的可读性和可修改性,象这种结构和风格的程序是不允许出现的.比如:C,FORTRAN,PASCAL

结构化程序设计一

. 复杂算法 结构化程序设计方法:模块的分解和组装 函数的定义和调用 +数据管理 分散管理 集中管理 一.结构化程序设计方法 +结构化程序设计方法就是 将一个求解复杂问题的过程划分为若干个子过程,每个子过程完成一个独立的.相对简单的功能:用算法描述各个过程的操作步骤,每个算法称为一个模块:采用"自顶向下,逐步细化"的方法逐步分解和设计算法模块,再通过调用关系将各个模块组织起来,最终形成一个完整的数据处理算法 +基于模块的团队分工协作开发 自顶向下,逐步细化 +常见的某块调用关系 模块重

第一次过程性考核——结构化程序设计

码云仓库的地址:https://gitee.com/wslgx/codes 7-1 Hello World! (5 分) 本题要求编写程序,输出一个短句"Hello World!". 输入格式: 本题目没有输入. 输出格式: 在一行中输出短句"Hello World!". 程序的设计思路:直接在输出代码里填上所要输出的内容. 知识点:System.out.println("要输出的内容"):. 运行结果: 7-2 求1到100的和 (10 分)

结构化程序设计二

+多文件结构 +编译预处理指令 +系统函数 +自定义数据类型 一.C++源程序的多文件结构 +++++ 可以只声明 不使用 +头文件 二.编译预处理指令 三.几种特殊形式的函数 四.系统函数 五.自定义数据类型 六. 原文地址:https://www.cnblogs.com/OceanF/p/9251105.html

通过学习学生信息管理系统软件,C程序中,如何设计和编写一个应用系统?

1 从文件操作角度分析. 文件的概念以及文件类型指针 在c语言中,文件被看成是由一个一个的字符或字节组成的.根据数据的组织形式,文件可分为文本文件和二进制文件两种. 文本文件又被称为ASCII文件,文本文件在磁盘中存放时每个字符对应一个字节,用于放其对应的ASCII码.文本文件可在屏幕上按字符显示. 二进制文件时将数据转换成二进制形式然后存储起来的文件.二进制文件虽然也可在屏幕上显示,但其内容无法读懂. 文件指针是一中结构体类型变量,c编译系统已将结构定义好,并命名为FILE,我们直接用定义就好

c语言中如何设计和编写一个应用系统?

C程序中,如何设计和编写一个应用系统? 一. C语言文件的操作 1. 文件操作的基本方法: C语言将计算机的输入输出设备都看作是文件.例如,键盘文件.屏幕文件等. 向屏幕输出一个信息,例如"Hello"是 #include.h> int main() { printf("Hello\\n"); } 从键盘接收一个字符串然后显示是 #include.h> int main() { char a[10]; scanf("%s",&

java设计原则:16种原则

一   类的设计原则   1 依赖倒置原则-Dependency Inversion Principle (DIP) 2 里氏替换原则-Liskov Substitution Principle (LSP) 3 接口分隔原则-Interface Segregation Principle (ISP) 4 单一职责原则-Single Responsibility Principle (SRP) 5 开闭原则-The Open-Closed Principle (OCP) 二  包的设计原则   6