项目案例演变教学法在C++面向对象程序设计课程中的应用
2014-06-23李绘卓李郁峰唐峻
李绘卓 李郁峰 唐峻
摘要:为提高学生分析问题和解决问题的综合实践能力,提出在C++面向对象程序设计课程中引入项目案例演变教学法。根据知识点分层次设计可持续进化的教学实践案例,以项目驱动的模式组织教学过程,充分调动师生积极性,使学生以滚雪球模式学习完善课程知识体系,逐步提高程序设计实践能力。
关键词:项目案例演变教学法;C++面向对象程序设计;教学改革
0.引言
面向对象程序设计语言C++具有更高的代码可重用性、可扩充性和易维护等特点,是开发大型软件的主流方法。据TIOBE编程协会2013年2月最新编程语言流行趋势排行榜显示,在前5位最受欢迎的编程语言中,C++仍然在列。国内高校一般都将C++面向对象程序设计课程作为计算机及相关专业的主干课程。探索C++面向对象程序设计课程的高效教学方法,对于提高计算机相关专业学生程序设计这一核心能力具有重要意义。
传统的C++课程教学注重学生对知识点的学习,在教学过程中一般采用知识讲解并辅以针对知识点要求学生掌握的编码实验,而对如何提高学生的面向对象程序分析能力和实现能力等方面的关注不够,偏离培养学生程序设计实践能力这一核心目标,为后续课程教学增加难度。为了帮助学生在C++课程学习中理解面向对象编程思想并有效提高程序设计实践能力,笔者在该课程的教学改革中引入案例项目演变教学法,建设一系列适合课程知识点可持续进化的案例,以项目驱动的教学组织模式促使学生掌握综合知识的运用并切实提高程序设计实践能力,改变C++面向对象程序设计传统教学模式的枯燥特点,提高了教学双方的积极性。
1.理论及实验教学中的若干问题
由于语言类课程在计算机专业课程体系中占有重要地位,因此目前国内高校对于语言类课程教学进行了大量的改革尝试,一般的思路是加强实践教学环节建设,如开展案例教学、引入任务驱动教学模式、增加课程设计环节等,部分高校还引入CDIO工程教育模式。笔者也在改进语言类课程教学方面作出大量尝试,如加大实验教学环节比例、引入在线评判系统和案例教学等,力求使学生通过案例库的训练达到掌握相关知识点的目标,这些教学改革在实践中取得了一定成果,但仍然存在一些深层次的问题。
1)教学案例缺乏整体性和实用性。
在教学案例的设计上,以往的案例是围绕知识点进行设计,导致各章节的案例相互独立,案例之间缺乏关联。学生在这种案例的实践中,很难对面向对象程序设计这一课程涉及的知识体系做到承上启下、整体性的理解,在课程学习中没有主导线索并忽视对知识链的构造。
2)实验教学内容单一。
虽然过去的教学改革中加大了实验环节在总课程中的比例,但是实验教学任务仍然由教师根据课程知识体系进行设计,包括大量验证性实验及部分设计性实验。这种模式的实验设计由于是为了配合理论课教学内容,往往强调离散知识点的学习,而忽视了学生对课程综合知识体系的学习,因此学生很难得到综合运用课程知识解决实际问题的训练。
与此同时,以往的实验设计模式忽视了学生的个性化特点,采用统一的实验要求并不能适应每个学生的发展需要,因此实验内容往往显得较为平淡,不能很好地激发学生的创新意识和自主学习意识。
2.基于工程案例演变的教学改革
针对以上问题,我们在教学建设成果的基础上,从2009年起,围绕切实提高程序设计实践能力的核心目标,按照由简入繁的案例项目演变教学思路,加大教学案例建设和教学方法改进力度,形成了符合地方本科院校程序设计课程的教学模式。
2.1演变教学法概述
通过分析传统教学模式存在的问题,我们在C++面向对象程序设计的课程设计中,引入案例项目演变教学法,其基本思路是将整个教学过程分解为若干教学环节,每个环节都由若干教学案例和一个实践项目组成。在每个教学环节中,首先确定教学主线,提取出核心知识点授课思路并以此为设计案例的基本依据。教师通过小型教学案例解析基础知识点,让学生理解并掌握核心概念和技术。在完成上述环节的教学任务后,我们采用任务驱动教学法,通过一个教学项目整合所有知识点,让学生巩固已有知识并加以实践。随着教学的推进,学生逐步完善现有的教学项目,实现知识的更新和技能的提高。整个教学过程是一个举一反三的过程,也是知识和技能的进化过程。
根据C++面向对象程序设计的课程特点,我们以培养学生程序设计能力为主线,重点培养学生的面向对象程序设计能力、逻辑分析能力和编程能力,将课程知识体系分为4个层次:类与对象、继承与派生、重载与多态、流与STL。围绕学生程序设计实践能力逐步提高这一核心目标,我们将这4个层次的知识体系融入课堂教学案例和阶段实验案例,设计以演变教学法为核心思想的递进式教学案例和教学过程。C++演化教学实验案例的设计如图1所示。教学案例随着教学环节的推进,对学生知识和技能的训练将逐步提高,而训练的逐步推进将形成一个小型的程序设计项目,然后再以项目为驱动综合训练学生灵活运用各层次知识体系的能力,实现提高学生程序设计实践能力的目标。
2.2基于演变教学的案例设计
基于演变的教学中,除了理论知识教学外,选择将典型性、完整性、实用性的案例实践贯穿于理论知识中极为重要。教师在案例的设计中应当遵循案例在整个教学过程中的连贯性。随着理论知识的深入,可以进一步将教学案例迁移到下一个教学环节并逐步对教学案例加以改进和完善。教学案例经过滚雪球的叠加方式,不仅令理论知识得到积累,还完善和扩充项目软件功能,保持前后知识点的关联性,使得程序也越来越贴近实际应用,激发了学生的学习兴趣,提高了学生解决实际问题的能力,从而实现知识和技能两方面的进化。在教学过程中,如何设计这样的教学案例是关键。根据多年的教学实践经验,目前我们已总结出一批教学案例,对其中两个案例予以简单介绍。
1)简单的食物链。endprint
该题目意在通过程序模拟一个简单的食物链,通过模拟食物链生存规则观察食物链中各生物的生存状态。食物链的选择可以有多种,如青草→野兔→狐狸→狼、河谷类植物→昆虫→食虫鸟→鹰等。
2)员工管理工具。
该程序设计实现一个小型企业的员工管理软件。一般的企业包括普通员工、财务人员、管理人员3类人员。案例需实现企业基本信息管理、工作任务安排、财务管理等。
案例的讲授过程分成4个层次,对应理论教学过程中的4个阶段。案例分析过程见表1。
2.3基于演变教学的实验教学设计
理论教学负责讲解面向对象程序设计分析的基本方法以及实现手段,实验教学除了验证理论教学的内容外,更为重要的是强化理论知识并将其灵活运用到程序设计中,提高分析问题和解决问题的能力。在实验教学环节中,我们根据案例项目演变教学思想设计了一系列实验题目。该系列实验题目之间在知识点应用上具有进化性的特点,每一个题目在知识点应用上都是承上启下、层次推进。同时,我们在题目选择上也允许学生不但可以选择新的题目,而且可以对前期题目进行重构改进,使得学生可以根据自己的情况选择实验题目,满足学生多层次的需求,激发学习兴趣。学生通过独立或协作完成项目实践,既验证了所学理论知识,又锻炼了解决问题的实践能力,同时还能增强下一阶段学习信心。在连续两年的教学改革实践中,我们共设计出12个作业题目,见表2。
在设计这些题目时,我们给出不同的层次实现要求,可以将这些题目做成一个小的控制台程序,也可继续扩展,如通过加入MFC、QT等UI设计后开发成一个小软件工具,从而满足不同层次学生的需求,有利于激发学生的编程兴趣,培养学生“乐于学、勤于练、善于思”的习惯。与此同时,在实验课的实际运行过程中,我们还需要考虑实验管理以及实验考核等问题,并且在这些环节也进行了改革。
1)加强管理。
提前分发作业题目,让学生有充分的时间选题和作准备。
2)考核。
程序考核在很多情况下,往往只注重程序的运行结果以及是否具有丰富的功能,而忽略设计过程。我们采用小答辩方式,由教师提问,考查学生的程序设计情况,同时参考运行情况和实现的功能,既可以全面衡量学生对知识的掌握情况,又可以避免相互抄袭现象。
3)案例的可复用性。
该课程所用案例可同时用于同期开始的课程或后续课程的分析案例,如软件测试技术、需求工程、软件过程分析、项目管理等课程。
3.面向对象程序设计演变教学法改革效果
在应用案例项目演变教学法的教学实践中,C++面向对象程序设计课程教学取得了良好的效果。学生在课程学习中无论是在理论环节还是在实验环节都受到了充分训练。在理论环节中,通过教师对彼此相互衔接且具有知识点进化特色的案例群的讲解,学生逐层理解了理论知识点和基本概念;在实验环节中,以项目为驱动的方式实现了学生对理论知识点的验证,在提高学生实践技能的同时加深学生对理论知识的理解。
目前C++面向对象程序设计演变教学法已推广运行了两届,共计300名学生接受了课程训练。案例项目演变教学法使学生的知识和技能随着教学的推进而进化和更新。通过一个从基础到高端、从理论到技能的学习过程,学生实现了从简单的小案例学习理论知识,再通过项目锻炼实践技能。经过案例群和课程项目的训练,学生知识体系和实践能力不断改进和完善,学生不仅学习到知识和技能,还能感受到技术的发展历程,积累了更多的开发经验,提高了职业素养。
在两届的教改实践中,我们发现演变教学法相比其他的教学方法,能更好地将理论与实践相结合,特别适合C++面向对象程序设计课程。学生在学习中通过案例项目演化教学法,始终能体会到理论教学中所学知识和实验教学中获得实践能力的不断积累和提升过程,并且由于在案例解析中的高参与度,学生提高了主动分析问题和提出解决方案的能力。在教师的指导下完成项目能够增加学生的学习成就感,更能帮助学生树立起完成下一阶段任务的自信,大大提高学生学习效率以及教学质量。
4.结语
传统的案例教学在面向对象程序课程中已经推广多年,但在面向对象程序设计思想的培养方面取得的效果并不理想。演变教学法应用在面向对象程序设计中,能够兼顾理论与实践教学,提高学生参与度,体现知识和技能的进化过程。经过实践说明,该方法能有效地提高教学效果。此外,由于该教学法在课程内容的选取、课程教学设计以及案例设计等方面均有较高要求,因此在实施过程中应该注重教学团队建设,加强团队分工协作,以提高教学效果。endprint