《代码大全》学习笔记(4):建立子程序的步骤

4.1 建立程序步骤概述
       按图4-1的顺序来进行。
 
4.2 程序设计语言(PDL)
        有效使用PDL的一些方针:1)用模拟英语的语句来精确描述每一个特定操作;2)避免使用最终程序语言的语句;3)在设计意向这一层次上写PDL;4)在足够低的层次上写出PDL,它几乎可以自动生成代码。
        当PDL写好之后,就可以根据它来编码,而PDL则成为程序语言的注释。
        使用PDL可以获得的益处:1)PDL可以使评审工作变得更容易;2)PDL可以帮助实现逐步细化的思想;3)PDL使得变动工作变得很容易;4)PDL极大地减少了注释工作量;5)PDL比其它形式的设计文件容易维护。

4.3 设计子程序
        创建一个子程序的第一步是设计。设计子程序所需要进行的活动见图4-2。
 
        检查先决条件、定义这个子程序将要解决的问题、给子程序命名、考虑效率、研究算法和数据结构、编写PDL、编写工作应该从抽象到具体、考虑数据、检查PDL、逐步细化。

4.4 子程序编码
        设计好子程序之后,就要开始实现。图4-3给出了实现一个子程序时的步骤。
 
        书写子程序说明:编写子程序的接口语句—编写过程或函数说明,应采用所需要的语言,无论Pascal、C或Fortran都可以,只要符合需要。
        非正式地检查代码:在注释下面填上代码之后,可以对每一块代码作一简略检查;尽力想一下什么因素可能破坏目前的块,然后证明这种情况不会发生;一旦完成了对某一子程序的实现,停下来检查一下是否有误。
        进行收尾工作:检查完代码是否存在问题后,再检查一下它是否满足本书所提到的通用质量标准;可以采取几个步骤来确认子程序的质量是否满足要求:1)检查子程序的接口;2)检查通用设计质量;3)检查子程序的数据;4)检查子程序的控制结构;5)检查子程序设计;6)检查子程序的文档。
        按需要重复步骤:如果程序的质量很差,请返回PDL阶段。

4.5 检查子程序
        在设计并实现了子程序之后,创建活动的第三个主要步骤是进行检查,以确认所实现的软件是正确的。
        在心里对子程序进行查错处理:在前面提到过的非正式检查和清扫工作就是两种内心检查方法,另一方法是在心中执行每一个路径。
        编译子程序:如果检查完了子程序,那就开始编译它;在编译时,尽可能地检查出全部错误的指导方针:尽可能把编译程序的警告级别调到最高;消除所有编译程序指出的错误和提出警告的原因。
       使用计算机来检查子程序错误:子程序编译之后,将其放入调试程序,逐步运行每一行代码,要保证每一行都是按预期的运行。
       消除子程序中的错误:一旦发现有错误,就要消除它。
4.5.1 检查表
       创建子程序。

4.6 小结
(1) 要想写好PDL,首先要用易懂的自然语言,避免拘泥于某种程序语言,其次要在意向层次上写PDL,描述设计作什么而不是如何作。
(2) PDL到代码流程方法是详细设计的有力工具,而且使得编码非常容易;可以把PDL直接翻译成注释,但要注意保证注释是精确而有用的。
(3) 应该在工作的每一步中都检查子程序,并鼓励同事们检查;这样,可以在投入的资金和工作努力最少时便发现错误,从而极大降低改错成本。

 

      
本章小结:

       本章介绍了建立子程序的步骤。

       对于一个大的系统,我们不可能一下子就能够实现,这就需要先设计好一个个的子系统,然后将这些子系统组装为大的系统。对于程序来说,这些子系统其实就是子程序。

       一句话,建立子程序的过程,其实就是软件开发的过程。

时间: 2024-10-25 18:14:39

《代码大全》学习笔记(4):建立子程序的步骤的相关文章

javascript常用的代码片段(学习笔记)

获取DOM对象    代码如下 复制代码 function getel(e) {     if (document.getElementById) {         return document.getElementById(e);     } else if (document.all){         return document.all[e];     } } xmlHttp  代码如下 复制代码 //定义方法 获取XMLHttpRequest对象 function ajaxLoa

php编程代码规范学习笔记(适合初学者)(1/2)

