杨建军+郑秀杰
摘 要 三本学校在程序设计的教学中,需要结合学生的特点,就“面向对象程序设计”课程,进行理论课程实践化处理。本文在教学方法的探索上,贯彻CDIO教学理念,注重把实践环节直接引入到课堂中来,同时,缩减整个课程体系的学时,增加学生课后的调试程序的时间,以形成区别于传统教学方式设计的不同措施,并对传统的教学方法和实践化教学方法的效果进行了对比。
关键词 面向对象程序设计 实践化教学 CDIO教学理念
中图分类号:G424 文献标识码:A DOI:10.16400/j.cnki.kjdkz.2015.11.052
"Object-Oriented Programming" Engineering Practice
Teaching Methods Reform
YANG Jianjun, ZHENG Xiujie
(Chengdu College of Electronic Science and Technology of China, Chengdu, Sichuan 611731)
Abstract In College program design teaching, the need to combine the characteristics of students, on the "object-oriented programming" course, theory course practice process. This article in the exploration of teaching methods, and implementing CDIO teaching philosophy, focusing on the practical aspects directly into the classroom in the past, at the same time, reduce hours throughout the curriculum system, increase the time students after school debugger to form different from traditional teaching methods design of different measures, and the traditional teaching methods and practice teaching method results were compared.
Key words Object-Oriented Programming; practice teaching; CDIO teaching concept
1 电子类专业开设该课程的必要性
程序设计语言的发展,随着项目规模的不断增加,从最初的面向过程的程序设计思想,到目前大行其道的面向对象的程序设计思想,表1是Tiobe2015上半年每月开发语言热度排行榜。
在Tiobe排行榜单中,位于前十的语言除了C语言,其他都是面向对象的程序设计语言,可见,工科电子类的专业,培养学生面向对象程序设计思想的重要性,然而,就学习难度而言,面向对象程序设计的学习难度较大,故此,探索一种适合每个学校特点的教学方法至关重要,而面向就业的导向,必须让学生能够具有一定的工程经验,这也是贯彻CDIO理念的思路,笔者在承担我校的理论课程实践化的过程中,对本门课程的教学进行了积极的探索。
2 目前高校“面向对象程序设计”教学模式
传统的“面向对象的程序设计”的课程体系,普遍采用了三阶段的方式完成,即基础阶段的语法讲解,旨在理解语法的配套实验课程,相关的课程设计(可选),在学分的分配上,基本上采取了4:2:1的比例,即基础语法的讲解大致占到4个学分,实验环节占到2个学分,大课程设计占1个学分。该体系的优点是按部就班,有条不紊,学生可以在较为松散的几个学期中完成该课程的学习,缺点是占用学分较多,课堂的效果需要用实验来巩固和弥补。不利于国家倡导的减负原则。
3 基于CDIO实践化的“面向对象程序设计”课程的教学设计
(1)CDIO理念的核心就是工程实践,笔者在实际的教学过程中,逐渐对该课程体系的教学进行了改革调整,即去掉实验课程的安排,而是将实验环节直接引入到基础语法理论的讲解中。
(2)实践化教学方法的设计。实践化教学方法,就是注重实践环节的作用,尤其对于调试程序动手能力的培养,通过实际的操作,让学生能够减少理解抽象理论知识的时间,这样的方式特别适用于二本或者三本院校的学生。教学方法的设计上,主要从以下几个方面进行:
第一,课时总量,以5个学分为宜(即80学时),这样,就将传统的总共112学时缩减了32个学时。
第二,上课方式是实践化的关键,上课方式上,需要学生自带电脑,但是上课地点选用普通的多媒体教室即可,这样既不占用实验室资源,又让学生在上课时可以随时动手调试验证程序,同时如果学生开始调试程序,有利于其将精力集中在教学内容上,而且,在学生如果未完成时,可以在课后自己去找解决方案。
第三,上课讲解和练习的时间比例,笔者通过教学实践,觉得讲解和练习的比例以2:3为宜,即90分钟的一节大课,安排大约35分钟的时间进行讲解,而55分钟由教师和实验老师一起指导学生完成当堂的课程内容。
第四,穿插不同难易程度的模拟项目作为大课程设计的代替,例如,在教学过程中,在讲解面向对象的三个特征时,在每个特征——封装、继承、多态的讲解结束时,都安排不同的模拟项目让学生完成,这些模拟项目或者来自教师自己的工作经历,或者来源于各类企业的面试题目。
第五,考核方式方面,可以采用答辩的方式完成,这样做的好处是可以比较准确地了解到学生掌握本门课程的情况,及时准确获得课程教学效果的反馈。这种方式让学生很难通过作弊获得好成绩,同时,可以锻炼学生的表达能力。
4 实践化课堂示例
在实践化课堂的设计上,笔者设计了每次课程(90分钟)分别由基础讲解(15~25分钟),示例跟随(25~30分钟)和进阶(>30分钟,未完成的学生,提出要求,让其课后自信完成)三个递进的过程组成,下面就以封装的讲解为例进行展示。
基础讲解中,课件展示封装出现的缘由,封装的目的,封装的实现过程。然后需要同学们动手从教材中找出相应的文字描述,并勾画出来。
示例跟随部分,利用多媒体教学设备随堂演示长方形(只关注几何描述)封装的过程,配合板书和课件,将长方形这种几何图形在计算机中描述出来,着重要学生领会出封装为了信息的安全,以及封装如何做到信息的安全等的实现措施。
示例代码如下:
class Rectangle
{
private:
float width;
float height;
public:
float Area()
{
留出空间,引导学生完成此处程序的设计。
}
float Perimeter()
{
留出空间,引导学生完成此处程序的设计。
}
}
然后启发同学写出其中的求面积方法Area和周长的方法Perimeter。在完成以上代码的跟随练习后,要求学生模仿长方形Rectangle类,设计出圆Circle类。
而在进阶阶段,为了增加学生的自学主动性,需要学生自行挑选一种数据结构中学习过的队列、栈或者链表来进行封装,在课堂有限的时间内,对学生提出的疑问进行解答。
5 实践化教学效果
表2是进行改革之前和采用实践化教学后学生考核成绩的统计表,该统计表中,从2009始,对我系嵌入式方向专业的同学,采用不同的教学方法进行授课教学。
由表2可知,传统的教学方法,从考试成绩优秀率,毕业前找到相关方向实习企业的比例,以及毕业从事相关行业等几个方面来考量,都比实践化教学的效果要逊色。
从考试优秀率来看,实践化教学以及采用的考核方法,都非常有利于给学生一定的压力,促使他们不但要掌握理论,而且会操作,实践操作和理论理解通过这样的方式,可以达到互相促进的效果。从在校生选择相关实习行业的数量来看,由于在这个阶段,能够较早地掌握调试程序的技巧,而通过实践掌握的知识也比较扎实,所以在面对相关实习机会时,这类学生具有更好的表现。
可见,在理论课实践化的过程中,“面向对象程序设计”的实践化教学改革,在笔者所在学校取得了较大的成果,在后续的教学过程中,将会不断总结,以期完善。