基于阅读分析程序的程序设计教学方法

时间:2022-09-28 01:18:43

基于阅读分析程序的程序设计教学方法

摘要:学生程序设计能力培养一直是计算机科学与技术、软件工程等专业的教学重点和难点。培养和训练学生掌握程序设计的阅读能力,是解决学生在程序设计学习过程所存在问题的关键。探讨了程序阅读的方法、规律,并以此为依据通过实际教学对学生进行训练。教学实践证明,让学生掌握程序阅读的方法和规律,能够有效地提高学生的程序设计能力。

关键词:阅读分析程序;程序设计能力;程序阅读;程序设计教学

中图分类号:G434文献标识码:A文章编号文章编号:16727800(2013)0010017603

基金项目:2013年贵州财经大学信息学院教改项目

作者简介:杨正武(1963-),男,贵州财经大学信息学院教授,研究方向为信息化与软件工程。

0引言

程序设计类课程涵盖程序设计课程、面向对象程序设计课程、数据结构课程,是计算机科学与技术专业的基础课程,并且程序设计一直是该类课程的教学重点和难点,学生能否掌握程序设计是学好程序设计类课程的关键。学生对程序设计反映的问题是抽象、找不到方法,培养和提高学生的程序设计能力一直是困扰计算机科学专业和软件工程专业教学的难题。

在交流、调查、分析和总结的基础上,发现导致问题产生的因素有以下几个方面:

①学生方面。设计类课程群(程序设计课、面向对象程序设计课、数据结构课)均开设在大学第一、二、三学期,学生从高中阶段的文化知识学习到大学的专业知识学习需要有一个转变的过程,由一门课程独自完成则难以实现,需要由设计类课程群整体来完成;②教学方法。教师重视程序设计,讲授方式过于直接简单,轻视程序的阅读,并且缺乏重要的中间过渡桥梁和台阶;③教学内容。在教材中,对表达数据的变量、对象、类构成缺乏深入剖析,使学生对其重视不够;④训练方面。在针对程序设计能力的习题与实验练习方面,缺少方法指导,显得杂乱。

程序是指包括用严格语言或类语言表达的完整源代码和部分代码段。通过以程序阅读逐渐法为核心的课程群改革,提升计算机科学与技术专业、软件工程专业学生的程序设计能力,分析从设计课程群的整体出发来思考如何提高学生的程度设计能力。该课程群虽然内容上有所不同,程序设计能力要求则是相同的,而且是各门课的主要任务和内容,改变以往根据一门课程来训练学生的程序设计能力。把程序阅读能力作为程度设计能力的重要过渡桥梁,解决以往直接训练学生程序设计能力时存在的问题。

程序设计阅读逐渐法即是解决学生学习程序设计存在的问题。程序设计阅读逐渐法分为两个阶段:阅读阶段和应用设计阶段。在阅读阶段的目的是训练学生读懂完整的程序(含用类语言表达的算法,以下均同),并以此为基础,进行下一步应用设计阶段的训练。学生对程序设计反映的问题其实就是在程序设计的训练中缺乏对阅读阶段的专题训练。

1程序阅读方法

根据经典公式:程序=算法+数据结构,程序的阅读应该从两条主线来展开,即算法线和数据结构线。算法线是对程序步骤和过程的执行,数据结构线是程序中变量内容的变化。在程序课中,强调算法线;在面向对象程序设计课中,强调数据结构线,但是重点是数据:类、对象及类与类之间的关系,而不是结构关系。在数据结构课中,重点是数据结构线,但强调的是结构关系。任何程序存在着的两条主线是相互关联的,程序的本质就是通过算法对数据(变量、对象、类)及内容数据结构的加工处理,得到最后结果,实现程序设计的任务。要能正确阅读程序需要具备一定的前提条件:①能正确掌握每一个语句、每一个方法的执行过程;②能正确掌握变量、对象或数据结构的构成。阅读程序本质上就是对程序中的语句或方法调用的逐条执行,能正确阅读程序就需要能正确掌握每一个语句、每一个方法的执行过程。程序都有具体任务,程序都要通过变量、对象或由结构数据中的内容的变化来实现其任务。因此,正确阅读程序而得到结果是需要正确掌握变量、对象或数据结构的构成。

程序阅读最直接的目的就是得到程序的执行结果,在此基础上,会产生两个效果。如果程序是一个应用性的程序,那么就能理解到程序的设计思想、方法和技巧;如果程序是一个验证性的程序,那么就能理解到程序所要验证的语句或方法的性质,以及是如何验证的。程序阅读的目的有3个,即:得到程序的执行结果;掌握语句或方法的性质;掌握程序的设计思想、方法和技巧。在3门程序设计类课程中进行程序阅读训练,一定能让学生熟练掌握程序阅读方法。

