论文部分内容阅读
[摘要] 如何在有限的学时内,将面向对象程序设计和数据结构有机结合,让学生既能掌握面向对象程序设计和数据结构的核心知识,又能较快地提高软件编程实践水平,是摆在非计算机信息类专业教学面前的一个重要课题,本文进行了一些有益的尝试。
[关键词] 面向对象;数据结构;程序设计
1 引言
面向对象程序设计和数据结构是学习软件设计的两门基础课程。面向对象程序设计解决了编程方法和编程思想问题;数据结构解决了数据的组织和处理方法,直接影响着软件的效率。
“数据结构”中抽象数据类型(ADT)的概念与面向对象中类(class)的概念十分接近,在“数据结构”中使用c++比使用c更贴切,使用c++语言实现数据结构是一种发展趋势,在美国等发达国家高校和国内重点大学已经成为主流。
在计算机专业教学中,面向对象程序设计和数据结构通常各需要60学时。对于非计算机信息类专业来说,通常没有足够的学时数来全面系统地学习这两门课程,如何在有限的时间内,将面向对象程序设计和数据结构有机结合,既掌握面向对象程序设计和数据结构的核心知识,又能较快地提高编程实践水平,是摆在非计算机信息类专业教学面前的一个重要课题。针对这个问题,我们在网络工程专业的实践教学中,经过不断探索,积累了一定的经验,希望能与同行切磋商讨。
2 抓好教学第一关——教材建设
面向对象程序设计与数据结构本身存在着密切的联系,其目的都是为了更好地进行程序设计。针对这种情况,我们首先从教材建设入手,通过新教材体现我们的教学指导思想。
本课程的教学目标不是教会学生一些关于程序设计语言的语法规范,而是以这些语法知识为载体,培养学生学会用计算机分析问题解决问题的能力。为此,新教材主要体现了如下一些特点:
①适当淡化语法,加强基本理论和技能的分析训练,这有利于在学时紧张的情况下学生通过自学提高分析问题的能力。
②通过实例具体而分散地介绍语法难点,将复杂枯燥的语法知识分解到每个生动、有趣、实用的程序实例中,以这些语法知识为载体,培养学生学会用计算机分析问题解决问题的能力。
③在教学内容安排上,以介绍面向对象程序设计为主线,以面向对象程序设计与数据结构的有机结合为突破口,以面向对象的观点来讨论数据结构,以解决数据结构实际问题为途径,使学生在解决数据结构实际问题的过程中融会贯通面向对象的程序设计思想。
3 灵活运用多种教学方法和教学手段,优化课堂教学质量
面向对象程序设计与数据结构是一门既有难度又有深度的课程,教师好的教学方法和教学手段就显得尤为重要。
3.1 以生动形象的比喻阐释抽象的概念。C++语言中的许多概念对于初学者而言,显得抽象而深奥。作为任课教师如果能在讲课中适当地运用形象、生动的比喻,常常会使许多看似深奥的概念变得浅显而易于理解。比如我们可以将拷贝构造函数的作用与生活中的“复印机”作类比,将队列的插入和删除操作与“排队买票”作类比,将栈的插入和删除操作与“子弹出入子弹夹”作类比等。通过与日常生活中的例子进行类比,在课堂上采用“大白话”的讲授方式,可以促进学生对抽象概念的理解,大大提高学生的学习兴趣与学习动力。
3.2采用“问题启发”式教学。
3.2.1 问题的驱动。问题驱动是指学生在教师设计的情境下发现问题、思考问题、解决问题的过程。在讲课过程中引入“What+How+why”的教学理念,采用发现学习模式,应用启发式教学。What是让学生明确学什么,拓宽学生的视野掌握更多的知识。How就是怎样做的意思。这是思考问题的过程。教师在对问题进行分析时要做到简洁、透彻。解决问题要切实准确,引导学生积极思考。Why就是为什么要这样做。注意教给学生提出问题、分析问题和解决问题的方法,最终达到学生自行探究问题的目的。
3.2.2 问题的多解性。算法设计过程本身是一种创造性的思维过程,通过算法设计可以有效提高学生的创新能力,对于同一个问题要求学生尽量从不同角度去思考,找出不同的解决方法而不是满足于一种方法,通过对同一问题寻找不同的方案来实现可以有效发散学生思维、拓展学生的思维。比如在讲解“顺序队列”的“假溢出”问题时,通过提问进行启发,层层深入,最终给出三种不同的解决方案,培养学生的发散思维能力,让学生带着疑问去学习。
3.2.3问题的特殊性。一般的方法适合于解决普通的问题,但往往不适合一些特殊的问题。为了更有效地解决问题,对于特殊的问题往往需要寻找特殊的方法。例如:有一数组中保存了个人信息的数据,其中含有性别,设计一个排序算法使记录按女在前男在后的顺序排列。解决这个问题可以选择多种排序算法,常用的排序算法都能实现,但是效率不高。而采用快速排序可使排序时间效率为O(n)而不是O(n2),这比其它的排序算法都要好。通过该问题的启发可以使学生更好地理解快速排序算法的思想。
3.3 采用多样化教学手段,强化教学效果。为了让学生在有限的时间内更好地学习知识,课堂教学安排了部分内容采用CAI课件,制作了动态演示过程,如出入栈、出入队列、二叉树遍历、图遍历、各种排序和查找等等。通过动态演示,学生对各种操作过程很容易理解,达到了事半功倍的教学效果。另外,课后通过网络平台加强教学的互动性。由于“数据结构”课程的教学内容具有较强的抽象性和技术性,教学内容难以通过课堂讲授完全被学生理解和掌握,为此,我们开发了“面向对象程序设计与数据结构”多媒体网络化教学系统,该系统提供了五个板块:多媒体课件、知识讨论、教师答疑、习题与在线测试、视频在线教学。课外学生可以随时上网浏览、学习、下载、讨论、习题自测、与教师联系,实现互动式教学。
4 强化实践技术技能的训练,提高实际编程能力
4.1 重视面向对象思想的熏陶,培养分析和解决问题能力。面向对象程序设计的教学,关键是对学生进行面向对象思想的培养。教学过程中结合具体的实例引导学生采用面向对象的思想进行分析、设计,最后编程解决问题。通常采用“小题目大任务”的方法,即每个实验学生编写的“小题目”并不是孤立的,而是相互联系的,实际上它们都是一个较大型较复杂程序的各个有效的组成部分。最后当进行课程设计时,要求学生把平时完成的程序段编写成独立的成员函数,并把这些成员函数进行封装,构成一个比较完整复杂的程序。这样学生自然而然地就理解、吸收了面向对象的程序设计思想。
4.2 加强理论联系实际,提高实际编程能力和创新能力。
对于培养学生的动手能力,教师可从以下几个方面进行考虑:
①精心准备上机操作的内容。上机内容要有针对性。题目新颖并具有趣味性,另外,要能满足不同层次学生的需求。尽量选择与实际结合紧密的例子,让学生体会到学有所用,才能激发其学习兴趣和动力。提高学生解决实际问题的能力。
②对于一些和算法相关的实验题目,可要求学生在上机之前画出程序的流程图或者写出伪代码,这种方法可帮助学生了解程序设计的思路和方法,既能把握问题的全局。也使每个阶段的问题更加明确和容易处理,从而避免了很多学生编程时一筹莫展的局面。
③强调程序调试能力的培养。重视提高学生调试程序、检查排错的能力。可通过现场演示等手段,向学生介绍注释法、中间结果分析法等多种调试程序的方法。尤其要使其掌握最重要的单步跟踪调试法。
5 总结
在面向对象程序设计与数据结构的教学过程中,我们以面向对象程序设计为主线,以c++语言语法规则、数据结构知识和面向对象思想为基础,以面向对象程序设计与数据结构的有机结合为突破口,以面向对象的观点来讨论数据结构,以解决数据结构实际问题为途径,将数据结构的知识融合到面向对象的程序设计中,使学生在解决数据结构实际问题的过程中融会贯通面向对象的程序设计思想。教学过程中我们灵活地运用多种教学方法和教学手段,重视实践环节,注重学生能力和素质的培养。解决了以往学生单独学习面向对象程序设计和数据结构时所遇到的抽象、枯燥等问题,学生学习兴趣浓厚,软件编程能力有了明显的提高。
参考文献
[1] (美)Michael Main,Walter Savitch著,刘东、张丽译
[2] (美)Robert L.Kruse,Alexander J.Ryba著,钱丽萍译
[3] 刘萍等,面向对象程序设计与数据结构
[4] 马长英,教学方法改革的制约因素及基本立足点
[5]高飞等,c++与数据结构
[关键词] 面向对象;数据结构;程序设计
1 引言
面向对象程序设计和数据结构是学习软件设计的两门基础课程。面向对象程序设计解决了编程方法和编程思想问题;数据结构解决了数据的组织和处理方法,直接影响着软件的效率。
“数据结构”中抽象数据类型(ADT)的概念与面向对象中类(class)的概念十分接近,在“数据结构”中使用c++比使用c更贴切,使用c++语言实现数据结构是一种发展趋势,在美国等发达国家高校和国内重点大学已经成为主流。
在计算机专业教学中,面向对象程序设计和数据结构通常各需要60学时。对于非计算机信息类专业来说,通常没有足够的学时数来全面系统地学习这两门课程,如何在有限的时间内,将面向对象程序设计和数据结构有机结合,既掌握面向对象程序设计和数据结构的核心知识,又能较快地提高编程实践水平,是摆在非计算机信息类专业教学面前的一个重要课题。针对这个问题,我们在网络工程专业的实践教学中,经过不断探索,积累了一定的经验,希望能与同行切磋商讨。
2 抓好教学第一关——教材建设
面向对象程序设计与数据结构本身存在着密切的联系,其目的都是为了更好地进行程序设计。针对这种情况,我们首先从教材建设入手,通过新教材体现我们的教学指导思想。
本课程的教学目标不是教会学生一些关于程序设计语言的语法规范,而是以这些语法知识为载体,培养学生学会用计算机分析问题解决问题的能力。为此,新教材主要体现了如下一些特点:
①适当淡化语法,加强基本理论和技能的分析训练,这有利于在学时紧张的情况下学生通过自学提高分析问题的能力。
②通过实例具体而分散地介绍语法难点,将复杂枯燥的语法知识分解到每个生动、有趣、实用的程序实例中,以这些语法知识为载体,培养学生学会用计算机分析问题解决问题的能力。
③在教学内容安排上,以介绍面向对象程序设计为主线,以面向对象程序设计与数据结构的有机结合为突破口,以面向对象的观点来讨论数据结构,以解决数据结构实际问题为途径,使学生在解决数据结构实际问题的过程中融会贯通面向对象的程序设计思想。
3 灵活运用多种教学方法和教学手段,优化课堂教学质量
面向对象程序设计与数据结构是一门既有难度又有深度的课程,教师好的教学方法和教学手段就显得尤为重要。
3.1 以生动形象的比喻阐释抽象的概念。C++语言中的许多概念对于初学者而言,显得抽象而深奥。作为任课教师如果能在讲课中适当地运用形象、生动的比喻,常常会使许多看似深奥的概念变得浅显而易于理解。比如我们可以将拷贝构造函数的作用与生活中的“复印机”作类比,将队列的插入和删除操作与“排队买票”作类比,将栈的插入和删除操作与“子弹出入子弹夹”作类比等。通过与日常生活中的例子进行类比,在课堂上采用“大白话”的讲授方式,可以促进学生对抽象概念的理解,大大提高学生的学习兴趣与学习动力。
3.2采用“问题启发”式教学。
3.2.1 问题的驱动。问题驱动是指学生在教师设计的情境下发现问题、思考问题、解决问题的过程。在讲课过程中引入“What+How+why”的教学理念,采用发现学习模式,应用启发式教学。What是让学生明确学什么,拓宽学生的视野掌握更多的知识。How就是怎样做的意思。这是思考问题的过程。教师在对问题进行分析时要做到简洁、透彻。解决问题要切实准确,引导学生积极思考。Why就是为什么要这样做。注意教给学生提出问题、分析问题和解决问题的方法,最终达到学生自行探究问题的目的。
3.2.2 问题的多解性。算法设计过程本身是一种创造性的思维过程,通过算法设计可以有效提高学生的创新能力,对于同一个问题要求学生尽量从不同角度去思考,找出不同的解决方法而不是满足于一种方法,通过对同一问题寻找不同的方案来实现可以有效发散学生思维、拓展学生的思维。比如在讲解“顺序队列”的“假溢出”问题时,通过提问进行启发,层层深入,最终给出三种不同的解决方案,培养学生的发散思维能力,让学生带着疑问去学习。
3.2.3问题的特殊性。一般的方法适合于解决普通的问题,但往往不适合一些特殊的问题。为了更有效地解决问题,对于特殊的问题往往需要寻找特殊的方法。例如:有一数组中保存了个人信息的数据,其中含有性别,设计一个排序算法使记录按女在前男在后的顺序排列。解决这个问题可以选择多种排序算法,常用的排序算法都能实现,但是效率不高。而采用快速排序可使排序时间效率为O(n)而不是O(n2),这比其它的排序算法都要好。通过该问题的启发可以使学生更好地理解快速排序算法的思想。
3.3 采用多样化教学手段,强化教学效果。为了让学生在有限的时间内更好地学习知识,课堂教学安排了部分内容采用CAI课件,制作了动态演示过程,如出入栈、出入队列、二叉树遍历、图遍历、各种排序和查找等等。通过动态演示,学生对各种操作过程很容易理解,达到了事半功倍的教学效果。另外,课后通过网络平台加强教学的互动性。由于“数据结构”课程的教学内容具有较强的抽象性和技术性,教学内容难以通过课堂讲授完全被学生理解和掌握,为此,我们开发了“面向对象程序设计与数据结构”多媒体网络化教学系统,该系统提供了五个板块:多媒体课件、知识讨论、教师答疑、习题与在线测试、视频在线教学。课外学生可以随时上网浏览、学习、下载、讨论、习题自测、与教师联系,实现互动式教学。
4 强化实践技术技能的训练,提高实际编程能力
4.1 重视面向对象思想的熏陶,培养分析和解决问题能力。面向对象程序设计的教学,关键是对学生进行面向对象思想的培养。教学过程中结合具体的实例引导学生采用面向对象的思想进行分析、设计,最后编程解决问题。通常采用“小题目大任务”的方法,即每个实验学生编写的“小题目”并不是孤立的,而是相互联系的,实际上它们都是一个较大型较复杂程序的各个有效的组成部分。最后当进行课程设计时,要求学生把平时完成的程序段编写成独立的成员函数,并把这些成员函数进行封装,构成一个比较完整复杂的程序。这样学生自然而然地就理解、吸收了面向对象的程序设计思想。
4.2 加强理论联系实际,提高实际编程能力和创新能力。
对于培养学生的动手能力,教师可从以下几个方面进行考虑:
①精心准备上机操作的内容。上机内容要有针对性。题目新颖并具有趣味性,另外,要能满足不同层次学生的需求。尽量选择与实际结合紧密的例子,让学生体会到学有所用,才能激发其学习兴趣和动力。提高学生解决实际问题的能力。
②对于一些和算法相关的实验题目,可要求学生在上机之前画出程序的流程图或者写出伪代码,这种方法可帮助学生了解程序设计的思路和方法,既能把握问题的全局。也使每个阶段的问题更加明确和容易处理,从而避免了很多学生编程时一筹莫展的局面。
③强调程序调试能力的培养。重视提高学生调试程序、检查排错的能力。可通过现场演示等手段,向学生介绍注释法、中间结果分析法等多种调试程序的方法。尤其要使其掌握最重要的单步跟踪调试法。
5 总结
在面向对象程序设计与数据结构的教学过程中,我们以面向对象程序设计为主线,以c++语言语法规则、数据结构知识和面向对象思想为基础,以面向对象程序设计与数据结构的有机结合为突破口,以面向对象的观点来讨论数据结构,以解决数据结构实际问题为途径,将数据结构的知识融合到面向对象的程序设计中,使学生在解决数据结构实际问题的过程中融会贯通面向对象的程序设计思想。教学过程中我们灵活地运用多种教学方法和教学手段,重视实践环节,注重学生能力和素质的培养。解决了以往学生单独学习面向对象程序设计和数据结构时所遇到的抽象、枯燥等问题,学生学习兴趣浓厚,软件编程能力有了明显的提高。
参考文献
[1] (美)Michael Main,Walter Savitch著,刘东、张丽译
[2] (美)Robert L.Kruse,Alexander J.Ryba著,钱丽萍译
[3] 刘萍等,面向对象程序设计与数据结构
[4] 马长英,教学方法改革的制约因素及基本立足点
[5]高飞等,c++与数据结构