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

2014-04-25 22:14袁国武张学杰孔兵丁海燕杨军
计算机教育 2014年3期
关键词:教学改革

袁国武 张学杰 孔兵 丁海燕 杨军

摘要:针对面向对象程序设计课程教学中存在的问题,从课程设置、理论课教学、实践课改革等方面提出改革基本思路、原因和改革方法。

关键词:面向对象程序设计;教学改革;Java

1 教学中存在的问题

笔者根据多年的教学经验,总结出面向对象程序设计课程教学中主要存在以下问题。

(1)学生熟悉了c语言为代表的过程化程序设计思想,难以转变为面向对象程序设计的思想。在第1学期,学生学习了c语言,第2学期学习数据结构时,也大量采用c语言进行编程,学生已经熟悉了过程化程序设计的思想,因此,当接触到面向对象编程语言时,难以接受面向对象的思想和方法。部分学生在学习了一学期后,仍然会写出“方法名(对象名)”这样的语句,并且不习惯于“对象名.方法名”这样的调用方式。

(2)理论课所讲实例间关联性小,实验课中验证型实验过多,且验证内容单一,前后实验没有关联和连续性,严重地影响了学生自主学习的兴趣和对知识点的统一性认识。现有的实验依赖课后的上机习题。这些习题通常只针对本章的某个语法或知识点进行设计,前后章节的上机习题没有关联,学生不能通过这些上机习题对面向对象程序设计思想从整体上进行认识。即便全部上机习题做完,也都是一些非常小的“玩具”程序,不能对学生进行综合型实验训练。

(3)计算机软件水平考试中面向对象程序设计题目做的不好,严重影响该专业认证考试的通过率。软件水平考试是计算机的专业认证考试,能在很大程度上体现所培养学生综合掌握计算机各方面知识的水平。该考试的证书是用人单位挑选计算机专业学生的重要指标。经过多年参加计算机软件水平考试云南省考区软件设计师试题的阅卷,我们发现软件设计师试题中面向对象程序设计题目的得分情况不好,多数学生的得分低于总分的1/3。所以,教学中加强对软件水平考试中面向对象程序设计的训练是非常必要的。

因此,对面向对象程序设计课程进行教学改革,提高学生面向对象程序设计的能力势在必行。

2 教学改革的措施和方法

2.1 课程设置的调整

在2009年教学计划修订中,面向对象程序设计被提前安排在第3学期开设,以Java语言为例进行讲解和实验,有3个学分,理论讲授36课时,实验36课时,与之前的18课时实验课相比,加大了实验的比例。课程调整的主要原因如下。

(1)以Java为代表的面向对象程序设计语言应用非常广泛,是计算机专业学生必须掌握的技能,提早讲授会让学生有更多的时间去熟悉。

(2)Java语言可以作为其他专业课的实验工具,表1为Java在各门课程实验中的应用,其中的某些知识点可以采用Java方便地进行实验。

(3)在专业课的安排上,保证每学期至少有一门课程与程序设计紧密相关,使程序设计贯穿本专业4年的学习过程。教学计划修改后,实验中需要进行编程的课程见表2。可以看出,面向对象程序设计提前到第3学期,用Java语言为例讲解,对后续课程的学习非常有利。

2.2 理论课教学改革

在用Java讲授面向对象程序设计的知识时,传统的讲解方法是先讲Java语言的历史、基本语法,然后再讲解面向对象的理论知识、类、对象、封装、继承、多态等概念,这也是课本常规的编写顺序,但是对于很多学校来说,学生学习的第一门编程语言是C语言,已经习惯了把程序分成多个函数的思想。在讲解了Java语言的历史、基本语法之后,学生在接触到类时,仍然习惯于过程化的程序设计思维。由于课堂讲解的例子都很简单,这些例子采用c语言也可以很方便地实现,而采用Java语言实现时,反而显得代码更多、语法更复杂,这就令学生怀疑采用面向对象的方法会令简单的问题复杂化。

事实上,面向对象程序设计课程的目的是在学生已有过程化程序设计思想的基础上,让学生的思维向面向对象程序设计思想上转变。我们可以调整部分教学内容的顺序,以达到更好的效果。

1)Java和C语言基本语法的不同之处。

由于Java和c的基本语法大部分相似,学生有c语言的基础,因此教学过程中只需要说明两者的不同之处。基本语法中,Java和c的不同之处主要有两点。

(1)基本数据类型:char类型,c语言中是1个字节,采用ASCII编码,而Java语言采用Unicode编码,长度是2个字节;布尔类型,C语言中用0表示false,非0表示true,而Java语言提供的boolean是一种基本数据类型,只有false和true两种取值。

(2)数组类型:在c语言中,数据类型直接声明后就可以使用,如“int a[10]”,而在Java中语言,声明后还要创建才能使用,如“int a;a=new int”,或者声明和创建连在一起写为“int a[]=qtew int[10]”。

2)讲解几个Java系统类,让学生体会面向对象编程的好处。

Java的系统类库很多,可以挑选几个让学生熟悉,编程实现一些小程序,体会面向对象的魅力,让学生习惯“对象名.方法名”这样的调用方式。

(1)String类:编程中用的比较多的运算是字符串的操作,在c语言中很多操作要自己编写代码实现。而在Java中,字符串的定位、比较、连接、查找、求长度、替换、拆分、去空格等多种操作只要简单地用“字符串名称,方法名(参数)”的调用方式就可以完成,完全不用了解这些功能到底是怎样实现的,只需知道怎样调用、参数需要什么,就可以轻松使用。

