《程序设计语言发展史》教学设计

2018-06-30 06:27高萍
中国信息技术教育 2018年10期
关键词:二进制面向对象程序设计

高萍

教学内容分析

各行各业信息技术产品的应用得益于各类程序的编制,而程序得以实现的“幕后英雄”便是程序设计语言。《程序设计语言发展史》一课的学习有助于学生了解程序设计语言发展的来龙去脉,为后续程序设计的深入学习奠定基础。本课教学以“机器语言”“汇编语言”“高级程序设计语言”发展为主线,探讨语言的特点和思想的变迁,使学生从中感悟编程语言变化的趋势,并畅想未来发展的情况。

学情分析

高中生思维活跃,理性思考趋于成熟,教师可以创设情境,让学生感悟、讨论交流。另外,学生几乎没有任何编程基础,原理性知识多采用生活案例帮助学生理解,本课仅增加少量Python编码活动,增加学生的直观感受。

教学目标

知识与技能目标:通过程序设计语言发展主线,比较三种代码实现“编程计算100和256相加”的不同;了解机器语言、汇编语言、高级程序设计语言三种语言特点;理解程序设计思想的变迁。

过程与方法目标:在自然语言指令编码活动过程中,体验二进制编码的方法;在生活问题解决、Scratch游戏剖析、Python简单编程过程中,体验面向对象和面向过程解决问题的不同思路和适用场合。

情感态度与价值观目标:感受程序设计语言的变化趋势,描述未来程序设计语言发展的前景。

教学重点、难点

重点:从机器语言到高级程序设计语言的发展变化。

难点:对机器语言的理解,对面向过程和面向对象两种编程思想的理解。

教学过程

1.游戏导入程序概念,进而引入程序设计语言

教师演示由Scratch实现的“枪击游戏”。

师:这款游戏并不是从网上下载的,而是别的同学自己编写程序实现的。信息时代,不管是学习、工作还是娱乐,生活中处处都融入程序的光芒。程序是指一组指示计算机执行动作或作出判断的指令。指令的发出者是人,接受指令的是机器。那么,人和机器之间是怎样通过语言沟通的呢?

教师揭示课题——程序设计语言发展史(回顾发展阶段、感受变化趋势、畅想未来)。

设计意图:既导入课题,又点明程序设计语言的功能。

2.探究二进制编码活动

师:从ENIAC程序电路存储谈起,高速的计算能力与手工准备之间突出的矛盾引起美籍匈牙利数学家冯·诺依曼的注意,他提出二进制思想和程序内存思想。人使用的是自然语言,那么怎样把自然语言转化成机器识别的二进制数呢(如图1)?

生:二进制编码。

师:用二进制数可以表示下列指令(如下页图2,二进制数字系统中只有0和1)。用二进制数编码,其实不难,关键是判断指令所有状态可以使用几个二进制位来表示。

设计意图:二进制是程序设计语言发展的基础,有助于学生理解机器语言是如何编码的。

3.探究程序设计语言的变化

例如,编程计算100和256相加(如图3)。

师:机器语言由二进制数组成,这些数字并非毫无意义,而是由一定位数的操作码和一定位数的地址码组成。如果你是程序员,使用机器语言编写程序,是什么感受呢?

学生回答机器语言的特点。

师:机器语言能被机器直接识别和执行,但依赖于特定的机器;机器语言不易学习,不易编写,纠错难。针对这一问题,程序设计语言进行了改进,出现了汇编语言。它可以实现同样的功能,请大家观察汇编语言在机器语言基础上发生了哪些变化(如图4)?

生:出现了熟悉的英文单词……

师:利用助记符或符号代替二进制数,有利于程序员编写程序;但需要编译,转化成机器码,才能被机器理解和执行;同时,还依赖特定的机器,通用性不强。不管是机器语言还是汇编语言都有一个共同的“缺憾”,就是一种型号计算机中编制的程序在另一种型号的计算机中不能运行。于是程序设计语言又进一步发展,出现了高级程序设计语言(如图5),那高级程序设计语言的“高级”之处是什么呢?

生:采用数学表达式形式,代码更加简单……

师:高级程序设计语言的“高级”在于采用接近问题本质的方式去思考问题和描述问题;具有跨平台、移植性强等特点;使用时需要编译或解释成机器码。

