摘要:计算机的软硬件技术的日新月异,推动计算机语言的不断更新发展,如何与时俱进学习计算机语言是值得关注问题。该文从高校程序设计课程教学中存在问题出发,探讨了如何与时俱进的进行计算机语言的教与学,根据面向过程语言与面向对象语言发展的历程,建立程序设计语言学习的思维逻辑,掌握计算机语言学习的框架模式,帮助学生在快速发展的计算机领域里可持续发展。
关键词:计算机语言;程序设计;思维培养;面向过程;面向对象
中图分类号:G642 文献标识码:A 文章编号:1009-3044(2018)10-0121-03
Abstract: Advances in computer hardware and software technology, promote the development of the continuous renewal of computer language, how to keep pace with The Times to learn computer language is a problem worthy of attention in this paper. Based on the existing problems in the teaching of programming courses in colleges and universities, this paper discusses how to keep pace with the times in the teaching and learning of computer languages. According to the process oriented language and the development of object-oriented language, establish the thinking logic programming language learning, to master the computer language learning mode, the framework of computer language learning to help students in the fast-growing computer field of sustainable development.
Key words: computer language; programming; thinking training; process-oriented; object oriented
随着计算机技术应用普及,掀起来了学习计算机的浪潮,程序设计作为各专业重要的基础课在各高校开设,目的是使学生能系统地学习程序设计有关的内容及思维方式,以便更好的应用计算机解决实际问题。随着计算机的软硬件技术的不断更新,计算机语言经历机器语言、汇编语言、高级语言几个阶段,高级语言分为面向过程和面向对象,具体语言种类都有好几十种。目前,许多高校根据就业形势和专业建设培养模式开设了多门程序设计课程,由于所依托的基础语言和讲授的内容模式不尽相同,在教学中存在不近人意的问题。本文根据教学实践中反映出来的问题,探讨如何培养学生学习程序设计语言的思维模式,顺应瞬息万变的计算机领域,实现学生学习程序设计模式的与时俱进。
1 程序设计课程存在问题
目前计算机专业及相关专业的课程设置中,一般大一开设《C语言程序》,大二开设可视化程序设计语言Visual Basic,结合现在潮流的软件,大三开设面向对象语言如《Java程序设计》和《C#语言》,我们学院的信息与计算科学专业还涉及数值计算,于是还开设了Matlab语言,学生学习的程序设计语言种类较多,但很多学生编程能力仅仅停留在语言的语法规则层面,学而却不精,限于各种的原因,有些老师在教学上把语法基础当成重点,而没有根据学生的先修课程的知识点来引导组织教学,导致学生学习了多门计算机语言,仍对编写程序缺乏感性认识,没有形成基本的编程思维,具体来说主要体现在以下几个方面:
1) 计算机语言课教学深度与广度的不协调。[1]日常教学中,由于专业设置和课程的学时有限,学生的水平参差不齐,老师的教学的侧重点也很难把握,对于二本类的院校,老师把教学重点放在语法基础教育阶段居多,限于学时的原因,很多程序设计语言的高级应用没有深入探讨,这也是导致学生学了很多语言但都不精重要原因之一。
2) 没有建立计算机语言学习的思维方式。很多學生学语言仅仅是单纯学习,没有建立计算机语言学习的框架体系,从整体上把握如何去学一门语言,把学习语言的思维融会贯通起来,建立程序设计的思维模式。教学上也没有进行引导,帮助学生建立学习程序设计语言的思维和能力。
3) 缺乏对程序设计语言发展的认识,转变程序设计的思维模式比较困难。计算机的语言经历了机器语言、汇编语言、高级语言几个阶段,高级语言分为面向过程和面向对象,其中C语言就是经典的面向过程语言,在当今的嵌入式开发中仍然是炙手可热,面向对象典型的语言有c++和java。一般先开设一门面向过程的C语言后,再开设面向对象的高级语言,很多学生学C语言时觉得很容易掌握,到面向对象语言就不知所措,随着程序设计语言的发展如何实现程序设计的思维转变是程序设计思维培养重要方面
2程序设计课程学习思维的培养
计算机的语言随着时代不断变化,技术的更新,计算机语言的发展也会日新月异,尤其计算机的硬件更新换代,必然也会触动软件技术的更新,更多优秀的计算机语言会产生[1],在这种形式下如何教会学生学习计算机语言的思维逻辑更重要,掌握学习计算机语言的思维方式,建立程序语言的框架体系结构,建立学习程序设计思维模式,教会学生学习程序设计的语言能力与素质。
2.1框架式学习程序设计语言基础知识
一门计算机语言是一套人与计算机的交流的指令集合,与自然语言相似,有词汇、语法、句法、语句组织规则,编写程序就像写文章,做项目就像编写一本书。写文章首先要构思好框架再写,同样学习编写程序首先要掌握程序设计的框架,从整体上把握程序设计语言基本特征,再具体学习语言的组织方式,这也是结构化程序设计的中把复杂的客观问题,分成若干独立的问题,然后一个个进行解决,也即是逐步分解、分而治之的思想的反射应用。
一本书根据书名的主题分成若干章节组织,每个章节又有一个小的中心思想,围绕此来展开故事的描述,编写一个项目程序就像编写一本书。图1是C语言程序基本组成框架结构,一个项目程序由若干源程序组成,每个源程序都是围绕程序完成功能来编写程序,而每个源程序都有程序的组织模式,C语言中源程序的模式由若干相关函数和说明语句组成,java语言中每个源程序模式由说明语句和若干类组成。类是由数据和函数组成,函数是一个功能独立性最高的程序段,到函数这一层都是面向过程程序设计,也即是数据输入、数据处理和数据输出三个内容,体现在程序设计中即是输入数据的定义、表达,数据处理的顺序、选择、循环三大骨架结构程序,以及数据的输出。在这个过程中就要学习该门程序语言的词汇(即标识符、保留字)、数据的表示、语法规则、语句的种类及使用规则,利用所学的词汇、句法和语法来组织程序。冯偌依曼思想的计算机都是存储程序,程序运行时调入到内存中,逐条取出来执行,程序编写顺序决定程序的读写顺序,一篇文章默认的读写顺序的从上到下从左至右,同样程序执行顺序也是从上到下从左至右,因此组织程序要按照它执行顺序的语义去编写程序,否则就会像前言不搭后语的文章词不达意,导致就是运算的结果不是所要的结果。
2.2 面向过程的程序设计思维
“过程语言”用类似自然语言的符号化形式描述对问题的处理过程,用数学表达式的形式描述对数据的计算过程,人们只需向计算机描述问题的求解过程,而不关心计算机的内部结构。[2]面向过程的程序设计模式就是如图2所示的三个步骤:输入信息A,通过计算机的算法处理,输出结果信息B。[3]若输入的信息A直接可以运用编程语言中提供的数据类型表达出来,则直接进行算法处理步骤;若输入的信息A是图、表、声音等非数值信息时,首先要做是利用数据结构理论应用计算机的语言把信息A组织表达出来,因此图灵奖获得者Niklaus Wirth提出的著名论断:“程序=数据结构+算法”,这就是面向过程的程序设计的核心思想,以计算为核心,按照数据处理的过程来组织程序。
图2 计算机处理数据的过程
例如键盘输入一个三位数,输出逆序后的数。例如,输入236,输出632。根据题意按照计算处理数据的过程把上述问题转变出如图3的程序设计流程,再按照自左至右的顺序用计算语言表达出来即是计算机可以识别的程序。
图3 程序设计的流程
#include
void main()
{
int x, y; //输入数据、输出数据的表示
int a,b,c; //中间数据的表示
printf("Please input a num:");
scanf("%d\n",&x;); //接收输入数据
//输入数据的处理
a=x/100;
b=x/10%10;
c=x%10;
y=100*c+10*b+a;
printf("y=%d\n",y);//输出数据
}
由此可以看出面向过程的程序设计是一种线性的思维模式,以数据处理过程为核心,大体上分为输入数据、处理数据和输出数据三个过程,是一种顺序线性的处理数据的模式,遵循“程序=数据结构+算法”的思维模式,不适应于规模大、特别复杂的项目,软件重用范围窄粒度小,对于需求不明确的情况难以适应,后期维护的代价高。
2.3面向对象程序设计思维
面向对象的基本思想是从现实世界客观存在的事物出发来构造软件系统,并在系统构造中尽可能运用人类的自然思维方式,将一个实际问题看成是一个对象或几个对象的集合。[4]面向对象程序设计中,把问题世界的事物都看作对象即客观世界是由对象组成,把对象中具有相同的数据和操作的对象归为一类这即是面向对象中抽象的过程,在计算机中程序设计中即是用类这个数据类型来表示,程序处理是具体的数据,即对象,故用类来定义对象。利用面向对象的继承与多态性技术派生出具有的相似性对象的子类,体现在计算机体系结构就是不同的类,各个对象间通过发消息进行通信,因此面向对象的方法学主要是由“对象+类+继承+消息”组成,强调把数据和操作组合为一个整体,这就是面向对象里面封装思想。图4是面向程序设计的思维方式。
图4 面向对象思维方式
在大型的程序设计中,根据软件工程的面向对象的方法论把客观世界需解决的问题抽象各种各样的类,把完成功能统一模块的类再进行抽象形成问题子系统、人机交互子系统、数据库管理子系统、任务管理子系统类,如图5所示。
图5 面向对象程序框架体系
面向过程的语言反映了计算机的解决问题的思维过程,面向对象的程序设计语言则是人的思维模式,利用面向对象的技术进一步缩小了人脑与电脑思维方式上的差异,使人们在利用计算机解决问题时,不是将主要精力花在如何描述解决问题的过程上(编程上),重点是在解决问题的分析上。[5]面向对象技术常用于解决复杂的客观问题,利用继承、封装、多态实现了代码的重用,使得数据更安全更易于维护。
2.4 面对过程到面向对象程序设计思维转变
面向过程到面向对象程序设计实际是计算机程序在数据管理上的一个转变。在面向过程的程序设计中以计算为核心,遵循程序=数据结构+算法,程序的组织方式以数据处理的过程来组织代码,数据与处理过程分离。随着计算机应用技术发展,计算机处理的数据不再是单纯的数值型数据,而是更复杂的非数值型数据例如图、表格、声音等,这时面向过程的语言中提供struct这种技术构造类型来描述复杂的事物方式,我们知道数据类型是数值取值范畴和操作的总称,C语言中struct构造器仍然是无法体现数据与操作的相关性。面向对象技术则是把处理的数据和操作进行封装,在计算机语言中体现出来即是一个“类”,体现了一个事物的动态特征和静态属性。通俗的说面向对象是把数据和与数据相关的操作提取出来,这样更好保证数据处理的独立性,利于系统的维护,保证了数据的安全性。计算机处理的数据是对象,对象是类的实例化也即是这个类数据类型的个体,因此面向对象数据编程变成定义学习类的定义,面向对象的程序设计是以类来组织代码,从管理学的角度来说面向对象中的类是把面向过程中数据和相关的操作(函数)进行分类放在一起,面向对象是在面向过程的基础上演变而来的,面向对象中操作还是面向过程的,图6是已知矩形的长和宽,求矩形面积和周长的程序设计问题,运用面向过程与面向对象程序设计方法的对比。
图6 面向过程与面向对象程序设计对比
3程序设计课程教学实施框架方案
程序设计课程的教学重点不在于如何解决各种实际问题,而是有了计算方法(算法)后,如何掌握使用高级语言实际编制解决问题的程序,以便将来学习“程序设计语言理论”、“算法设计与分析”、“程序设计方法学”等课程。【2】一门程序设计课程可以按照如图7所示矩形区域的侧重点来组织教学,该区域可以分为四个部分:语言基础部分I、实验部分II、自主学习区域III和课程设计IV,第一部分基础部分是语言共同具有的特征,其中包括数据类型、程序的基本结构、类的定义和使用等,这部分内容可以利用程序设计学框架快速掌握语言的语法规则,在以往程序设计课程基础上找区别与联系,利用比较的少的学时来讲解。第二区域实验教学,教师要精心设置实验巩固语法知识,提前把实验内容发给学生预习,实验中重视学生实验课准备与实践情况,引导学生把基础打扎实。第三区域是自主学习,程序设计课程是实践性十分强的课程,需要学生在課后花一定时间演练,除了课堂教学之外,教师通过网络课程平台布置一些更具挑战性的作业给学生,让学生独立完成,通过不断的实践提高学生。第四部分是程序设计课程综合应用,对于老师和学生老说都要花更多的时间更加重视,建议设置课程设计,让学生进行系统的综合练习,把所学的知识进行综合应用,系统化程序设计知识,提高学生锻炼学生应用能力。在课程的开设上可以进行阶梯式培养,先设置面向过程程序设计语言作为基础,然后是在此基础上设置面向对象程序设计语言的课程,再就是面向对象语言的专业技能实训或者课程设计,把程序设计能力培养分成三个阶段来进行。
4结束语
本文探讨了计算机程序设计的语言教与学的思维模式,目的是帮助学生建立程序设计的学习思维模式,掌握程序设计语言的特点,在学习过程中锻炼分析问题解决的能力。同时也为老师在教授程序设计课程如何引导组织教学,提供一种思路。
参考文献:
[1]周亿陶.计算机语言教学方法探析[J].黑龙江省政法管理干部学院学报,2009(2):145-147.
[2]沈泽刚,钟德春.关于计算机专业入门语言的探讨[J].福建电脑,2012(1):182-187.
[3]付喜梅. 《数据结构》的类比教学[J].电脑开发与应用,2013,26(10):33-35.
[4]何渝.计算机语言课程的困惑与思考[C].2011 International Conference on Education and Education Management EEM2011,2011:754-759.
[5]陈荣.《面向对象程序设计》教学探讨[J].新疆广播电视大学学报,2007(1):48-51.