刘三满
(山西警官高等专科学校,山西 太原 030021)
面向对象程序设计在社会工作中应用广泛,是大学计算机专业开设的一门重要基础课程,如同数学、外语一样,是一门必修的基础课,其教学内容不针对某一专业领域,而主要涉及计算机基础性和通用性的技术及应用。这门课程的教学目标,是培养学生利用计算机分析问题、解决问题的意识与能力,提高学生的计算素质,为将来应用计算机知识与技术解决自己专业实际问题打下基础。这门课程在教学中不应当做一门实用技术来看,而是一种广义的素质教育,是在潜移默化中提高学生的思维能力、分析问题与解决问题的能力,帮助设计者具备综合的分析能力、灵活的解题方法以及严谨的逻辑思维。
面向对象程序设计又是一门难学、难懂、难以应用的课程。要以学生为主体,重视学习者的学习规律,顺应学生的学习兴趣。从内容到形式上改革面向对象教学,以强化实践性、培养较强的动手能力为出发点,设计教学过程,组织一个新的教学体系,构建与之相配套的教学模式,变“要我学”为“我要学”是我们在面向对象程序设计教学中迫切需要思考和解决的新课题。
在面向对象程序设计教学中,我们不再局限于单纯介绍面向对象基本语法,而是本着面向未来的精神,把面向对象作为一种实践工具,以程序设计方法为主线、语法和结构为核心,能力培养和提高学习兴趣为目标,注重理论与实践的结合、先进性与基础性的统一,变应试为应用。
在教学内容上,摒弃以往以讲述语法为主的教学内容,重视新形势下新方法、新规则和新思想的传授,把程序设计领域最新、最有价值的思想和方法渗透到面向对象中,让学生多角度、多方式掌握程序设计的精髓,培养学生无论以后使用什么语言编程,都能灵活应用这些思想和方法的能力。
皮亚杰在建构主义学习理论中强调,学习是学习者认知结构的组织和重新组织的过程。学习活动的主要特点是一个“顺应”的过程,即学生不断地对已有的认知结构做出必要的调整和更新,使它适应新的学习对象,并实现“整合”。
考虑到绝大部分学生今后不会去搞程序开发,所以思维能力的培养是首要的。从这一角度来说,先过程、后对象的方法更符合学生的认知规律。而过程化的程序设计方法和解决问题的思路更切合学生已有的认知结构,甚至可以说就是我们日常分析问题、解决问题思路和步骤的一种计算机的代码化,所以更易于被学生接受。
采用一体化教学方法,以程序案例为主教学,通过案例讲解语法要点和难点。
在教学过程中,将学生学习概念、规律的过程设计成对这些问题的“生活化”和趣味化的活动思维过程。精心编写趣味性、实用性、难度适中的例题,做到用丰富的实用例题讲述语法、概念及算法,而不是为了教语法而举例。
“案例驱动”教学法,是一种以应用为目的、从实例出发的教学思路,体现的是一种以学生为本的教学思想,因而可以调动起学生自主获取知识的学习愿望。应用在面向对象程序设计教学中,就是讲解语法时不停留在理论讨论上,不是教会这一语法现象是什么,而是通过实例教会学生某一语法现象如何应用。比如,算术运算符中的求余运算和整除运算是比较有特色和应用较多的运算,在讲解这两个运算符的时候,就不能只停留在写两个表达式让学生计算出结果来,而应该结合实例让学生知道这样的语法特色用在什么地方,怎么用,如通过求1 到5的倒数和这样一个小例子使学生认识整除运算的特点及在今后级数求和运算中如何避免其可能引起的误差;通过一个求两位整数的逆序数的小程序,学生就会明白整除运算和求余运算可以用来将一个整数的各个位数分解出来,待后续循环结构介绍完毕时,又可将问题扩展到求任意位数整数的逆序数。当介绍到函数的概念时,又可将问题引申到回文数的判别,这样将一个对学生来说很难的算法问题分散到各个部分来处理,不仅降低了算法讲解的难度,也使学生能真切地体会到学习语法知识的必要性。
教学始终贯穿一个核心实例—— 学生成绩管理系统的开发。选择这样一个系统的原因是学生比较熟悉有关成绩的业务和功能,同时开发学生成绩管理系统将涉及到面向对象程序设计课程的全部知识点,从而通过该项目的实例化驱动开发,有兴趣地达到学习面向对象的目标。
集课堂、实验、网络教学于一体,教、学、研有机结合、相互促进,形成了“课内教学+课外俱乐部”、“常规教学+实验教学+网络教学”、“开放实验室+自编教材+教学网站+教辅系统”、“课上现场编程互动+课后作业练习+课下实验练兵+上机考试实战+课外创新实践提高”的立体化教学模式。
面向对象课程的教学目标突出培养学生的编程能力,为实现这一目标,在教学内容上抛弃了过多的语法细节和非通用的或实际用途很少的语言特性,理出了重点和教学主线。
从学生的学习心理、认知规律出发,慎重地选择教学方案,精心组织教学内容,注意强调基础性、实用性、先进性和系统性,兼顾教学和自学两方面的适用性。精简过程化部分的内容、降低其难度、衔接面向对象的方法是关键。
主要特点如下:
(1)整个教材以结构化程序设计为重点,面向对象的概念和编程思想为扩展,MFC 编程基础为补充,体现了先进性和系统性的统一。
(2)淡化语法,尤其对语法难点通过实例具体而分散地介绍,舍弃对我们的教学对象不实用和过于复杂的内容,如位运算、共用体、多继承等概念,体现了基础性和实用性的统一。
(3)在内容上降低难度,淡化了过于繁杂的指针概念,简化了字符串的处理方法,体现了基础性和先进性的统一。
(4)将面向对象的一些概念有机地渗透到过程化的内容中去介绍,如引用、函数重载、默认参数,这样避免了在面向对象部分集中介绍过多的概念而使学生产生畏难心理。
(5)教材强调算法的分析训练,有利于在学时紧张的情况下学生通过自学提高分析问题、解决问题的能力。
教学内容的组织方式和切入点对强化实践性教学的作用至关重要。适宜的方法能够自然引导学生从感性的、具体的认识,升华到理性的、抽象的认识、并提高实践能力。
教学内容的改革本着教学内容突出基础理论知识的应用和实践能力培养的原则,以应用为目的,以“必需、够用”为度,加强针对性和实用性。紧紧围绕着高技能人才培养的主线,本着教学内容突出基础理论知识的应用和实践能力培养的原则,以应用为目的,以“必需、够用”为度。
过去教学内容重点放在面向对象语法知识点,结果使学生陷入众多繁杂的语法中,产生畏学情绪。改革后在面向对象教学中,以程序编制牵引理论教学,以核心实例贯穿,以项目开发和程序的拓展驱动教学,教学效果显著提高。
在课程单元的教学中以完成一个实训项目为主线,采用项目拓展、项目递进驱动教学方法,在完成项目的过程中引入知识点,操练语法点。
在软件开发能力方面的培养,同样进行分层次的设计与教学。首先是一套切合实际、有内在联系,不断拓展的实训项目单来保证基础软件开发能力的培养,这是所有学生都应该完成的内容。
结构化的程序设计是本课程教学的基础和重点。
(1)结构化程序设计强调按照一定的结构形式来设计和编写程序,因而设计出的程序易于理解和阅读;同时结构化程序设计的训练不仅可以让学生养成良好的程序设计习惯,而且可以有效地培养学生思维的条理性和逻辑性,这正是我们程序设计课程的主要教学目的所在;
(2)面向对象的方法设计出的程序代码仍要以结构化程序为基础。这些都奠定了结构化程序设计的基础地位。这部分内容在讲解上强调算法分析、淡化语法细节,语法内容是程序实现的手段和工具,而不是学习程序设计的目标。
(3)通过类和对象的介绍使学生了解面向对象方法的实质是强制通过函数来对数据进行操作,从而保证数据操作的安全性,这就是数据隐藏和封装的思想;通过介绍派生类的继承关系,使学生深刻认识面向对象方法对代码重用的支持;而介绍多态性的关键在于让学生了解基于虚函数的多态性的实质是允许将派生类的对象当作基类的对象使用,因而不必为每一个派生类编写功能调用,从而实现接口的复用。这部分内容强调从实用出发,着重介绍基本的、主要的概念。而对从纯理论研究着眼的一些概念,如继承关系中的私有继承以及多继承中的诸多概念等,对初学者来说过于复杂的概念要么不做展开讨论,要么就干脆舍弃。
(4)从结构化程序设计到面向对象的方法过渡时,要解决学生思维方式的转换和衔接的问题。由于思维惯性,学生会将面向对象方法和结构化方法的比较贯穿于所设计的程序中。授课时要从学生的认识规律出发,不必急于空泛地强调面向对象方法的好处,要让学生清楚面向对象的程序设计和结构化程序设计一样,只是一种程序设计方法,它是为解决程序复杂性而产生的。就解决简单问题而言,并非一定要采取面向对象的方法,也并非面向对象方法一定比结构化方法更好。结构化程序设计是从一个个具体的局部入手,描述问题的解决过程;而面向对象的方法是从全局的角度抽象出问题所涉及对象的整体框架,再来描述各层次、各部分的内在联系。
(5)面向对象特别适合编写系统软件,执行速度快,代码质量高,在进行系统控制、调节、测量、硬件驱动等方面具有独特优势,这些优势必须要通过实训室中软硬件结合的程序设计方可体现。
将教学重点放在培养学生的编程能力上,教学模式也从传授知识转为培养能力,考核更侧重对学生编程水平的测试,先进理念,实践教学以“理论够用,实践为重”为原则进一步的加强,学生应用知识的能力(实际编程能力)得到了显著提高。
课程考核评价方面,建立了全新的考核评价体系,注重过程考核、编程实践能力考核,促进学生实践能力、创新能力提高。
对课程考核评价体系进行了大胆改革,突出了过程考核和编程能力考核,促进学生实践能力、创新能力提高。改革后的课程评价考核体系主要体现了考核形式多样化、考核标准合理化以及考核试卷个性化三大特征。
(1)努力探索理论教学与实践教学一体化的新路子。按照“少而精”的原则,压缩并精选实验项目与内容,提高教学效率,从而使实验教学与理论教学的结合更加紧密。
(2)适度增加实用性和自主性实验项目与内容。
(3)开放实验室,让学生可自主选择实验时间、自主选择实验内容,为学生提供勇于探索、敢于创新的外部环境。
(4)建设了与课程相配套的具有我院特色的实验环节:课程设计、项目分析设计、科研开发等。考试方式:上机实验和考试结合,增加机试,借助编程题自动评分系统考核学生实际编程能力。开发编程题自动评分系统,向无纸考试过渡;开发题库系统,为机考提供支持;开发在线教学网站,拓展教学空间。
(5)实践教学特色—课内教学与课外实践相结合
课内实验教学兼趣味性和实用性于一体,课余通过指导学生参加科技创新活动、各种程序设计大赛、学生俱乐部的各类微小型软件开发项目,达到巩固知识、锻炼能力、提高素质的目的。
通过几年来的实践教学,我们以学生为中心,以教师为主导,因材施教、因需施教,把强化实践性的教学思想融入到整个教学过程中。加强教学的内容选取、组织形式、实例贯穿、上机实践等方面的改革,在课时安排、教学环境与利用、教学评价与考核等多个环节同时进行了研究。培养了学生的学习兴趣、问题求解和编程能力、探索和创新精神,培养了学生在各专业领域中应用计算机解决问题的意识和能力,取得了相当不错的教学效果。
[1]龚沛曾,杨志强,陆慰民,等.案例教学法在“Visual Basic 程序设计”课程中的应用[J].计算机教育,2004(5):62-63.
[2]HM.DeitelP.J.Deitel.C++编程金典[M].第3 版.北京:清华大学出版社,2007.
[3]龚沛曾,杨志强.C/C++程序设计教程[M].北京:高等教育出版社,2007.
[4]牟连佳,梁皎,李丕显,等.高校非计算机专业计算机基础教学改革的研究与实践[J].高教论坛,2010(2):94-98.