APP下载

论程序设计课程群的教学

2015-06-24胡传福

东莞理工学院学报 2015年3期
关键词:面向对象数据结构C语言

胡传福

(东莞理工学院 计算机学院,广东东莞 523808)

如今大学对大学生专业能力的培养基本上是通过一系列单门的课程来实施和完成的。课程之间存在一定的联系——时间上有先有后,空间内容上有先行后继,知识点上也必然存在着一定的交叉。在实际教学过程中,对各门课程进行管理,以单门课程作为培养目标,制定课程计划并对教学内容进行取舍,会在学生的专业能力培养这个总的高度上显现出局限性和不足。如果以课程群的概念来建立课程体系,充分利用课程间的内在联系和逻辑性,把属于同一目标的一系列课程当作一个有机的整体来看待,让各课程相互配合,那么既能加深课程间内在的关系,在教学效果上又能起到相互促进的作用[1]。

课程群是一系列内容密切相关,有先行后继关系的课程的集合,一般属于同一学科,甚至同一专业。通过对同一学科课程体系的研究,探索课程内容及课程间的先行后继关系,合理安排教学内容进行课程群建设,易于打通各课程的知识结构,使得课程间前后连贯,从而获得整体的良好教学效果。

1 程序设计教学现状

程序设计能力是计算机专业培养的学生主要技能,也是检验计算机专业教师教学效果和学生学习效果的主要依据。因此,对程序设计的认知,对教与学双方来说都显得尤为重要。迄今为止,还没有一个统一的标准来对程序设计能力进行评判。

传统的教学模式比较单一,大多围绕两三门语言类课程教学,先从理论上介绍程序设计语言、语法、语义、程序的结构、程序逻辑等,然后再让学生对课本上的案例进行验证[2]。教学过程显得枯燥无味,需要学生以莫大的兴趣与热情才有可能学好。绝大部分学生缺乏学习的积极性与主动性。依笔者十几年的教学经验表明,个别有热情与毅力的同学可能达到理想的学习效果,但大部分学生学与没学的区别不是很大。

2 程序设计课程群建设的原则

课程群建设是专业建设的一部分。对于东莞理工学院这类以“立足东莞、培养新型应用型人才”为目标的新型地方高校来说,制订培养方案时应找准专业定位、行业现状和发展前景,这样才能明确教学知识点、所需课程以及课程群的大致内容。同时,课程群建设应当以课程的知识组合、融合为线索,对各个课程的教学、实验大纲等内容进行全盘设计。针对应用型人才的培养目标,程序设计课程群应以“程序设计”为中心,注重理论与实践相结合的方法,走“从实践入手—上升到理论高度—再指导设计实践”的路子。通过实践吸引、试验来先对学生学习兴趣进行培养,在不断实践的过程中让学生体会到程序设计的方法,慢慢加深学生对程序设计理论的理解。教学内容上,应当先以验证、模仿为主,通过不断的实践,使学生逐渐体会程序设计的方法,从而获得、增强学生学习程序设计的乐趣,让他们渐渐把程序设计当成一门艺术而不是枯燥无味的数字编码。在具备了一定的经验和方法后,重点放在对问题的理解、分析与设计上,要求首先能够理解具体的问题,然后对具体问题进行分析,再后找出程序设计的相关元素,设计出针对性的具体的解决方案,最后再用当前比较流行的主流开发工具去验证。在学习过程中,将理解问题、分析问题、解决问题相结合,使得学生不断加深对程序设计的认识。当学生熟练掌握这一过程之后,对程序设计理论的学习就没有多大问题了。

《程序设计》类课程学习的重点就是“程序设计”,即采用一定的技术实现所设计的内容。实现设计的技术有很多,逐一介绍既无效果也不太现实。采用“触类旁通、举一反三”的教学思路,重点掌握一种工具、获一门相关技术即可,对其他技术稍微提及,开动学生的积极性与主动性,让他们自己摸索,即能减轻教师的负担,又符合对人才培养的需求。常用的程序设计教学语言有很多,在课程群建设中应当内容连贯,避免重复,力求课程间的融合、促进、加深,但也要兼顾实现技术的由浅入深,循序渐进。因此在课程的选择上,精必选取四至五门即可。理论与实践的比例要根据学生的能力和进度进行调整,新生刚开始接触编程工具,可能需要多点时间来适应,一学期乃至一年以后,可以适当降低实践教学的比例,同进鼓励学生利用课余时间自主进行实践学习。

