2.1 用程序实现问题求解
编写程序的目的是“使用计算机解决问题”。程序设计可以分为6个步骤。
(1)分析问题
分析问题的计算部分,想清楚计算什么。首先必须明确,计算机只能解决计算问题,即解决一个问题的计算部分。对于一个问题中的计算部分,不同理解将产生不同的计算问题,也将产生不同功能和复杂度的程序。如何更好地理解一个问题的计算部分,如何有效地利用计算机解决问题,这不仅是编写程序的问题,而是更重要的思维问题,即计算思维。
(2)划分边界
划分问题的功能边界,规划IPO(Input,Process,Output)。计算机只能完成确定性的计算功能,因而在分析问题计算部分的基础上,需要精确定义或描述问题的功能边界,即明确问题的输入、输出和对处理的要求。可以利用IPO方法辅助分析问题的计算部分,给出问题的IPO描述。在这一步中只关心问题的功能需求,即明确程序的输入、输出及输入与输出之间的总体功能关系。
(3)设计算法
设计问题的求解算法,即关注算法。在明确处理功能的基础上,通过设计算法来实现程序功能。若简单的程序功能中输入与输出间的关系比较直观,结构比较简单,则直接选择或设计算法即可。若程序功能复杂,需要利用程序设计方法将“大功能”划分成许多“小功能”,或将功能中相对独立的部分封装成具有属性和操作的类,并在各功能或类之间设计处理流程。对于“小功能”或类的操作,可将其看成一个新的计算问题。
(4)编写程序
编写问题的计算程序,即编写程序。选择一门编程语言,将程序结构和算法设计用编程语言来实现。原则上,任何编程语言都可以用来解决计算问题。只是不同的编程语言在程序的运行性能、可读性、可维护性、开发周期和调试等方面有很大的不同。Python的运行性能逊于C语言,但在可读性、可维护性和开发周期方面具有更大的优势。
(5)调试和测试
调试和测试程序,更新完善。运行程序,通过单元测试和集成测试评估程序运行结果的正确性。一般来说,程序错误(通过称为BUG)与程序规模成正比。即使经验丰富的优秀程序员也会存在BUG,找到并排除程序错误十分必要。而当程序正确运行之后,可采用更多的测试来发现程序在各种情况下的特点,例如:压力测试可获得程序运行速度的最大值和稳定运行的性能边界;安全性测试能够发现程序漏洞、办公室程序的安全边界。
(6)升级维护
适应问题的升级维护。任何一个程序都有它的历史使命,在这个使命结束前,随着功能需求、计算需求和应用需求的不断变化,程序将不断地升级维护,以适应这些变化。
程序设计需要按照这6个步骤,在开发程序的时候能事半功倍。也可将求解计算问题的步骤精简成3个。
·确定IPO:明确计算部分及功能边界。
·编写程序:将计算求解的设计变成现实。
·调试程序:确保程序按照逻辑正确运行。
其中IPO的含义如下。
·I:Input,输入,程序的输入。程序的输入包括文件输入、网络输入、用户手工输入、随机数据输入、程序内部参数输入等。输入是一个程序的开始。
·P:Process,处理,程序的主要逻辑。程序对输入进行处理,输出结果。处理是程序对输入数据进行计算并产生输出结果的过程,处理的方法也叫算法,是程序最重要的部分。可以说,算法是一个程序的主要灵魂。
·O:Output,输出,程序的输出。程序的输出包括屏幕显示输出、文件输出、网络输出、操作系统内部变量输出等。输出是一个程序展示运算成果的方式。