命名规范 Θ 类文件都以.class.php为后缀,使用驼峰法命名,并且首字母大写,例如 Pay.class.php; Θ 类名和目录_文件名一致.例如:类名Zend_Autoloader的目录是Zend/Autoloader.class.php; Θ 函数的命名使用小写字母和下划线的方式.例如:get_client_ip; Θ 方法的命名使用驼峰法,首字母小写或者使用下划线"_",例如listComment(),_getResource(),通常下划线开头的方法属于私有方法; Θ 属

TEX学习笔记

整理在这里, 方便以后容易查找. 毕竟每个tex的模板有些不一样.   Beamer: Latex beamer 学习总结 http://blog.sina.com.cn/s/blog_6cf921f30101aq0g.html  Beamer 主题选择: http://deic.uab.es/~iblanes/beamer_gallery/       https://latex.simon04.net/   Tex arrows: http://www.sascha-frank.com/Ar

《代码大全》学习笔记(1):欢迎进入软件创建世界

写在前面:          它山之石,可以攻玉!        <代码大全>是编程领域里的一本经典书籍,全书介绍了基本数据类型.变量命名.子程序和函数的编写.编程工具以及调试等内容.全书内容翔实.实用性强,特别适合刚入门或即将入门的程序员学习.该书对于良好编程习惯的养成具有极大的促进作用!         本系列文章是我在阅读<代码大全>过程中的学习笔记,基本上是按照原书的章节顺序进行编排的.在每一章的最后还有个人学习小结,供大家参考.希望大家能够从这本经典的书籍中受益,写出高质

《代码大全》学习笔记(5):高质量子程序特点

        什么叫"子程序"?子程序是具有单一功能的可调用的函数或过程.5.1 生成子程序的原因        降低复杂性:使用子程序的最首要原因是为了降低程序的复杂性,可以使用子程序来隐含信息,从而使你不必再考虑这些信息:一个子程序需要从另一个子程序中脱离出来的原因之一是,过多重数的内部循环和条件判断.         限制了改动带来的影响:由于在独立区域进行改动,因此,由此带来的影响也只限于一个或最多几个区域中.         隐含顺序:把处理事件的非特定顺序隐含起来.   

PHP学习笔记 (1) 环境配置与代码调试

一配置PHP环境 1.了解什么是PHP PHP("PHP: Hypertext Preprocessor",超文本预处理器的字母缩写) PHP,是英文超级文本预处理语言Hypertext Preprocessor的缩写.PHP 是一种 HTML 内嵌式的语言,是一种在服务器端执行的嵌入HTML文档的脚本语言,语言的风格有类似于C语言,被广泛的运用 2.PHP的背景和优势 PHP的发展背景 1).1994年由Rasmus Lerdorf创建,开始是一个简单的Perl语言编写的程序,用统计

两千行代码的PHP学习笔记汇总_php技巧

本文汇总了PHP学习中常见的各类问题,约有两千多行代码,都是非常实用的技巧.分享给大家供大家参考.具体如下: //语法错误(syntax error)在语法分析阶段,源代码并未被执行,故不会有任何输出. /* [命名规则] */ 常量名 类常量建议全大写,单词间用下划线分隔 // MIN_WIDTH 变量名建议用下划线方式分隔 // $var_name 函数名建议用驼峰命名法 // varName 定界符建议全大写 // <<<DING, <<<'DING' 文件名建议

PHP学习笔记 (1) 环境配置与代码调试_php技巧

一配置PHP环境 1.了解什么是PHP        PHP("PHP: Hypertext Preprocessor",超文本预处理器的字母缩写)     PHP,是英文超级文本预处理语言Hypertext Preprocessor的缩写.PHP 是一种 HTML 内嵌式的语言,是一种在服务器端执行的嵌入HTML文档的脚本语言,语言的风格有类似于C语言,被广泛的运用       2.PHP的背景和优势      PHP的发展背景      1).1994年由Rasmus Lerdor

python网络编程学习笔记(二):socket建立网络客户端_python

1.建立socket 建立socket对象需要搞清通信类型和协议家族.通信类型指明了用什么协议来传输数据.协议的例子包括IPv4.IPv6.IPX\SPX.AFP.对于internet通信,通信类型基本上都是AF_INET(和IPv4对应).协议家族一般表示TCP通信的SOCK_STREAM或者表示UDP通信的SOCK_DGRAM.因此对于TCP通信,建立一个socket连接的语句为:s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)对于UDP通