单位文秘网 2021-06-30 08:24:23 点击: 次
组织好面向对象课程的教学,是近年来高等教育的热门话题之一。本文结合面向对象程序设计课程的教学经验和建构主义学习理论,针对面向对象程序设计技术的特点,提出螺旋式递进案例教学法。实践证明,该教学方法能够激发学习者的学习兴趣、提高信息技术类课程的教学质量。
关键词:案例教学法;面向对象;程序设计;C++语言
计算机区别于其他计算工具的根本特征是“存储程序”,计算机本质上是“程序的机器”,程序设计能力在计算机学科知识体系中具有核心地位。因此,程序设计作为计算机及其相关专业的一门重要核心课程,其教学质量直接影响到后续专业课程的学习和毕业生未来的发展。鉴于程序设计课程的基础性和综合性,如何设计好教学过程以增强教学效果,培养学生的编程能力和实际动手能力以适应社会的需求,始终是教师、学者和专家关注的问题。面向对象编程技术是一个教学难点,为此,很多教育工作者在实践中不懈努力,摸索出一些经验,提出不少有价值的见解[1-6]。
笔者结合多年从事程序设计教学的经验与体会,对程序设计类课程的教学特点和方法做了研究,并在近年教学实践基础上,探索如何将案例教学运用于面向对象的程序设计教学,以螺旋式递进分解子任务的方法展开案例教学内容,在有限的学时内收到较好的教学效果。
1面向对象程序设计课程教学中存在的问题
1.1面向对象方法的特点决定了传统教学法的不适宜性
面向对象程序设计方法作为设计基于GUI(Graph User Interface)软件系统的一种新方法,不仅实践性和技术性较强,包含的新概念、新名词也较多,诸如继承和派生、多态、重载、消息、事件驱动、模板,等等。由于其思维方式和知识结构的变化,传统的罗列概念语法、编程举例讲解、练习验证巩固的三部曲灌输型教学法容易使学习者从一开始就感觉面向对象既抽象、又庞杂,易产生畏惧心理,而且难以体会到面向对象程序设计方法的本质,导致实际开发能力严重不足。
1.2现有教材体系不利于培养学习者的创新思维和系统观
面向对象程序设计方法对编程者的系统观念、全局观念要求较高,而且在面向对象的软件开发过程中,对团队协作配合能力要求较高。但是从现有的教材体系来看,基本都是按照知识点分章节按部就班组织学习内容,各章节的实例不连贯,且很多例子与实际求解问题无关,仅仅是为了说明某个知识点或者原理而设计的代码。这种短小精悍的例子难以贯穿面向对象程序设计方法的大部分内容,进而导致学习者在学习过程中只见树木,不见森林的片面性,也难以形成软件工程人才应具备的科学的系统观。
1.3在大多数高校的培养计划中属于小学时课程
对于程序设计课程而言,其特点是更新快、内容多、课时少。所以按照传统的讲授法和系统的学习方法,难以在小学时内达到课程的教学要求。
传统的系统学习和讲授有许多缺点,它偏重知识的灌输,重理论轻实践,以教师为中心,以单项讲授为主,是代理式的学习方法,培养出的学生实践能力不足,不能满足当前社会对创新型人才的需要。虽然近年来教学方式有所改变,但受传统教学影响,教学内容仍然是理论与实践相脱节,课堂教学空洞、呆板,缺乏吸引力,束缚学生的思维发展且不能发挥学习者的潜力。
2案例驱动教学法
所谓案例就是为了一定的教学目的,围绕选定的一个或几个问题,以事实或实际情境为素材对某一实际情境的客观描述。
案例教学就是以案例为基本素材,将学习者引入一个特定的真实情境中,通过师生、生生之间双向和多向互动、积极参与、平等对话和研讨,从而重点培养学习者的批判反思意识及团体合作能力,促使学习者充分理解问题的复杂性、变化性、多样性等属性的重要教学形式[7-9]。案例教学是近年来倡导的主流教学方法之一,它能很好解决理论与实践的衔接问题。
在案例教学中强调学习者的参与和师生间的互动。情境性、互动性、实践性是案例教学的基本特征。由于案例教学法自身的特点,决定了案例的好坏直接影响到教学的效果及质量。所以案例的选择要做到精、够、深,同时还要注意到量和规模的控制。
3螺旋式递进案例教学法
螺旋式案例教学法是指教师根据对教学内容的理解,将精心选择的案例以知识点的逐渐递进为原则,分解为环环相扣的子任务,每个教学子任务的教学过程设计,均以学习者建构知识点为目标,采用循序渐进的方式展开。
螺旋式递进案例教学法以案例为素材,从学习者已有的知识能力为起点,不断提出新的目标和子任务,又以新任务的解决和新知识点的建构作为新的起点,引出下一个子任务。整个教学过程由若干个循环依次提升所形成的螺旋组成,其中的每一个循环如图1所示。
这种由浅入深、层层递进、螺旋式上升的案例教学法容易吸引学习者注意力,并且,由于设计的子任务能够自然引入新知识,学习者总是可以从一个比较容易解决的已熟悉的内容进入到新知识点的学习过程中,所以学生兴趣高、主动参与度好,绝大部分同学能够跟上教师的进度。同时,通过不断地探索每个简单子任务的求解过程,使学习者能够体验到胜利的喜悦,从而产生学习的成就感,进而转化为学习的动力和源泉。
由于教学时数的限制和案例教学本身的特点,同时考虑到教学内容及学习者的特点,以实用、够用为原则,精心选择三个案例,以C++语言为依托,完成面向对象程序设计方法的基础内容教学。
4螺旋式递进案例教学法的教学设计
4.1精心选择案例
案例1:几何形状的面积和体积。
案例2:学生成绩管理系统的设计与实现。
案例3:员工管理系统的设计与实现。
为了达到教学目的,每个案例的侧重点不同,专门针对面向对象技术的特点而设计。案例1重在面向对象基本知识点的理解;案例2侧重于批量数据的处理和文件操作;案例3强调设计较大型软件系统时的建模方法、以及利用const、static等修饰符处理细节问题的技巧。
本文以案例1为例说明螺旋式递进案例教学法的具体实施过程。
4.2合理安排螺旋式递进子任务
将案例分解为一个个循序渐进的子任务,每个子任务的设计以能引入新的课程内容为益,且预留较强的扩展空间。
案例1的子任务按照层层深入、逐渐提升知识点的原则依次设计。如表1所示。
4.3课堂组织实施
螺旋式递进案例课堂教学的基本组织过程如下。
(1) 教师提出学习目标,引入案例明确任务,针对案例分解子任务。
(2) 分析和求解子任务。这是螺旋式递进课堂教学的关键环节,每个子任务的学习和求解依赖于前一阶段的学习成果,各个子任务的知识点之间构成层层递进的环链关系。子任务的求解过程以层层递进、螺旋式展开。具体可以细化为:利用已知的方法求解子任务,找出旧方法存在的问题和矛盾,分析矛盾和案例,启发学生思考并解决问题,教师引导拓展,提出新的问题和矛盾,解决新的矛盾,总结知识点和它们的用法,通过学生实践巩固和升华。如图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
(编辑:郭小明)
(责任编辑:单位文秘网) )地址:https://www.kgf8887.com/show-113-55558-1.html
版权声明:
本站由单位文秘网原创策划制作,欢迎订阅或转载,但请注明出处。违者必究。单位文秘网独家运营 版权所有 未经许可不得转载使用