公务员期刊网 论文中心 正文

递进案例在面向对象程序设计教学应用

递进案例在面向对象程序设计教学应用

摘要:《面向对象程序设计》是计算机专业的一门重要的基础课程,较强的理论性与语法的复杂性给学生的学习带来困难。分析以往教学过程中存在的问题及原因,浅谈如何设计、运用递进案例,使得学生从以教材语法为中心的学习重心转移到案例的分析和领会上,到达学生主动学习、对知识点融会贯通的目的。

关键词:面向对象程序设计;递进案例

0引言

《面向对象程序设计》是计算机专业的一门重要的基础课程,是编程语言教学中的重点也是难点。该课程要求学生了解面向对象程序设计的基本思想、掌握面向对象编程的技术,为大型应用软件设计与开发打下良好的理论和实践基础。在教学实践中,有学生反映课程很难学,甚至有个别学生对编程产生畏惧的情绪。笔者结合实际的教学工作,分析课程教学过程中碰到的主要问题和成因,浅谈如何引入递进案例方法提高教学质量。

1教学过程中存在的问题及原因

以往在教学过程中主要存在的问题及原因如下:(1)学生对面向对象程序设计的学习的目标不明确,学习动力不强。由于学生相对欠缺项目经验,对面向过程程序设计在大型软件开发过程中遇到的代码难维护、难扩充等问题意识不足,仅从软件功能的角度看问题,以为已经有面向过程编程的方法已经可以写软件了,不理解为什么需要学习面向对象程序设计。(2)教材对面向对象程序设计技术的描述过于侧重语法,缺乏思维引导和结合应用的分析,较少围绕“为什么面向对象程序设计包含了这个技术点?”“什么情况下需要使用这个技术点?”“如何使用这个技术点?”等问题展开讨论,导致学生停留在“知其然而不知其所以然”的阶段,即使掌握了面向对象程序设计的语法,还是没领会到面向对象程序设计的思想精髓,不懂运用。(3)教材和课后习题以每一章节的知识点为目标设计,缺乏系统性与连贯性,缺少对知识综合运用能力的训练。

2引入递进案例提高教学质量

针对上述问题,笔者在教学中使用递进案例,根据教学目标和内容需要,采用案例组织学生进行学习、研究、锻炼,把教授和学习的重心放在案例的分析和领会上,而不是以教材的理论知识点为中心[1-2]。旨在让学生在理解案例所涵盖的知识点后,通过模仿案例到灵活运用设计创新,到达学习的目的。本节讨论递进案例设计和运用过程。(1)案例的编写首先,案例保持内容的连贯性与递进性[3]。案例以编写某个软件为目标,与教材内容章节顺序保持一致,在前一次课完成的功能的基础上,提出丰富软件功能的新需求,引入新的知识点学习。整个过程由简到繁,循序渐进,将知识点串联起来,引导学生在学习过程中承前启后、举一反三。同时,案例的设计要考虑趣味性[4]、实用性和可操作性。例如,计算机专业的学生通常喜欢游戏,可以以游戏为例子吸引学生。此外,案例的编写要详尽,对于每个知识点,需要写清楚它的作用、适用场景和相关代码,使得学生在课后能通过阅读案例深入理解、掌握知识点,并会模仿、应用。(2)案例的运用笔者在使用递进案例进行教学的时候,采用“提出需求、抛出问题、分析问题、讲授知识点、布置任务”的路线进行讲解。首先,在第一次上课的时候向学生介绍案例的内容,说明要实现一个什么样的软件,具体要实现哪些功能。然后,给学生布置课程设计,让学生实现与案例软件相关的另一个模块,要求在后续的学习过程中每次学到新技术后,能模仿案例将新技术点用到课程设计中。每次课堂按以下步骤展开:①提出需求。结合新知识点,提出给软件增加某个功能,要求学生采用以前学过的面向过程程序设计的方法实现。②提出问题。要求学生思考:在用面向过程程序设计方法实现该功能的时候,遇到什么困难?提示学生从代码管理、代码可扩充性等方面思考。③分析问题。要求学生分析困难出现的原因,总结面向过程程序设计在大型软件开发过程中的不足之处,让学生领悟到:“在这种应用场景下,需要利用面向对象程序设计的技术去解决这个问题。”,激发学生的学习兴趣。④引入新知识点。结合教材的例子讲解知识点的语法。在讲解过程中,对于部分难以理解的内容,像构造函数、析构函数、拷贝构造函数、动态内存分配等,可以采用动画形式演示,让学生对这些抽象的过程有较具体的理解。然后结合案例演示知识点的运用将知识点扩大为知识面,最后由形象到抽象,揭示概念本质。⑤布置任务。任务分两部分内容。首先,要求学生完成教材的习题,通过语法关。然后,要求学生模仿案例,将新知识点运用到课程设计中。

