王立香
(山东理工大学计算机基础教研室,山东淄博255000)
【摘要】在《C#程序设计》的教学实践中,传统的教学模式不利用培养学生软件系统分析能力和工程设计能力的培养,为了解决这一问题,本文提出传统教学方法与案例设计教学相结合的教学方法和实践,在对C#程序设计基本概念讲解基础上,通过具体案例的设计方法和过程,由浅入深的提出案例教学理念。目的在于加深学生面向对象程序设计的理念,提高学生的学习积极性以及加强学生工程实践能力的培养。
教育期刊网 http://www.jyqkw.com
关键词 C#程序设计;案例教学;案例讨论
0引言
计算机语言的发展历程经历了由低级到高级,由结构化程序设计到面向对象程序设计理念的转换。为了提高大学生利用计算机解决工程和科学问题的能力,目前国内和国际上的大部分高校都开设了相应的程序设计课程。程序设计类课程是一门实践性和应用性极强的课程,大量的知识需要通过编程实践才能熟练的掌握。当前,C#程序设计语言是世界上应用最为广泛的面向对象程序设计语言之一,目前国内很多高校都将该语言作为工科类大学生需要具备的一种程序设计语言能力。在传统的《C#程序设计》的授课模式中,教师往往只注重基础理论,如语法结构及原理的讲解而忽略了实践能力的培养,结果使得学生对语言类课程失去了学习的兴趣,或者虽熟练掌握了语言的语法而缺乏解决实际问题的能力。早在20世纪初,哈佛大学的mba课程中就采用了案列教学的理念并且取得了巨大的成功。由于案例教学灵活多样,可以充分调用学生的学习积极性和自主性。因此,引起了国内众多高校教师的研究和重视。针对这一情况,为了达到加强培养大学生程序设计能力和解决科学工程问题能力的目的,结合本人多年教学经验,在教学中结合传统的教学手段,并有效的运用案例教学的方法,可以有效的提高课程的教学质量,提升学生的程序设计能力。
1案例教学与实践
针对学生的专业和层次差异,我校对部分专业的大一新生开设了《C#程序设计》课程教学,由于C#语言是一种面向程序设计语言,它将结构化程序设计方法中的三种基本结构作为局部代码设计的基础。因此需要学生先理解了结构化再深入理解面向对象编程的理念,在教学中存在一定的难度。然而,如果教师在教学过程中,认真研究授课内容,在详细讲解基本概念和语法的基础上,如果设计恰当的实际案例,将传统的教学模式和案例教学手段有效的结合,则可以起到事半功倍的效果。
在教学实践过程中,我们认为,案例教学要与简单的例子教学区分开来。在程序设计语言教学过程中,为了加强学生对语法能力的运用,教材往往会配以适当的例题,解决一些实际问题,如打印九九乘法表,牛顿迭代法方程求解等,这些例子往往只针对某一具体的语法现象进行讲解。可以加强学生对语法的理解,改善教学效果。但这些例子缺乏知识点的前后贯穿,并不能有效的提高学生的程序设计能力。我们认为,案例教学除了具有一定的新颖性和兴趣性外,还应该具有贯穿教学实践过程的特点。同时,我们也要注意到,案例和例子虽然有一定的区别,但并不能完全的割裂开来,两者之间存在紧密的联系,案例教学应该包括例子教学,是众多例子的有机结合过程。
在程序设计语言的教学实践中,案例设计的好坏关系到教学效果的高低和教学实践的成败。一个好的案例,可以充分调动学生学习的积极性和主动性,启动学生的求知欲和探索问题的动力。因此,在C#程序设计通过有浅入深的几个相关教学案例,会大大提高学生的学习效率。这些案例可以是解决一项实际的工程问题,也可以是一个有趣的小游戏,五子棋,黑白棋等。
下文介绍了作者在《C#程序设计》教学实践中,设计的一些教学案例,这些案例在教学实践过程中,取得了较好的教学效果,对提高学学生的学习兴趣和编程能力,起到了积极的作用。
1.1猜心游戏
猜心游戏是一个有趣的小游戏,游戏者首先默想一个整数(要求在设计区间内,本例为),然后在不同的数字卡片中进行有无判断,最后,可以根据游戏者的有无判断,准确的计算出游戏者默想的整数,具有一定的可玩性和趣味性,能成分调动学生的探索性和学习的兴趣。游戏界面如图1所示。
设计原理:
计算机内数值都以二进制存储,字节内由低到高每个二进制位置代表的数值大小是不同的。如:二进制10001001代表的十进制数的137。
设计步骤:
第1步:数字卡片设计,如第1张数字卡片,要求卡片中十进制整数的相应二进制数值的第0位为1,如图1中卡片所示。第2张数字卡片则列出十进制整数中相应二进制数值的第1位为1的整数,依次类推。
第2步:顺序切换卡片,并记录游戏者对卡片的“有”“无”判决的状态。即判断游戏者心中默念数字是否在该卡片中,并记录判决结果。
第3步:在显示完最后一张卡片后,根据游戏者对所有卡片“有”“无”状态判决,计算所采数值。如:1001001计算所默想猜数。
知识贯穿:
程序界面的设计与布局,循环程序设计,数字筛选,二进制原理,位运算等。
1.2评委打分及案例延伸
设计原理:
评委打分是我们在现实生活中经常遇到的一种排名竞争的方法,要求记录每个评委的打分,然后去掉一个最高分和一个最低分,求和取平均值得到打分。
设计步骤:
第1步:记录每个评委的打分。
第2步:通过打擂法,找出最大打分、最小打分。
第3步:掉最一个最高分和一个最低分,计算剩余打分总分并求平均。
第4步:输出最后打分值
知识贯穿:
数组定义和赋值;打擂法求最大数和最小数;数字的输出。
案例延伸:本案列设计较为简单,在实际设计中,可以通过该案例中对数值的输入,延伸至数值的排序,例如,学生成绩的录入和排序,在排序过程中,怎样保持在分数排序后,分数与学号或姓名间的对应关系。同时,可以进一步对数值的平均值,方差等进行分析以及绘图等。这样通过简单的案例延伸,启发学生的思维,增加了案例的设计效果。
1.3集合升级器设计
设计原理:
某些指定的对象集在一起就成为一个集合,其中每一个对象称为集合的元素。C#下集合有数组,ArrayList(动态数组),HashTable(哈希表)。为了便于理解这几种集合的优缺点,设计集合升级器程序。
设计步骤:
第1步:定义数组存储当前课堂对象信息Person[],人数在上课下课过程中要有增加或减少,而数组的缺点是不能动态扩展和伸缩。
第2步:继续提出改进方案,定义动态数组ArrayList存储课堂对象,可以动态伸缩。缺点,伸缩会引起索引值的重新更新,寻找固定对象不好表达。
第3步:继续提出改进方案,定义哈希表HashTable结构存储课堂对象,哈希表的数据通过键值(key)和值(value)来组织的。可以通过key定位固定对象。
设计思考:
课堂对象有老师和学生两类对象构成,在读出集合信息时遇到类型转换问题。能不能限制类型安全机制,如只能有教师对象或学生对象。需要使用泛型集合机制限定集合类内元素是同一类对象。如果既要包含教师类又要包含学生类怎么解决呢?通过定义教师类和学生类的父类Person来限定类型,如泛型集合List<Person>。但是缺点是动态伸缩同样会引起索引值更新,不好查找固定元素。可以通过泛型集合Dictionary<ID,Person>,通过key和value两部分遍历访问内部元素。该实例大大加深了C#下几种集合类型的理解,为后续编程打好基础。
2结束语
在《C#程序设计》教学过程中,通过恰当的教学案例,可以使乏味枯燥的基本理论变得趣味生动。结合传统的教学方法和案例教学的手段,可以有效的提高教学效果。本文通过3个案例,介绍了在C#程序教学中,案例的设计方法和步骤,丰富了课堂的教学内容,脱离了为教语法而写代码的旧有模式,促进了教师对教学方法的改革与创新,提高了学生的自主学习兴趣。通过几年来,对我校学生的调查研究表明,这样的教学方法,可以大幅度提高学生的C#程序设计能力,有效的调动学生学习的主动性,积极性和探索性。为了充分发挥案例在教学中的作用,要求教师在实际的教学实践中,案例的设计要不断的进行探索和改进,做到与时俱进,以充分提高教学效果。另外,文中的常见案例的设计和分析,也给师生提供了更广阔的设计空间。在教学实践中,可以根据学生专业,设计不同的教学案例。这样既充分发挥了教师的指导作用,又充分调动学生的学习积极性和主观能动性,可以获得最佳的教学效果。
教育期刊网 http://www.jyqkw.com
参考文献
[1]刘秋香,王云.VisualC#.NET程序设计[M].北京:清华大学出版社,2012.
[2]马云吉.C++程序设计教学改革[J].计算机教育,2014(2):46-47.
[3]WingJM.Computationalthinking[J].CommunicationsoftheACM,2006,49(3):33-35.
[4]杨炼,邹超伟,毛韶阳.应用型本科院校C++课程教学改革探索[J].计算机教育,2014(21):95-97.
[5]WingJM.Computationalthinking[J].CommunicationsoftheACM,2006,49(3):33-35.
[责任编辑:刘展]