程序阅读又分为三步:理解程序结构阶段、模拟计算机执行程序阶段、上机验证阶段。其中模拟计算机执行程序处于核心地位,理解程序结构阶段的目的就是为能正确模拟计算机执行程序,上机验证阶段的目的就是为能检验模拟计算机执行程序是否正确。模拟计算机执行程序也是阅读阶段的难点,模拟计算机执行程序训练是否能达到效果决定了阅读阶段训练的成效。

1.1理解程序结构

理解程序的构成,如果是结构化程序,主要理解构成的函数及预定义部分,理解函数与函数之间或函数与预定义部分之间的关系,理解函数中的每一个语句或方法的过程和变量(或数据成员)的构成;如果是面向对象的程序,主要理解构成的类、类与类之间的关系以及引用部分,理解类中的每一个语句或方法的过程和字段(或数据成员)的构成;如果是数据结构的程序,还需理解数据的逻辑结构、物理结构以及定义性的描述。理解程序结构如果要读懂一篇英文的文章,首先是要知道其中单词、词组及相关语法,才能读懂整个英文文章的内容、思想等。训练学生对基础语句的语法掌握。

1.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; }

}

执行下列语句:

Automobile autos = new Automobile(80, 3);

对象的构成和初值描述与记录如图1所示。

顺序表的静态结构定义:

#define ListSize 100; //最大允许长度

typedef int ElemType;

typedef struct {

ElemType elem[ListSize];

int length;

} SeqList;

1.3上机验证

把模拟计算机执行程序的输出结果与计算机执行程序的输出结果对照,如果是对的,则说明模拟计算机执行程序是正确的;否则,要重新模拟计算机执行程序,找出问题,直到模拟计算机执行程序正确为止。上机实验能训练学生知道正确的结果是来自计算机的执行,而非是教材中的结果,也非教师给出的结果。上机实验能训练学生对程序实质的理解,上机实验验证还要与程序的结构对齐,即上机实验验证程序,要做到对程序的每一个程序段都能执行到。

2以程序阅读为基础,从课程群角度展开程序设计教学

以程序阅读为基础的程序设计即是在程序阅读基础上掌握程序设计。程序分为两种:验证性程序设计和应用性程序设计。验证性设计包含对教材中的说明性程序段完善为一个完整的程序;或针对一个具体的语言问题,通过编程对比、输出等来理解和掌握该语言问题。验证性设计的设计难度较小,学生比较容易掌握,也容易树立学生的自信心,且通过验证性程序设计,学生能深刻理解语言中语句的语法问题和执行问题,执行过程更具体、更深刻。应用性设计包括简单的应用性设计和复杂性、综合性强的应用性程序设计。程序设计分为数据表示、程序设计、程序阅读。通过对验证性程序的阅读,模仿该验证性程序进行验证性程序设计,通过对应用性程序的阅读,模仿应用性程序的设计思想、方法和技巧,进行应用性程序设计。设计的程序是否正确都需要进行程序阅读,检验程序设计的正确性。讲授和练习的阅读程序例子要与学生设计的程序有相似性,以便学生能够模拟程序设计,启发和激活学生的程序设计能力。

在程序设计课中,分析一个具体的程序通过对变量的内容作一系列的加工处理得到改变,并得到最终结果,以达到任务目标。由于处理的变量及关系都较简单,难点和重点应放在程序过程(主要是3种基本结构)和方法调用执行上,同时也需要描述和记录变量的构成和内容变化。在面向对象程序设计课中,分析一个具体的程序通过对类、对象以及类与类之间的关系作一系列的加工处理得到改变,并得到最终结果,达到任务目标。在数据结构课中,分析一个具体的程序(类语言描述)通过对有结构的数据在存储上的内容作一系列的加工处理得到改变,得到最终结果,达到任务目标。程序类程序任务存在差异,程序设计的训练相应地也应有所不同。尤其是要有针对应用程序的程序阅读训练,这种训练包括两个方面:一是按程序设计类课程中的不同课程制作相应的程序阅读材料;二是对程序阅读材料按程序阅读方法进行全面、深入的阅读。程序阅读训练完成后,根据程序阅读材料,制作相似的程序设计题目,训练学生的程序设计能力。

3结语

教学实践证明,让学生掌握程序阅读方法和规律,能有效促进学生提高程序设计能力;在程序设计类课程群的范围内训练程序设计能力,在时间和内容上更充分和全面,总体而言,提升学生程序设计能力的教学效果明显。课程改革除了要有科学且改革可行的教学方式,还要在讲授方式、教学讲义、实验项目、习题练习、课件等教学内容、教学手段方面有着配套的、整体的改革,才能实现效果最优化。分析、总结教学效果,做好整体配套工作,让动态的课程改革本身不断深入提高则是后续需要开展的工作。

参考文献:

[1]郑莉.C++面向对象程序设计[M].北京:清华大学出版社,2002.

[2]郑宇军.C#面向对象程序设计[M].北京:人民邮电出版社,2003.

[3]严蔚敏.数据结构:C语言版[M].北京:清华大学出版社,2006.

上一篇:大学生网络学习现状及对策研究 下一篇:信息技术教师社会网络分析