3一个具体的案例

本节分享笔者在教学中使用的递进案例。在我院,《C++面向对象程序设计》这门课安排在一年级第二学期上,作为《C语言程序设计》的后续课程。笔者在上《C语言程序设计》的时候,要求学生用面向过程程序设计的方式实现一些小游戏,例如猜数字游戏、打字游戏等。由于学生对游戏都比较感兴趣,所以收集了不少优秀作品。在面向对象程序设计课程中,笔者设计了一个实现“小游戏集锦”的递进案例,要求学生在学习完整套案例后,实现游戏玩家管理的模块。教材一般按照类的封装性、继承性、多态性的顺序组织内容,对应地,案例的内容设计也基本按照上述顺序展开。(1)类和对象的概念。将多个小游戏的代码分发给学生,要求学生把代码汇总成一个“小游戏集锦”的程序。让学生设计一个菜单入口,在菜单中选择游戏,进入相应的游戏界面。让学生体会到,这个貌似几行代码能解决的问题,会碰到诸如“全局变量名冲突、数据和函数的关系不明显”等的麻烦。接下来,引入类和对象的概念,介绍类的作用,再讲解类的语法。在案例中演示如何将每个游戏单独写成一个类。要求学生在掌握了类的语法后,写一个玩家类。(2)类的封装性。举一个“窜改代码关键变量”的例子,让学生理解封装性的作用。要求学生在玩家类里实现对玩家数据信息的封装。(3)构造函数、析构函数、拷贝构造函数、静态成员等。结合某个游戏类,对类增加恰当的需求应用,展开对这些知识点的讲解。例如,在游戏集锦中,仅要求每个游戏类生成一个对象。可由此需求引入静态成员的知识点进行讲解,然后演示如何设计单例模式解决这个问题。(4)类的继承与派生。要求增加功能:统计每个游戏的进入次数。用户每进入一次游戏,该游戏的进入次数加一。在学习类的继承与派生之前,学生只能在逐个游戏类里面添加私有变量intcount,并在各个类的游戏入口函数处增加count++的语句。提问学生:如果有一百个小游戏,是否需要分别在一百个类里面做重复的定义count和count++的操作?如果有一个类忘记对count加1会出现什么情况?引入面向对象程序设计的另一个重要特点——继承。在案例中,定义一个游戏基类Game类,Game类包含成员count,再派生出各个小游戏类。要求学生掌握类的继承与派生之后,写一个游戏的游客类。游客类与玩家类的区别在于,游客类每的对象每次登录游戏集锦时,分数清零;玩家类的分数不清零。要求思考该如何对游客类和玩家类的代码进行重构、设计。(5)类的多态性。多态是面向对象程序设计最复杂也最难诠释的一个特点。在案例中,要求增加功能:菜单按游戏的热门程度(进入游戏的次数)排序。提问若采用已学过的知识,这种做法是否方便:定义一个数组统计各类小游戏的访问次数,然后对数组进行排序,得到小游戏的菜单列表,再根据用户输入的选择找到相应的游戏入口函数。引入基类指针指向派生类对象和多态的知识点,提出可以将Game类设计成虚基类,采用Game类指针数组存储指向各个小游戏的对象的指针,则可以方便地对指针数组排序,实现按游戏热门程度排序的功能。要求学生掌握多态性的知识点后,写一个在线玩家(包括游客)的列表,要求将在线玩家和游客按游戏成绩排名显示。

4结语

《面向对象程序设计》是计算机专业的一门重要的基础课程,该课的学习质量直接影响专业后续课程的学习。本文探讨了教学过程遇到的一些问题,分析了学生学习困难的原因,讨论如何用递进案例教学,通过递进案例让学生脱离枯燥的语法学习,将学习重心转移到对知识点的领悟与运用上,提高教学质量。

参考文献:

[1]廖湖声.面向对象程序设计课程的教学改革探讨[J].计算机教育,2016.3.

[2]王文冰,李辉.以实例贯穿课堂的面向对象程序设计课程教学改革[J].计算机教育,2011.1

[3]肖志娇.以游戏为实例进行面向对象程序设计趣味教学[J].现代计算机,2011(1):14-16.

[4]王婧.游戏案例在面向对象程序设计教学中的应用[J].电脑知识与技术,2016,12(2):124-126.

作者:马慧 翁佩纯 单位:电子科技大学中山学院计算机学院