(2)Frame类或JFrame类:现在的程序基本上都是窗口形式的可视化用户界面,学生在学习c语言以后,一直很好奇可视化用户界面是怎样实现的,可是在C语言中学生没有办法实现。在Java中,给学生简单讲解Frame类或JFrame类的基本方法,学生就能用“JFrame myWindow=new JFrame();”这样一条简单的语句创建一个窗口进行显示,然后可以用“myWindow.setTitle(“我的窗体”);设置窗口标题,用“myWindow.setSize(800,600);”设置窗体大小为800×600点,还可以改变窗口背景颜色、添加标签等。这些操作都只需要简单的几行语句,不需要了解Frame类或JFrame类是怎么实现的,就能实现一个可视化窗口,学生就会觉得以Java为代表的面向对象编程语言很简洁、方便。讲解时,可以顺便讲解如何使用“import”导入包。endprint

3)面向对象的知识。

学生了解到所讲的几个Java系统类使用的便捷性、简易性后,就会有兴趣学习自己怎样定义需要的类。讲解时,可以用前后有关联的例子进行举例,最常见的例子就是图形计算面积的例子。例如,可以定义圆类Circle,它有1个公有成员变量radius,表示圆的半径,1个方法getArea(),求圆的面积。这时,定义一个圆的对象c后,可通过“c.radius=10;”直接赋值,但是这样的方式可以给radius一个负数,这显然不符合圆的定义。这时,我们可以引导学生把radius设置为私有类型,不允许直接修改,并增加方法setRadius()设置半径。该方法可以先判断半径值,如果给定半径是负数,则把radius设为0。如果学习了异常处理后,这里可以修改为半径小于0就抛出一个异常,这样就可以保证radius得到一个合理的值,保证程序的正确性和合法性,通过这个例子可以引出封装性的概念。

由于每个圆在定义后,都需要用setRadiusf()设置半径,很不方便,因此可以引出构造方法的概念。有了构造方法,可以方便地在定义对象时进行初始化。随后,为了记录生成了几个圆对象,可以引出静态变量。在讲解继承性时,可以引入圆柱体类Cylinder,因为圆柱体的底面是一个圆,可以在圆的基础上,增加圆柱体高度height,计算圆柱体体积时可以使用圆的getArea()方法得到底面积,然后再乘以height,这样可以引导出继承性的概念。当然这个例子最好用类的组合来实现,在讲解类的组合时可以用继承实现的方式进行比较。在讲解多态性时,可以引入其他图形,如三角形、矩形,将它们求面积的方法名称统一为getArea(),引出抽象类的概念。定义抽象类Graphics,在Graphics中定义抽象方法getArea(),可以讲解方法覆盖的概念。

在子类中,同样也需要初始化对象的构造方法,这时可以引出子类的构造方法的写法,讲解this和super关键字。这样,就可以通过图形计算面积的例子引出很多重要概念,并且通过这个例子,可以看出这些主要概念运用的意义和之间的联系。如果后面讲解图形用户界面,可以要求学生在这些基础上,设计一个求各种图形面积的图形界面程序。

2.3 实践教学改革

在理论课进行改革的同时,对实践教学的改革更为重要。面向对象程序设计课程知识点多、应用广泛,因此我们可以建立多层次实践教学体系。

(1)课堂内实验。该类实验主要验证各个知识点。设计实验内容时,我们尽量做到前后实验有关联,后面的实验是对前面实验的完善,让学生最终能得到一个实用的小系统。在实验中,可以精选一些往年计算机软件水平考试中的软件设计师的程序设计试题让学生实现,要求所有学生都必须完成,让学生提前进入软件水平考试的实战。

(2)课程设计。设计一些规模稍大、有难度、有工作量的题目,这些题目是知识的综合运用,让3-5个学生组队完成,并在最后花部分时间给每个小组进行讲解,综合评分。

(3)各类程序设计竞赛、本科科研和全国计算机软件水平考试。要求学生在学习该课程中和学完该类课程后,参加每年两次的全国计算机软件水平考试中的程序员和软件设计师的考试。可对部分学习能力强的学生进行相关培训,鼓励他们参加ACM国际大学生程序设计竞赛、百度之星程序设计竞赛、TopCoder程序设计竞赛、甲骨文ThinkQuest程序设计竞赛等;鼓励部分有创新思维的学生,让他们选定指导教师,参加校级、省级、国家级本科科研项目。

经过以上多个层次的实践教学,学生的面向对象程序设计能力会有较大提高。参加程序设计竞赛、本科科研和计算机软件水平考试,对学生能力的锻炼、更好的就业都有很大的好处。

3 结语

面向对象程序设计是计算机专业的基础课,对其他课程的学习和实验教学有较大的帮助。由于面向对象程序设计是当今程序设计的主流,而程序设计能力是计算机专业学生能力的最大体现,所以该门课程至关重要。对该门课程进行教学改革,从而提高学生的面向对象程序设计能力也非常重要。

(见习编辑:刘丽丽;编辑:宋文婷)endprint

猜你喜欢
教学改革
中职学校“生本课堂”的调查研究与实践
高校三维动画课程教学方法研究
基于人才培养的技工学校德育实效性研究
现代信息技术在高职数学教学改革中的应用研究
以职业技能竞赛为导向的高职单片机实践教学改革研究
微课时代高等数学教学改革的实践与探索