由结构化程序设计思想引发的思考

扬州大学 2015-2016 秋季 《C语言程序设计》 课程读书报告

正文

在互联网上查阅了结构化程序设计的相关资料,感触颇深。由于刚刚完成N-S流程图课题任务,对SP方法虽有了解,但还是云里雾里的。这次再去有针对的搜索后,这才有了一点自己的感悟与思考。

随着计算机硬件和通讯技术的飞速发展,计算环境的变迁和不断增长的软件需求对程序设计方法学提出了种种挑战。计算机发展经历了3个重要阶段:大型主机——客户/服务器——网络计算。与此类似,软件工程的程序设计方法大致可分成4代:面向过程——面向模块——面向对象——面向智体。

近年,程序设计学从结构化程序设计逐步向面向对象设计过渡,特别是当设计一个较大规模的应用程序时,面向对象设计思路成为首选。纵观计算机软件技术的发展,在局部功能的实现上及功能模块的设计上,结构化程序设计仍然有其不可替代的独特魅力。在结构化程序设计中(以C语言为例),巧妙地运用一些设计技巧,对增强程序的稳定性和可靠性,简化程序操作步聚,提高程序的运行效率十分有效。

结构化程序设计(Structured Programming)是以模块功能和处理过程设计为主的详细设计为基本原则,它是“面向过程”的,所以结构化程序设计是过程式程序设计的一个子集。它对写入的程序使用逻辑结构,使得理解和修改更有效更容易。
该概念最早由荷兰计算机科学家E.W.Dijikstra在1965年提出的,是软件发展的第三个里程碑,其影响比前两个里程碑(子程序、高级语言)更为深远。它的主要观点是采用自顶向下(Up-Down)、逐步求精、结构化编码及模块化的程序设计方法;使用三种基本控制结构(顺序、选择、循环)构造程序。它主要强调程序的易读性。

该方法的要点是:

  1. 使用三种基本结构来嵌套连结成具有复杂层次的“结构化程序”。严格控制了臭名昭著的GOTO语句使用。一个结构化程序就是用高级语言表示的结构化算法,那么这样组成的必然是结构化程序。
  2. “自顶而下,逐步求精”的设计模型,其出发点是从问题的总体目标开始,抽象低层的细节,先专心构造高层的结构,再将整个程序结构映射到单个小部分,然后一层一层地分解具体化,达到“分而治之”。使开发员更好地把握主题,高屋建瓴,使设计过程简单明了,结果也容易做到正确可靠。我们对比另一种“自下而上”的设计模型,这种模型一开始就陷入复杂的细节中,并将问题逐步积累,造成“滚雪球”现象。把某一简单的问题搞的越来越复杂,不便于人们操作。
  3. 引申法廓清思路,选准目标。“引申法”就是通过对某一结论的合理引申,结合已经解决的问题,因势利导,在此基础上解决相关联的其他问题。“引申法”可以培养人们在程序设计方面的发散思维,提高程序设计的应变能力。问题是活的,但程序是有章可循的;语法是有限的,可解决的问题是无限的。程序设计相当一部分工作是分析问题,找到解决问题的方法,再以相应的语言写出代码。要熟练掌握一些简单的算法,根据不同的问题,再灵活应用。我们可使初学者对函数设计的关键问题有清晰的认识,利于从统筹全局的角度去考虑问题,体现了程序设计逐步求精的思路。
  4. 程序编写时,所有模块的功能通过相应的子程序(函数或过程)的代码来实现。程序的主体是子程序层次库,它与功能模块的抽象层次相对应。这意味着,代码能够更有效的载入存储器,模块能在其它程序中再利用。模块单独测试之后,与其它模块整合起来形成整个程序组织。这种编码原则使得程序流程简洁、清晰,极具可读性。
  5. “独立功能,一入一出”的模块结构,减少模块的相互联系使模块可进行插件式或积木式开发扩展,这样程序的静态描述与执行时的控制流程易对应,便于理解程序的动作,降低程序的复杂性而不会出现死循环,便于独立地理解某一部分。
  6. 主程序员组。进行团队设计中整体思路清楚,目标明确。工作中阶段性非常强,有利于系统开发的总体管理和控制,有利于人员分配任务。

其中(1)、(2)强调程序设计风格和程序结构规范化,提倡清晰的结构;(3)(4)(5)强调将大划小,将难化简的求解方法;(6)强调解决软件开发的人员组织结构问题。

但是该方法也有缺点,特别是上世纪80年代末后逐渐暴露不足:

  1. 难以适应大型软件设计。在多文件系统中,随着数据量增大,由于数据与数据处理相对独立,这使得程序越来越难以理解,文件之间的数据沟通也变得困难,还容易产生意想不到的“副作用”。
  2. 程序的可重用性差。结构化程序设计的方法不具备“软件部件”的工具,即使是面对老问题,数据类型的变化或处理方法的改变都必将导致重新设计。这种额外开销与可重用性相左,造成重复投入,使得系统的开发周期长、用户的要求难以在系统分析阶段准确定义从而造成在交付使用时产生问题。

总之,结构化程序设计方法在解决实际问题过程中仍有许多技巧可以应用,这需要我们对算法和数据结构展开深入分析,寻找最佳结合点,有的放矢,对症下药;更需要在实践中不断总结和积累。在编写过程中我们觉得有些程序没什么问题,但是一上机调试,就出现这样或那样的问题,这说明程序还不完善,还需要调整或改进。当今,高效率和快节凑的生活与工作方式对程序的设计提出了更高的要求和更苛刻的标准,我们只有不断创新设计理念和方法,才能编制出更多高质量、高性能、低故障的优质程序。

参考文献

  1. 《Classics in software engineering》Structured programming.E Dijkstra,1970,ACM
  2. 《结构化程序设计方法与面向对象的程序设计方法的比较》 王德军 郝永芳
  3. 《C程序设计》第2章 算法 清华大学出版社,谭浩强
  4. 《结构化程序设计》添美科技,软件开发资讯
  5. 《计算机科学引论·基于C的结构化程序设计方法(英文第三版)》工业出版社
  6. 《结构化程序设计方法中的核心问题》《淮北煤炭师范学院学报》 2006年02期
  7. 《浅析结构化程序的设计技巧》广东省中山市技师学院

2015年10月5日

乙未八月廿三

于扬州大学扬子津校区

由结构化程序设计思想引发的思考

https://www.lixeon.com/blog/20151005-jghsssk/

Author

Jing Li

Posted on

2015-10-05

Updated on

2022-08-08

Licensed under

Comments