对于不同课程之间内容相同或相似部分的处理方式最能体现课程群的优势。对相同的概念的介绍能够让课程相互促进,使得概念更加清晰,而类似的概念就需要做适当的取舍。从教学目标来说,程序设计课程群的教学核心目标是让学生至少熟练掌握一门编程语言及其相关开发工具的使用,并能深刻理解程序设计思想,主要是面向对象程序思想、面向对象的分析方法、面向对象程序设计技术以及面向对象的原则与理论。

3 程序设计课程群的教学

东莞理工学院程序设计课程群主要包括《C语言程序设计》、《面向对象程序设计基础》、《Java语言程序设计》、《数据结构与算法》、《Java EE编程技术》。课程群以实践教学为主线,主要培养地方普通本科院校学生编程创新能力。

课程群中各课程内容安排如表1:

表1 各课程及主要教学内容

C语言是在国内外广泛使用的一种计算机语言。C语言功能丰富、表达能力强、使用灵活方便、应用面广、目标程序效率高、可移植性好。特别适合于编写系统软件[2]。因此,许多高校都开设了C语言课程,一般情况下,多数高校都把《C语言程序设计》作为程序设计课程群的入门课程。对于后续课程的开设,一般都以面向对象的程序设计为主,但根据主流应用平台的选择与喜好不同,一般有两种不同的见解,当前主要分为两大阵营——.Net和Java。它们虽然思想相同,但具体的实现技术相差比较大。我们一般把C++作为《面向对象程序设计基础》的主讲内容,而把Java作为选修课程,因为在学生学习完C++以后,完全能够很轻松的自学Java语言,两者区别其实并不是很大。

C++作为《面向对象程序设计基础》的主讲内容的主要原因是C++全面兼容了C,同时提供了比C更严格、更安全的语法[3]。从这个意义上讲,C++首先是一个更好的C。所以,学生在学习完C语言以后再学习C++,是一个水到渠成的事情,可以把它看作是C语言的延续。从课程群的角度来来看,两者有着天然的连续与一致性。学生在学习C++的过程中,可以尽量少的关注语法语义与程序的逻辑结构,因为这些都是C语言中已有的。学生只需把重点放在面向对象的思想、方法上即可。因为全面兼容了C,所以可以在C的基础上慢慢地体会面向对象的思想和方法。

而Java同样作为一门程序设计语言,它是纯面向对象的。这就要求学生对面向对象的思想有一个全面的认识。对于学习完C++的学生来说,这显然不是太大的问题。在学习过程中,只需注意与C++中不同的地方即可,同时掌握不同的集成开发环境即能很容易的上手实践。

虽然数据结构的大部分内容 (尤其是算法及算法分析)都是描述性的、与语言无关的,但是,算法要真正实现还是需要特定程序设计语言的支持。由于C语言的简洁易懂、同时又是计算机相关专业的入门基础课程,故国内外很多数据结构相关的书籍教材大多采用类C语言作为数据结构的描述语言,并把C语言作为数据结构算法的实现语言。C++除了修正了许多C语言的语法方面的缺陷之外,还提供了直接结构 (类和模版)来实现抽象数据类型的通用数据结构。面向对象的方法更是将数据和对数据的操作放在一起,作为一个相互依存、不可分离的整体—对象。即对同类型对象抽象出其共性,形成类,只通过一个简单的外部接口与外界发生关系[3]。

.Net一般是建立在C/C++之上,而Java EE目前只能以Java为基础,这两大阵营各有优劣。不同的学生根据自己的喜好完全可以自由的选择某一方面或同时进行学习。在有了前面的基础铺垫之后,上面的两类课程都可以开设。在培养复合应用型人才的教育宗旨下,学生多学习一种技能,也能在一定程度上提高就业率。

关于教学,笔者认为,其唯一目的是使学生掌握知识,培养学生运用知识分析问题解决问题的能力。计算机相关专业对应用型人才培养的主要任务是培养学生的编程能力,而程序=数据结构+算法,程序设计语言是描述数据结构的工具,数据及数据结构的表示首先是在内存中的表示,所以数据的存储应该是一个难点。如果不借助调试工具,我们很难直观地看出数据之间的关系,而跟踪、调试都需要有相应的预备知识才能完成。传统的C语言对数据结构的表述能力为最强。但程序设计语言发展较快,目前,面向对象的程序设计语言C++和Java在Internet上得到广泛应用。数据结构为了反映计算机科学技术的新发展、新技术,就不能保持一成不变,所以面向对象的程序设计语言来描述数据结构必将成为一种趋势,但面向对象的程序设计语言,因为把数据和对数据的操作封装在一个类中,理解起来非常困难,初学者常常因为不知道数据存放在哪里而茫然不知所措。所以,在讲授典型数据结构及其操作的算法实现时要首先考虑面向对象的程序设计语言,引入面向对象的概念,但也不能把传统C语言的描述一概弃之。

