从微观的角度关注编程过程,也就是关注创建单独的类及其子程序的过程的具体步骤。
9.1创建类和子程序的步骤概述
创建一个类的步骤:
1)创建类的总体设计
2)创建类中的子程序
3)复审并测试整个类
创建子程序的步骤:
一般子程序的实现是比较简单的、直截了当的,
1)设计子程序
2)检查设计
3)编写子程序的代码
4)复审并测试代码
9.2伪代码
通过描述算法、子程序、类或完整程序的工作逻辑的、非正式的、类似于英语的记法。
一些规范性的条例:
1)用类似英语的语句来精确描述特定的操作:关键词,精确
2)避免使用目标编程语言中的语法元素:关键词:避免目标编程语言的元素
3)在意图的层面上编写伪代码:通过意图来编写伪代码
4)在足够低的层次上编写代码:几乎通过编程语言的语句直接的翻译伪代码
伪代码的好处:
1)伪代码使得评审更容易
2)伪代码支持反复迭代精化的思想
3)伪代码使代码编写变得更容易
4)伪代码能够减少注释
5)伪代码比其他形式的设计文档更容易维护
9.3通过伪代码编程过程之创建子程序
1) 设计子程序
1. 检查先决条件
在动手做关于子程序的任何工作之前,应该先检查子程序要做的工作是不是已经定义好了,是不是与整体设计相匹配。另外要结合项目需求判断此子程序是不是真正的必须的,至少间接需要的。
2. 定义子程序要解决的问题
详细描述足够详细,以便子程序的创建。详细描述应该包含一下信息:
这一子程序将要隐藏的信息:封装一些信息
传给这个子程序的各项输入:in
从该子程序得到的输出:out
在调用程序之前确保有关前提条件成立:if
在子程序将控制权交给调用方程序之前,确保其后条件的成立
3. 为子程序命名
好的子程序名是优秀子程序的一个重要标记之一。好的程序名称应该是一个清晰无歧义的名字。如果当你为程序取名的时候,感到犯难,那么说明你对程序需要做的工作还是比较模糊的。
4. 决定如何测试子程序
阶段性的测试子程序,可以及时的发现问题,减少最后修改错误付出惨重的代价。
5. 在标准库中搜寻可用的功能
提高开发效率的一个重要途径是重用好的代码。人们可能对你需要的那个算法进行了很多的完善和总结,所以重用代码,不管是在效率还是代码的优良程度上都比较看好。
6. 考虑错误处理
考虑所有可能出错的环节。对于错误的处理尽量保持一样的策略。
7. 考虑效率问题
根据效率在项目和系统中的需求,对效率的要求,来选择两种情况:一,是否有良好的抽象,代码是否易读,封装是否良好等。二,考虑程序消耗的磁盘空间,内存,资源等。
8. 研究算法和数据类型
好的算法可以有事半功倍的能力。很多时候我们自己通过复杂繁琐的代码,可能只需要某个算法的几句话就搞定了。算法和数据结构是前辈们经过多年经验总结出来的。
9. 编写伪代码
精确的英语表达出程序将要完成的事和具体如何完成。
10. 考虑数据
比如数据的类型,数据的取值范围
11. 检查伪代码
阅读伪代码,从概念上去了解程序将要具体做什么。如果读完代码之后,却不知所云,那么说明这是失败的伪代码
12. 在伪代码中试验一些想法,留下最好的想法(迭代)
在编写代码之前,尽量使用伪代码验证一些想法,试图寻找出更好的想法,或者设计方案。
2) 编写子程序的代码
子程序设计完成之后,就是子程序的构建工作了。
步骤如下:
a) 写出子程序的声明:方法名
b) 把伪代码转变为高层次的注释:将伪代码转化成注释,增加{}
c) 在每条注释下面填充代码:填写代码
d) 检查代码是否需要进一步分解:检查代码,判断是否需要创建新的子程序,来满足该程序的创建。
3) 检查代码
在脑海里面检查程序中的错误
在脑子里面,检查错误。子程序通常是短小精悍的。根据所有可能的执行路径,设想着每一条路径的执行
编译子程序
编译的时候,编译器会帮助我们检查代码中的语法错误。
在调试器中逐行执行代码
Debug模式下,逐行的执行代码,根据执行过程中每个变量的值来判断是否程序是否存在错误。
测试代码
使用测试用例,提供相应的输入数据,查看是否得到期望的值
消除程序中的错误
当发现错误的时候,修复错误。
4) 收尾工作
检测子程序的接口
检查整体的设计质量
检查子程序中的变量
检查子程序的语句和逻辑
检查子程序的布局
检查子程序的文档
除去冗余的注释