学生体验利用高级程序设计语言Python2.7编程的便捷(如下表)。

设计意图:针对同一案例“100+256”,用三种代码实现,容易比较不同语言各自的特点。最后,通过Python进行数学运算代码编写,增加学生的直观感受。

4.探究程序设计思想变迁

师:自从世界上第一个高级程序设计语言Fortran诞生后,随后有几百种程序设计语言被发明和应用,按照时间顺序,在不同领域有代表性、被广泛应用的高级程序设计语言有Fortran、COBOL、PSCAL、C、C++、JAVA、PHP等。程序设计语言在发展过程中,也经历了编程思想的变化。例如,乘坐汽车去无锡市区,你会想到有哪些途径?

生:自驾、滴滴打车……

师:“自驾”好比面向过程的方式解决问题,先分析出解决问题的步骤,然后按步骤依次实现(如图6)。这种面向过程的方式适合简单问题的解决,如早期编程主要应用于科学计算,但碰到复杂事务,就显得力不从心。这时,另一种编程思想——面向对象,应运而生(如上页图7),“滴滴打车”好比面向对象,采用对象+消息的方式解决问题。面向对象适合互联网应用、游戏编制等复杂问题的解决,且可扩展性强,易修改。我们上课伊始玩的Scratch枪击游戏,其程序块包含了多个角色,有着不同的属性和动作,这里可以理解为“对象”,游戏的进程是通过“广播消息”或触发事件推进,可以理解为消息。另外,课上体验的Python自带的math标准库,把常见的函数运算纳入其中,使用时,函数前添加“math.”,可以指明所属对象,这些都蕴含面向对象的编程思想。

设计意图:通过生活案例进行类比,直观指出面向过程和面向对象两种思想的特点,成功化解教学难点。

5.讨论畅想未来发展

教师小结(如图8)。

学生讨论,并描绘未来程序设计语言具体情况(智能化、可视化、构件化……)。

教学反思

《程序设计语言发展史》一课是为区域评优课所定的开放课题,颇具挑战性。一是没有现成的教材可供参考,教学内容取舍成为难题;二是学生几乎没有任何编程经历,内容讲解和编程体验需要通俗易懂。笔者经查资料发现,程序设计语言发展史中涉及众多重要技术、人物和事件,一节课很难事无巨细地和盘托出。面对高中生,笔者依据基础性和发展性原则选择教学内容,依托生活化案例化解了教学难点。编程体验环节重点落在高级程序设计语言上,选取已经进入中小学信息技术课堂的编程工具Scratch和Python。

首先,二进制是程序设计语言发展的基础。笔者教学采用了“我是否喜欢她,她是否喜欢我”的二进制编码活动,让学生理解机器语言是如何通过二进制进行编码;并在此基础上,针对“编程计算100和256相加”任务列出机器语言、汇编语言及高级语言的三种代码实现,让学生通过比较,说出三类语言的特点,感悟变化趋势。同时,笔者还增加了Python直观体验,编程实现了“100和256相加”,不涉及任何算法,符合学生编程零基础特点。

其次,面向过程到面向对象编程思想的变迁是高级语言发展的重要变革,也是教学的难点。笔者以生活案例“自驾去无锡市区”还是“坐车去无锡市区”两种解决问题的思路帮助学生理解两种编程思想的特点及应用场合,利用Python的 math标准库完成复杂函数运算,剖析Scratch枪击游戏实现过程,增加了学生面向对象的直观体验。

最后,学生亲历程序设计语言发展过程后,感悟程序设计语言“宜人”变化趋势,学生畅想,小组讨论未来程序设计语言的发展情况。整节课,课堂气氛热烈,特别在畅想环节,学生想到中文编程、云端在線编程、计算机自动生成程序……这些“奇思妙想”把课堂推向高潮,教学过程生动且富有实效。

猜你喜欢
二进制面向对象程序设计
基于OBE的Java程序设计个性化教学研究
项目化教学在Python程序设计课程中的应用
C++程序设计课程教学改革研究
医学专业“Python程序设计”课程教学改革总结与思考
有用的二进制
用Scratch把十进制转为二进制
有趣的进度
面向对象的计算机导论课程教学
基于Web的科研项目管理系统的设计与实现
应力波反射法测锚索长度的数据处理软件设计与实现