所以关于课程群各课程之间的关系,笔者提出以下几点看法:

1)程序设计是基础。在学习程序设计的阶段,应当让学生学会程序设计的方法。依目前我校的绝大部分学生来讲,一学期几个月的时间,不可能让一个菜鸟能学会编出大型、复杂、实用的程序。因此,此阶段的学习主要是最基本、最常用的内容,多注重一些语法、语义和程序的逻辑顺序等。让学生对程序设计这门学问有一个基本的认识。

2)面向对象是提高与进阶。此阶段的学习我们一般安排C++程序设计语言作为面向对象程序设计的主讲语言。C++语言是一个面向对象的编程语言,而面向对象的编程方法 (Object Oriented Programming,简称OOP)一度被看作是一门比较高深的技术。这是因为在面向对象的系统分析 (Object O-riented Analysis,简称OOA)和面向对象的系统设计 (Object Oriented Design,简称OOD)理论出现之前,程序员要写好一个好的面向对象的程序,首先要学会运用面向对象的方法来认识问题和描述问题[3]。因此,在面向对象的学习上,重点是放在面向对象的思想、方法、原则与理论的学习上,通常的语法、结构等细枝末节要求在前期掌握。

3)数据结构是中心。客观世界是千变万化的。要对其进行计算机化的描述,以不变应万变是一个不错的做法,无论怎么变,无非都是内存中的大量的二进制数据而已。而数据结构正是组织海量的数据的方法和对算法的运行时间进行的估算。随着计算机科学技术的发展,计算机早已渗入到了国民经济及生活的各个领域,随着计算机的速度越来越快,对于能够处理大量输入数据的程序的需求变得日益迫切。然而,由于在输入量很大时程序的效率明显降低,因此这又要关注效率问题[4]。数据结构课程一般包含两个方面的内容:数据结构与算法分析。即①数据及其算法;②算法的效率。在解决生产生活中的实际问题上,数据结构是常用且非常有必要的。

4)编程实践是贯串程序设计课程群的主要线索。程序设计是一门实践性很强的课程,在理解理论概念的基础上,理解问题、分析问题,动手编码,然后调试运行,是每个程序设计人员成长的必经之路。编译器不是问题,编程能力的才是重中之重。但不同的编译器之间还是有点小区别的。所以还要注意参阅相关说明文档,特别是在实践中积累经验、增长才干,做到举一反三、一通百通。

4 结语

程序设计课程群是计算机各专业对学生进行专业能力培养教育的一个重要课程体系,是相关专业学科都需要开设的重要的理论基础与实践课程体系,其内容非常广泛,各课程相互之间既松散又藕合。程序设计语言是数据结构的实现工具,也是解决问题的具体表示与手段,如何在课程教学中既能传授基本知识,又能把当代计算机科学与技术学科和计算机科学技术的新发展、新技术初步传授给学生,而且使学生初步了解一些解决实际应用问题的方法和手段等方面,需要不断地探索和实践。

[1](美)D.S.Malik.C++编程—数据结构与程序设计方法[M].晏海华,蔡旭辉,常鸿,等,译,北京:电子工业出版社,2003.

[2]谭浩强.C程序设计——新世纪计算机基础教育丛书[M].3版.北京:清华大学出版社,2005.

[3]郑莉,董渊,何江舟.C++语言程序设计[M].4版.北京:清华大学出版社,2010.

[4](美)Mark Allen Weiss.数据结构与算法分析 C++描述[M].3版.张怀勇,等,译,北京:人民邮电出版社,2007.

猜你喜欢

面向对象数据结构C语言
数据结构线上线下混合教学模式探讨
基于Visual Studio Code的C语言程序设计实践教学探索
基于C语言的计算机软件编程
高职高专院校C语言程序设计教学改革探索
“翻转课堂”教学模式的探讨——以《数据结构》课程教学为例
高职高专数据结构教学改革探讨
面向对象Web开发编程语言的的评估方法
峰丛洼地农作物面向对象信息提取规则集
基于面向对象的车辆管理软件的研制与开发
论子函数在C语言数据格式输出中的应用