摘要: 培养和提高学生程序设计能力培养一直是计算机科学与技术、软件工程专业等专业的教学重点和难点。培养和训练学生掌握程序设计的阅读能力,就是解决学生在程序设计学习过程所存在问题的关键。分析程序的阅读规律,寻求到良好的阅读方法,并以此为依据训练学生,使学生能够通过对程序的阅读,达到让学生学好程序设计的目的。
关键词:程序设计能力;程序阅读;计算机科学与技术;学习过程;阅读能力
1.研究背景
程序设计类课程涵盖程序设计课程、面向对象程序设计课程、数据结构课程,是计算机科学与技术专业的基础课程,并且程序设计一直是该类课教学重点和难点,学生能否掌握程序设计是学好程序设计类课程的关键。学生对程序设计反映的问题是抽象、找不到方法。培养和提高学生的程序设计能力一直是困扰计科专业和软工专业教学的难题。在交流、调查、分析和总结基础上,发现导致问题产生的因素有以下几个方面:
1)学生方面:设计类课程群(程序设计课、面向对象程序设计课、数据结构课)均开设在第一、二、三学期。学生从高中阶段的文化知识学习到大学的专业知识学习需要有一个转变的过程。由一门课程独自完成都难于实现,需要有设计类课程群的整体来完成。2)教学方法:教学方法方面存在的问题,主要是教师重视程序设计,过于直接简单的方式讲授,轻视程序的阅读,并且缺乏重要的中间过渡的桥梁和台阶。3)教学内容:在教材中,对表达数据的变量、对象、类构成缺乏深入的剖析,使学生重视不够。4)训练方面:在针对程序设能力的习题与实验练习方面,缺少方法性的指导,显得杂乱。
程序是指包括用严格语言或类语言表达的完整的源代码和部分的代码段。通过以程序阅读逐渐法为核心的课程群改革,提升计算机科学与技术专业、软件工程专业的学生的程序设计能力。分析从设计课程群的整体出发来思考如果提高学生的程度设计能力,该课程群虽然内容上有所不同,程序设计能力要求又是相同的,而且是各门课的主要任务和内容,改变以往根据一门课程来训练学生的程度设计能力。分析把程序阅读能力作为程度设计能重要的过渡桥梁,改变以往直接训练学生的程度设计能力存在的问题。
程序设计阅读逐渐法就是解决学生学习程序设计存在的问题。程序设计阅读逐渐法分为两个阶段,阅读阶段和应用设计阶段。在阅读阶段的目的是训练学生读懂完整的程序(含用类语言表达的算法),并以此为基础,进行下一步应用设计阶段的训练。学生对程序设计反映的问题其实就是在程序设计的训练中缺乏对阅读阶段的专题训练。
2. 程序阅读的方法
根据经典的公式:程序=算法+数据结构,程序的阅读应该从两条主线来展开,一条是算法线,一条是数据结构线。算法线是对程序的步骤和过程执行,数据结构线是程序中变量的内容的变化。在程序课中,强调算法线;在面向对象程序设计课中,强调数据结构线,但是重点是数据:类、对象及类与类之间的关系,而不是结构关系。在数据结构课中,重点是数据结构线,但强调的是结构关系。任何程序存在着的两条主线是相互关联的。程序的本质就是通过算法对数据(变量、对象、类)及内容数据结构的加工处理,得到最后结果,实现程序设计的任务。要能正确阅读程序需要具备一定的前提条件:1)能正确掌握每一个语句、每一个方法的执行过程;2)能正确掌握变量、对象或数据的结构的构成。阅读程序本质上就是对程序中的语句或方法调用的逐条执行,能正确阅读程序就需要能正确掌握每一个语句、每一个方法的执行过程。程序都有具体任务,程序都要通过变量、对象或有结构数据中的内容的变化,来实现其任务。因此,正确阅读程序而得到结果是需要正确掌握变量、对象或数据的结构的构成。
程序阅读最直接的目的就是得到程序的执行结果,在此基础上,会产生两个效果。如果程序是一个应用性的程序,那么就能理解到程序的设计思想、方法和技巧。如果程序是一个验证性的程序,那么就能理解到程序所要验证的语句或方法的性质,以及是如何验证的。程序阅读的目的就有三个,即得到程序的执行结果;掌握语句或方法的性质;掌握程序的设计思想、方法和技巧。程序阅读在三门程序设计类课程中训练,一定能让学生熟练掌握程序阅读方法。
程序阅读又分为三步:理解程序结构阶段、模拟计算机执行程序阶段、上机验证阶段。其中模拟计算机执行程序处于核心地位,理解程序结构阶段的目就是为能正确模拟计算机执行程序,上机验证阶段的目就是为能检验模拟计算机执行程序是否正确。模拟计算机执行程序也是阅读阶段的难点,模拟计算机执行程序训练是否能达到效果决定了阅读阶段训练的成效。
2.1理解程序结构
理解程序的构成,如果是结构化程序,主要理解构成的函数及预定义部分,理解函数与函数之间或函数与预定义部分之间的关系,理解函数中的每一个语句或方法的过程和变量(或数据成员)的构成;如果是面向对象的程序,主要理解构成的类、类与类之间的关系以及及引用部分,理解类中的每一个语句或方法的过程和字段(或数据成员)的构成;如果是数据结构的程序,还需理解数据的逻辑结构、物理结构以及定义性的描述。理解程序结构如果要读懂一篇英文的文章,首先是要知道其中单词、词组及相关语法,才能读懂该整个英文文章的内容、思想等。训练学生对基础语句的语法掌握
2.2模拟计算机执行程序
模拟计算机对整个程序的执行。首先从主方法开始,逐条语句模拟执行,并记录所有变量或对象等的内容及变化。对语句执行过程的准确和完整的理解是前提,怎么记录所有变量或对象等的内容及变化是关键,程序的任务就是通这些变量或对象等的内容及变化来实现,这是模拟计算机执行程序的目的。
关于程序设计C语言)的程序重点需要对语句和方法调用的执行过程,详细展开其步骤。例如方法调用的过程分为四步。第一步:转移;第二步:参数传递;第三步:方法体的执法;第四步:计算返回值,并返回调用处[1]。
关于面向对象程序设计(C#语言)的程序重点要对象的构成及内容变化。例如有源程序[2]:
public class Automobile
{ private string name;
public string Name
{ get { return name; }
set { name = value; } }
private float speed;
public float Speed
{ get { return speed; }
set { speed = value; } }
private float weight;
public float Weight
{ get { return weight; }
set { weight = value; } }
public Automobile(float speed, float weight)
{ name = "汽车";
this.speed = speed;
this.weight = weight; }
}
执行下列语句: