APP下载

面向对象程序设计教改探索

2010-12-31

计算机教育 2010年8期

  摘要:面向对象程序设计已成为计算机学科特别是软件学科的一个重要知识领域,是学科知识体系的基础。本文概述了面向对象程序设计课程在我院的发展历程,详细分析了该课程在教学内容、教学方法、教学手段以及实践教学方面的改革和实践。
  关键词:面向对象程序设计;教改探索;教学方法
  文章编号:1672-5913(2010)08-0060-04
  中图分类号:G642
  文献标识码:B
  
  面向对象技术(Object-Oriented Technology)是上个世纪90年代软件开发方法的主流,它使软件的开发超越了传统的过程式编程。旧的编程方式,当程序的体积增长时,程序维护和调试变得异常复杂,而面向对象程序设计能简化应用程序的开发,使编程人员轻松步入可重用编程世界。面向对象的概念和应用已超越了程序设计和软件开发,扩展到很宽的范围,如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。面向对象程序设计作为计算机学科本科生的一门必修课程,是大多数专业课程的先决条件,能否学好这门课程将会直接影响到学生后续专业课程的学习,也直接影响到今后的程序设计能力乃至就业等方方面面。本文针对这一课程,就教学内容、教学方法、教学手段和实验教学等方面进行了探讨和探索性的改革和实践。
  
  1 教学内容与时俱进
  
  为了让学生掌握并了解面向对象程序程序设计思想和方法,紧跟软件开发技术的主流,我校从1992年开始开设“面向对象程序设计”课程,到目前为止已有接近二十年。在这二十年的发展过程中,“面向对象程序设计”课程从一门面对研究生开设的高级专业选修课程,逐渐成为低年级本科生的专业必修课程:从最早的C++语言,逐渐过渡到更加纯粹和通用的Java语言。具体来说,本课程的发展经历了以下三个发展阶段。
  第一阶段:1992-1998年。开始是针对研究生开设的一门课程,以C++语言为基础。在当时面向对象理念才刚刚流行,该课程的目标是让学生了解面向对象程序设计的思想和利用这一思想进行系统设计和编程,能从根本上解决从现实世界的问题空间到计算机空间的直接映射,使所设计的系统能更加准确地模拟现实世界;同时面向对象技术从程序的结构、运行机制上保证了程序的安全性、灵活性;大大提高了程序代码的复用性、易维护性和易扩展性。
  第二阶段:1998--2001年。随着面向对象程序设计已经取代面向过程程序设计成为当时程序设计(特别是复杂大系统的设计、编程)的主流方法,鉴于本课程在计算机专业教学体系中的重要地位,我校计从1998年开始,对本课程的教学计划作了重大改动,并开始面向计算机专业的本科生开设,并将其分为面向对象程序设计I、II,分二学期开课。
  面向对象程序设计I,以c++为基础来讲授,使学生感受到面向过程的c语言,如何变成了面向对象的c++语言。本课程通过全面、系统地介绍面向对象程序设计的基本概念、分析方法、设计方法、基本语法和编程方法:详尽地讲述c++语言面向对象的基本特性,其内容包括类、对象、派生类、继承、多态性、虚函数、模板、流类库、异常处理和STL简介等;从而使学生能深刻理解面向对象程序设计的特点和风格,领会类的封装性、继承性和多态性与程序的安全性、结构性和灵活多样性之间的关系,达到掌握其设计方法和编程基础的目的,并为后续课程打下基础。
  面向对象程序设计II,以Java为基础来讲授,令学生体会到什么才是纯的面向对象程序设计语言,体会到“接口”技术的重要性。Java语言是一种通用的面向对象的编程语言,其语法与c和c++相似,但省略了一些难以理解和不安全的语言特征。Java考虑了网络的异质性、宿主机体系结构的多样性以及传输的安全性,所以,编译后的Java代码能够在网上传输,适用于多种平台并确保了客户的安全运行。本课程从面向对象的程序设计思想入手,结合示例程序和实验,较为系统地介绍Java语言的主要特征和编程方法,包括:Java的Application和Applet程序、事件处理、Java中的流和多线程技术、Java网络编程技术和图形用户界面技术等。
  第三阶段:2001年至今。对本课程实践教学环节的要求进一步加强,注重培养和提高学生的动手能力,除了随堂的课程实验之外,还增加了大量的课程设计,以提高学生的综合编程能力水平。课程实验内容主要是以验证性实验、设计性实验为主,其主要目的是以巩固所学的理论知识为主。课程设计以设计性、综合性实验为主,青年博士直接指导学生的课程设计,对开拓学生视野、接触前沿知识起到了积极的作用。
  
  2 教学方法,注重研究
  
  研究型教学方法是相对于单向知识传授为主的教学模式提出的,融学习与研究为一体的教学体系。在“面向对象程序设计”课程中,我们通过案例教学带动学生思考问题的兴趣,通过问题驱动激发学生的主动性和积极性,又通过举一反三培养学生的创新意识,提高其研究能力。
  通过案例教学,使学生在模仿中掌握对抽象概念的感观认识。案例教学在计算机语言类课程的教学过程中,起着至关重要的作用,它是一种符合人类认识规律的认识方法。对于一种新事物新理论,人们首先是通过看得见摸得着的现象获得感性认识,这是一种直觉行为,而后才会上升为理性认识。我们在教学中,以案例教学带动同学们思考问题,取得了较好效果。如在教授递归的概念时,我们就引用汉诺塔的例子,采用图示加动画的方式,启发同学的主动意识,从而彻底理解递归的内涵。
  通过问题驱动,激发学生的学习主动性和积极性。带着问题去学习,是加强同学们主观意识的一种有效方法。我们采用两种去激发同学们的探索兴趣。首先我们会提示同学,如果我们自己设计一门编程语言时,应该注意哪些问题?如在讲成员变量与静态成员变量的区别时,在正式讲授之前,我们会问同学们一个问题:同一类型的对象,如果有一些信息是需要大家共享的,应该如何操作?这些问题极大地提高了同学的学习兴趣,同时也激励着同学从学习“怎么做”向理解“为什么这么做”转变。
  另外,在教学中,我们经常向同学介绍最新的编程思想及编程模式,同时鼓励同学勇于创新,打破常规,大胆提出自己的新想法并付诸实施。
  通过举一反三培养学生的创新思维能力,促进学生综合编程能力的提高。由近及远、由浅入深符合人类思维特征,通过已经熟知的内容引入新的知识是一种有效的学习方法,也是一种高效的教学方法。举一反三法正是基于这种的思路的教学方法。在教学过程中,我们通过在原有程序的基础上逐渐改变和增加条件的方法来提高同学的综合编程能力。
  在运用举一反三法进行教学时,一定要注意两个问题。第一,必须谨慎安排教学课题的呈现顺序,让学生不至于突兀地接触到未曾见过的内容;第二,要注要和问题驱动教学方法的相互配合,以取得较好的教学效果。
  采用研究式的教学方法之后,同学们普遍反映这种方法很有效果,极大的激励了同学们的学习兴趣以及主观能动性,动手编程能力得到了极大提高。与此同时,同学们也主动提出了一些改进意见,我们将在后续的教学工作中继续尝试,勇于创新,力求取得更好的成效。
  
  3 教学手段丰富多彩
  
  为了实现课程的教学目标,使学生不但掌握高级编程语言的知识、编程技术和基本算法,更要掌握面向对象程序设计的思想和方法,培养学生的问题求解和编程能力,以及探索和创新能力,本课程采用了丰富多彩的现代教育技术手段。
  
  3,1课堂多媒体教学
  利用现代教育技术手段,采用“以多媒体教学为主、现场编程演示”的方式,灵活使用多种教学手段,使课堂教学与实验教学相结合。多媒体教学方式呈现的信息量大,图文直观生动,便于程序流程的动态演示,可进行程序从编辑、编译、运行与调试的整个过程的演示,增加学生对程序设计的感性认识。为此,教师要开发与教学大纲和教材配套的多媒体课件,并不断进行修改和完善,形成一套适合研究型大学本科培养的多媒体教学课件,使用课件来讲授语法知识点。但课堂上课件的演示要适当,避免喧宾夺主,不要因为关注形式的变化而忽略了内容本身。课堂上应根据教学需要采用传统板书、问答、讨论、总结等多种手段来配合演示课件进行教学,以保证良好的教学效果。
  授课教师在课堂上利用多媒体设备进行现场编程演示,使同学们全程参与程序的调试过程,由教师带领学生共同分析、寻找程序中的错误,讲解程序的调试技巧,可以增加师生之间的互动,避免由于“填鸭式”的灌输方式所造成的学生被动、消极式学习弊端,可以充分调动学生学习的积极性和主动性,给学生留下更为深刻的印象。
  
  3,2启发引导,精讲多练
  老师采用启发式、互动式教学,在讲授知识时,加强前后相关知识的连贯性,对重点问题举一反三,从多角度、多侧面去阐述,从知识的点扩展为知识的面,扩大学生的思维空间。通过提问,引导学生进行主动思考,使学生逐步从被动接受转向主动学习,从而加强学生思考能力和创新能力的培养,有效地调动学生的学习积极性,激发学生进行主动学习的动力。在教学过程中,通过逐步展开的实训项目和设计,把每一阶段的学习内容进行融合并提升难度,把面向对象程序设计语言的知识点贯穿到具体实训项目的程序编制中。
  在课程早期,主要进行单项的编程练习,重点掌握程序设计语言的基本语句、数据类型与程序结构等。通过反复的自测练习,使学生熟练掌握基本的语言知识,具备基本的编程能力。在此基础上,通过完成一些难度加大的作业,将语言知识和程序设计的内容紧密结合,加深对面向对象语言的全面理解和掌握,培养综合应用语言进行程序设计的能力,真正掌握面向对象程序设计的思想和方法,提高熟练运用语言解决实际问题的能力。此外,通过开发模拟实际应用软件的实训,使学生得到进一步的锻炼,激发学生的学习兴趣,培养学生利用语言编程解决问题的能力,提高学生的探索和创新能力。上述措施都有效地强化了实践能力的培养。
  
  3,3项目驱动,循序渐进
  在教学过程中,针对面向对象程序设计语言的特点,研究新的教学方法和教学手段,尝试采用项目递进驱动式的教学方法,提高教学效率,改善教学效果,激发学生的学习热情。具体做法是在采用项目递进驱动教学法时,精心设计实例,再通过将此实例不断修改、扩充,引导学生参与到程序的编制过程中。在此过程中,把学生所作的程序进行展示、评比,引导学生相互学习,取长补短,优化程序设计。这种实例教学中存在一个螺旋式滚动向前的过程,即提出问题、解决问题、扩展问题、再解决问题、评价解决问题的方法、优化设计等几个环节。伴随着一个程序的层层推进,问题不断得到扩展和解决,有效地活跃了学生的思维,调动了学生的参与热情,使得课堂上的教学活动更加有效地开展起来。这种教学方法使得学生的学习循序渐进,知识逐步扩充,学习效果较好。
  
  3,4利用网络进行师生交互
  除了以常规教学满足大多数学生的学习需求外,还以丰富的网络资源作为补充,以适合学生的学习需求,并鼓励自主学习。网络资源包括教学大纲、电子教案、教学课件、重点难点及学习要求、综合练习、模拟试题等内容,为加强学生的应用能力、实践能力和创新能力。在保留传统的教师与学生面对面答疑方式的基础上,建立在线教学网站,增加网络在线答疑方式,使答疑不受时间和空间的限制,充分利用现代化的网络教学环境,搭建学生自学和师生互动的平台,使其成为课堂教学和实验教学的有益补充,满足部分学生的自主学习需求。
  
  4 实践教学,灵活实际
  
  实践教学以培养学生的动手能力、创新能力和解决实际问题的能力为宗旨,设计不同形式的实践教学内容,有些是所有学生必须完成的,如课程实验和课程设计;有些供学生自主选择,如创新实践和参与竞赛;学生可以根据自己的兴趣和特长,选择相应的题目进行实践。在实践过程中,根据给出的需求,不同的学生可以进行不同的创新性设计,以做出不同的特色,对于培养学生的创新能力具有很好的作用。
  实践教学的内容分为课程实验、课程设计、创新实践和参与竞赛4种方式。课程实验主要是结合课堂所学知识点,设计一些针对性的实验让学生完成,通过该实验,学生能够更深刻的理解和掌握课堂所学要点。课程设计主要是设计一些综合性的设计题目,由指导老师下达设计目标,在老师的指导下,学生自主设计、自主完成。在设计过程中会用到课本之外的知识,因此需要学生自学新知识,培养学生独立解决问题和自学的能力。创新实践更注重对学生创新思维能力的培养,提供题目之后由学生提供设计目标和设计思路,老师进行指导。这样整个设计完全能够体现出学生的综合素质,也能够调动学生的积极性。实践证明这种方法往往会出现一些好的思路和创意。参与竞赛是对学生能力的一种检验和提高,学生根据自己的兴趣和特长,参与不同的竞赛,在指定的时间和条件下完成一定的任务,专业能力得到明显提高。实践教学具有以下三个特点。
  (1)教学活动具有高度的灵活性。实践教学形式多样,内容丰富,有些是针对课堂知识要点,有些是旨在培养学生的创新能力。因此学生可以有很大的自主性,尤其在自选类型的实践教学中,从开发环境、设计模式到编程语言,学生都可以自主选择,在考核时充分考虑学生的创新性劳动,对不足之处给出修改建议,对优秀之处给予充分肯定,不仅使学生的编程能力得到锻炼,还提高了综合能力。
  (2)教学与现实紧密相关。本课程设计的实践教学题目多数来源于实际需求或相关项目,可以提高学生解决实际问题的能力。实践教学题目不是专门设计的教学实验,而是实际生活所需,如改进或开发网站,科研项目的某个子问题等,可以充分调动学生的积极性和主动性,同时使得学生积累了项目经验,对于其他课程的学习也起到了很好的促进作用。
  (3)有利于对学生综合素质的培养。本课程的实践教学多数情况下需要几名学生共同完成,因此对于学生的合作能力具有很好的培养作用。学生需要进行不同的分工与合作,遇到问题需要大家共同解决,互相学习,取长补短,团队协作能力得到很好的锻炼。
  在实践教学中通过老师和学生的共同努力,呈现了不少的优秀作品,取得了一系列的成果,有的被用到实际生活当中,有的获得了竞赛奖项。
  
  5 结语
  
  计算机科学的发展日新月异,“面向对象程序设计”教学方法也需要在实践中不断的改进,才能适应实际的需要和学生的需求。本文中给出的一些实践探索经验,还需要根据具体的学校、学生需求,在教学中进行修改和调整,让学生能够更好的从这门课程中受