郭健杰
浅谈计算机专业课案例设计技巧
郭健杰
福建师范大学信息技术学院
案例设计直接关系到计算机专业课的教学质量,在设计案例时要从学生的整体水平、课程的教学目的、课程之间的关联以及课程本身的重要性等多方面综合考虑,并在教学过程中不断调整完善。
案例设计 教授对象 教学目的
案例是一门课程教学的核心内容,案例设计的好坏直接关系到计算机专业课的教学效果。一个好的案例能够启发和加深学生对知识点的理解;反之,一个不合适的案例不但不能促进学生对知识的理解,甚至还可能造成误解。要设计出适合教学的案例,应把握以下几方面的技巧:
案例设计需要综合考虑学生当前的整体水平,并根据学生的总体水平来控制案例的难度,案例的难度要比学生当前的整体水平略高。理由是显而易见的,难度如果太低,学生已经掌握,吸引不了学生的兴趣,而且对学生也无促进作用;难度如果太高,超出学生学习的能力范围,会打击学生的学习信心;难度比学生当前的整体水平略高,则学生可以通过自己的努力来提高知识技能,达到课程的要求,同时也有利于增强学生学习的信心。
比如在《程序设计基础》课程中设计了一个案例,是开发一个《小区物业信息管理系统》,就这个案例本身来说是个不错的案例,但是《程序设计基础》这门课程是大学一年级新生第一学期学习的课程,对新生来说连什么是程序都搞不清楚,一下子就进入系统开发,对他们来说难度太大,不易理解,会让学生望而却步,甚至还会降低他们学习的兴趣。所以像《程序设计基础》这种基础课程,案例设计不应该过于庞大,过于复杂。《程序设计基础》这门课最初的教学目的就是让学生懂得什么是程序,能够编写最基本的语句就够了。至于让学生明白什么是系统,如何开发系统那是后续高级课程的任务。
假设在《基于.NET Framework 的Windows窗体应用开发》这门课中设计了这样一个案例:输入2个数,输出较大的那个数。估计多数学生看完这个例子会认为太简单。这明显就是一个考查if…else…句型的例子,对学生来说他们已经在《程序设计基础》和《Visual C# 2008程序设计语言》这两门课程里对if…else…句型做了较多的练习,《基于.NET Framework 的Windows窗体应用开发》这门课就没必要在基本句型上花费太多的时间了,而是应该进入较为大型的系统开发,让学生明白什么是软件,怎么开发软件。
上面两门课程的案例就案例本身来说没什么问题,只是把案例用在了不合适的课程,其实只要把这两门课程的案例对调一下就可以了。
设计案例的目的是为了通过案例把知识点传授给学生,让学生通过案例来加深对知识点的理解,最终达到本门课程的教学目的。如何让设计出来的案例能够体现本门课程的教学目的呢?
首先,在设计案例前,需要弄清楚本门课程的教学目的是什么。每门课程都有每门课程的教学目的。比如《程序设计基础》这门课程是让学生掌握基本的句型,能够编写一些小程序;《Visual C# 2008程序设计语言》这门课程是让学生理解什么是面向对象,怎么进行面向对象的程序开发;《基于.NET Framework 的Windows窗体应用开发》这门课程是让学生掌握基于windows的应用程序开发,懂得软件开发的过程。
然后,明确本门课程的教学目的后,就可以围绕它来展开案例设计。比如《程序设计基础》这门课程是让学生掌握基本的句型,可以针对这些常见的句型给每种句型分别设计一些案例将他们各个击破,最后再补充一些总结概括性质的案例,将这些基本句型尽可能多地囊括进去;《实用软件工程方法》这门课程是让学生了解软件开发的过程,软件开发的四个阶段:需求、设计、开发、测试具有同等重要的地位,所以在案例设计时,对这四个阶段要同等对待,不能厚此薄彼,只重点讲解其中的一两个阶段,而忽略了其他阶段;《软件界面设计》这门课程是让学生掌握软件界面设计的技巧,在案例设计时我们重点要讲解的是如何设计界面,至于开发的部分可以少讲,甚至不讲。同时还要讲解不同类型软件的界面设计,不能只讲windows应用程序的界面设计,而不讲web应用程序的界面设计。或者只讲web应用程序,不讲windows应用程序。
设计案例的时候,要弄清楚学生目前已经学习了哪些课程,以后还会学习哪些课程,这些课程里面有哪几门跟本门课程相关。
以《Visual C# 2008程序设计语言》为例,学生之前已经学过了《程序设计基础》,像变量、数据类型、分支语句、循环语句、数组等知识点,学生在《程序设计基础》中已经接触过了,所以在讲解这些知识点的时候就没必要花费太多的时间和精力,只需通过一些简单的案例来给他们复习一下就可以,但是在复习的过程中要指出两门课程中知识点的细微差别。比如char类型的变量,在C语言中长度是8位(1个字节),而在C#中是16位(2个字节)。当然,教学过程中如果还能够给学生指出为什么C#中char类型的长度要设计为16位(2个字节)就更好,因为经过解释后学生就会更好地理解(说明:为了能够保存得下像汉字、日文、韩文等双字节的字符。C#中将char类型的变量的长度设计成2个字节)。
《Visual C# 2008程序设计语言》这门课程之后还有《基于.NET Framework 的Windows窗体应用开发》和《Web应用开发——ASP.NET》这两门后续课程。前一门课主要是介绍用C#来开发windows应用程序,而《Web应用开发——ASP.NET》主要是介绍用C#来开发web应用程序。在进行《Visual C# 2008程序设计语言》案例设计的时候,windows应用程序开发和web应用程序开发可以适当涉及,但是不能讲解得太深入。
此外,在案例设计的时候要考虑这门课程在学生专业领域中所处的地位。像web专业和可视化专业的《网页页面设计制作(PS、Flash)》,这门课程分为photoshop和Flash两个部分,主要是介绍图片处理和flash制作。在进行案例设计的时候,就应该和图形图像专业的案例有所区别。毕竟web专业和可视化专业不是主要培养美工的,对大多数学生来说只要能够用photoshop做基本的图片加工处理和做一些简单的flash就可以了,所以案例设计的难度就不需要太高。
在案例设计时,要向学生之前所学课程和当前课程的任课老师了解他们所使用的案例,尽量避免出现同样或者类似的案例,否则会降低学生学习的积极性,甚至影响老师在学生面前的形象(学生会误认为老师在抄袭案例),从而影响他们对本门课程的学习热情。
案例设计时还要兼顾学生的学习负担。以web专业大二下学期为例,他们开设的课程有《XML Web Service 开发》、《.NET Framework 程序设计》、《基于.NET的需求分析和解决方案设计》、《UML 基础及应用开发》、《软件测试基础》、《Java 语言程序设计》这六门专业课程。就按一门课程让学生开发一个系统来算,学生在一学期内要开发6套系统,就算是老师,同时开发6套系统也会搞得晕头转向,更不用说学生了。更何况很多系统还是类似的信息管理系统,学生开发都觉得厌烦了。所以并非所有课程的案例都是开发一个比较大的系统,有时用一些小程序能够说明问题即可。
一个案例设计的好坏,不单单是看这个案例的内容,更重要的是看它在实际教学中的效果。设计再好的案例也难免在实际教学中出现一些意想不到的情况。笔者在《Visual C# 2008程序设计语言》这门课程的教学过程中就出现这样的情况。在讲完抽象方法和抽象类这节内容后,我设计了这样一个案例给学生做练习:
编写一个抽象类和四个派生类,要求如下:
抽象类Sharp(形状)
有3个属性:长length、宽width、半径radius
(注:属性在不同的派生类中代表的意义可能不同)
2个抽象方法:计算周长perimeter()、计算面积area()
派生类Triangle(三角形)
继承的3个属性长length、宽width、半径radius分别用来代表三角形的三条边
实现抽象方法perimeter()和area()
编写一个带参的构造函数(创建对象时可以传入三角形三边的长)
三角形面积求法:s=周长的一半,面积=(s*(s-长)*(s-宽)*(s-半径)的开方,使用Math.Sqrt()这个方法求开方
派生类Square(正方形)
继承的属性长length代表边长,其他属性不使用
实现抽象方法perimeter()和area()
编写一个带参的构造函数(创建对象时可以传入正方形的边长)
派生类Circle(圆)
继承的属性长radius代表半径,其他属性不使用
实现抽象方法perimeter()和area()
编写一个带参的构造函数(创建对象时可以传入圆的半径)
圆周率取3.14
派生类Rectangle(长方形)
继承的属性长length代表长,width代表宽,radius属性不使用
实现抽象方法perimeter()和area()
编写一个带参的构造函数(创建对象时可以传入长方形的长和宽)
测试这四个派生类
分别创建四个图形,输出他们的周长和面积
在笔者负责的2个班级中,其中一个班级大多数学生能够独立完成,并且掌握了抽象类的相关知识点,达到了教学目的。可是同样的案例,在另外一个班的教学效果就没那么明显,大多数学生只能完成其中的一部分。主要原因是上学期他们班级的《程序设计基础》这门课程掌握得不好,从而影响了后续课程的学习。
为此,需要对案例进行调整,先以示范的形式引导他们写好了抽象类Sharp(形状)和派生类Triangle(三角形)并进行了测试,然后让学生仿照派生类Triangle(三角形)去编写剩下的三个派生类,并完成类的测试。虽然学生主动思考的能力不是很强,但是模仿的能力却不差,很多人很快就仿照我写好的派生类Triangle(三角形),把剩下的三个类都写好了,并进行了测试,基本上掌握了抽象类的相关知识点。