总结知识点和它们的用法,通过学生实践巩固和升华。如图2所示。
4.4案例1的教学过程和实施
(1) 案例引入。
任务1对于已经具备一点程序设计基础的学习者来说,非常简单,只用顺序结构和简单的几行代码即可求解。但是此时教师可以提出,虽然短短几行可以解决这个问题,但如果需要反复求不同圆的圆面积,那么代码几乎不能重用,此时可以用两种方法解决:函数或者类。于是,自然地引入使用类的一种解法,类的定义如下:
class Circle {
public:
double R;
double area(){
return 3.14159*R*R;
}
};
(2) 寻找问题和矛盾。
教师继续引导:该程序虽然使用类求解,但是其中没有任何OO(Object–Oriented)思想,对象的所有内部细节对外都是可见的,数据的安全性不强,而且,对于外部用户来说,他必须了解半径这个数据成员在类内部的标识符名称,否则无法使用这个类。
(3) 引导拓展新的方法。
如果利用面向对象的思想求解该题,那么我们必须换个角度来思考。对于任务1,具体的某个圆可以看做是一个实物,即对象。如果能够精确描述这个实物,那么,不论需要处理或求解多少个圆面积,程序中只需奉行“拿来主义”。根据求解的侧重点,这一类对象的属性就是半径,行为就是计算面积,一般来说,我们不希望外界能够访问属于对象自身的一些数据。因此,可以定义一个与前述不同的类Circle,类的定义如下:
class Circle {
public:// 定义对外接口
void set_data(double r);
void displayArea();
private: // 封装部分数据和行为
double m_R;
double calculateArea(void);
};
(4) 知识点的回顾与提升。
根据类Circle的定义分析用private实现封装的方法及好处,以及封装之后设计接口的技巧,同时指出,利用面向对象的程序设计方法解决问题时,是以实体作为处理的基本单位,而不是描述实体的数据,这是和面向过程的程序设计方法所不同的。
(5) 提出新矛盾引入新任务。
紧接着,可以利用学习者面对十几行代码持有的疑惑,指出发现的新问题:简单的问题却编写了很长的代码,似乎将问题复杂化了。
但是,对于前两种解法来说,在求圆柱体积时必须要重新将求圆面积的代码重复写一遍,出现了代码冗余。而对于第三种做法,只需要在其基础上进行类的派生和继承,就可以复用Circle类中计算圆面积的代码。
(6) 讲解分析递进子任务2。
给出圆柱体类的定义,使之从Circle类继承半径和计算圆面积,像前文一样分析其优点,并总结继承和派生的使用要点。
(7) 引导拓展提出新任务3。
如果继续求解其他一些几何图形的面积,诸如三角形面积,长方形面积,或球体积,圆柱体体积等,一般希望对外部用户只提供一样的接口就能够完成相似的操作。由此,自然地引出抽象类,多态等概念,而且使学生轻松了解了什么是多态,以及为什么使用抽象类等知识。
(8) 知识点的总结与提升。
课程进行到这里时,大部分面向对象的基本概念已经学习完毕,从类的定义到继承和派生,多态和重载,抽象类等。在学习者主动参与,分析和解决了问题之后进行分析和总结,将习得的新知识系统化、条理化,从而使学习者的理解得到升华。
在新知识得到总结和巩固之后,可以进一步提出新的子任务4,就是当几何图形的数据已知时,可以在声明对象时初始化,然后引入构造函数、析构函数等。
在案例1的处理上,始终以问题为导向,通过提出问题,促使学习者卷入学习;通过引导学生探究,促使学生积极思考。在各个螺旋式渐进子任务的设计中,为保证学习者思维的连贯性,将构造函数、析构函数等内容后移,这样,反而使得整个课堂节奏紧凑,内容易于理解。这也是螺旋式渐进教学法的好处,即思维连贯,难点分散。
根据案例1的教学过程设计,通过对教学内容和知识点的螺旋式递进安排,使得很多比较抽象的概念和知识简单化,使学习过程成为一个不断主动探索完成任务的过程,并且,这种层层深入、逐渐提升的方式给学习者留下深刻印象,学习者在较短的学时内完成了学习内容,且效果良好。教学实践证明,这种教学方法值得在信息类课程中推广。
5螺旋式递进案例教学法实施过程中易出现的问题及对策
(1) 案例选取不合理。
案例如何选取,选择的规模如何控制,以及案例教学的具体实施过程都是教学中遇到的新问题。案例选择不好,其原因要么是案例中包含的新知识太多,要么是不能完全阐述教学计划内容。几十年来,传统教学法沉淀了不少优秀的教学用例,随着案例教学法在信息类课程中的推广,我们也急需设计和积累这方面的教学案例。
(2) 递进子任务分解不合理。
这是分解子任务的关键和难点所在。由教师分解后的子任务太小或太大。难度太小不利于课程内容层层深入式展开,难度太大则授课进度缓慢,课程内容容易被淡化。因此,教师要根据学生特点和教学目标,以够用、实用为原则,循序渐进,适当分解。
(3) 子任务中引入和展开的知识点太多。
这是教师在讲授子任务时,受传统教学法影响,而最容易走入的一个误区。一个子任务求解过程涉及的知识点太多,学习者会感到内容庞杂且无所适从。因此,教师在备课时,要仔细分析,认真取舍,深刻把握和界定难度,引领学生逐步认识面向对象的精髓。
6结语
在程序设计课程教学法经历了传统的讲授法、“任务驱动”法等教学模式后,本文以建构主义理论为依据,结合实际教学经验提出一种新的“螺旋式递进案例教学法”,它要求教师认真做好准备,充分发挥课堂的主导作用,以案例为驱动,将案例按照螺旋式递进关系适当分解、细化,并以分解后的子任务为线索展开教学。实践证明,该教学方法能有效激发学习者的学习兴趣和实践积极性,在较短的学时内能完成原定的教学任务,显著提高程序设计类课程的教学效果和质量。
参考文献:
[1] 贺海晖,石林祥.“面向对象程序设计”课程建设的实践与探索[J]. 计算机教育,2009(10):37-38.
[2] 王桂平. 基于实训项目的面向对象程序设计课程教学[J]. 计算机教育,2009(13):191-193.
[3] 张丽梅. 案例教学法的研究与教学实践[J]. 黑龙江教育:高教研究与评估,2006(03):51-52.
[4] 李长荣,吴迪. 软件工程专业程序设计基础课程教学的研究[J]. 计算机教育,2009(13):140-142.
[5] 张东生,李玉玲. 面向对象程序设计的教学研究[J]. 河南大学学报:自然科学版,2002(03):107-110.
[6] 朱清华. 面向对象程序设计的教学改革[J]. 教书育人,2005(11):43-44
[7] 梁涛. 建构主义学习理论在C程序设计教学中的应用[J]. 新疆师范大学学报,2007(2):117-120.
[8] 陈洪东, 刘思琦. 案例教学法及应用[J]. 科教文汇(中旬刊),2009(01):95.
[9] 戴维•加文,王公龙. 创造案例教学:为了适应现实世界的专业教育:哈佛大学戴维•加文教授关于21世纪案例教学的新思考[J]. 党政论坛,2009(06):57-59.
Teaching Research with Spiral Case-task to Implement Object-oriented Pogramming Courses
YANG Zhao-xia
(Department of Software Engineering, Lanzhou Jiaotong University, Lanzhou 730070, China)
Abstract: The programming techniques of object-oriented developed rapidly along with GUI.How to organize teaching process of object-oriented curriculum is one of hot issues in the fields of higher education in recent years.In this paper, aimed at the object-oriented programming technology features,one teaching method of spiral case-task has been put forward according to our teaching experience and constructivist learning theory.It has been proved by practice that the teaching methods of spiral case-task could stimulate learners interest in learning and improve the quality of education about courses of information technology.
Key words: teaching with case-task; objected-oriented; programming; C++ language
(编辑:郭小明)
推荐访问: 程序设计 面向对象 案例 实施 教学