高中信息技术选择性必修一抽象数据类型教学设计_第1页
高中信息技术选择性必修一抽象数据类型教学设计_第2页
高中信息技术选择性必修一抽象数据类型教学设计_第3页
高中信息技术选择性必修一抽象数据类型教学设计_第4页
高中信息技术选择性必修一抽象数据类型教学设计_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

高中信息技术选择性必修一抽象数据类型教学设计一、教材分析本课选自高中信息技术选择性必修一《数据与数据结构》模块中"抽象数据类型"一节。教材在勾画数据、数据结构基本轮廓之后,将学生的视线引向一个关键的思维跃升点:数据的操作可以独立于具体实现被定义和描述。栈和队列是本节的两大载体。栈的"后进先出"与队列的"先进先出"看似是两条操作规则,实则是一种看待世界的抽象方式——只关心能做什么,不关心内部怎么做。教材编排呈现"生活情境—规则提炼—操作定义—编程实现—应用迁移"的线索。这一线索本身就是抽象思维发生的路径。教学中若直接把ADT定义抛给学生,学生获得的只是名词;只有让学生亲历从具体事物中剥离本质属性的过程,"抽象数据类型"这一概念才会真正在学生头脑中生根。本课同时承担着承上启下的功能:向前勾连必修模块中算法的三种基本结构与Python语言基础,向后为树、图等更复杂数据结构的学习奠定方法论基础。二、学情分析授课对象为高二年级学生。学生已在必修课程中掌握Python基本语法,能使用列表完成数据的存储与遍历,具备初步的程序调试经验。从思维发展看,高二学生正处于形式运算阶段向更高水平过渡期,有能力理解抽象概念,但习惯于从具体实例出发,对"为什么要定义一个看不见内部的东西"缺乏内在动机。预判困难有三处。其一,学生容易把栈等同于列表,不理解二者在操作约束上的本质区别;其二,对ADT中"操作集合定义在先、存储实现定义在后"的顺序感到别扭,这与学生先前"先有数据再写代码"的经验相悖;其三,面对括号匹配、回文判断等经典问题时,部分学生想不到用栈,抽象的ADT与真实问题之间缺少桥梁。教学须通过具身活动、对比辨析和阶梯任务逐一化解。三、教学目标学生能够用自己的语言解释抽象数据类型的含义,说出ADT由数据对象、数据关系、基本操作三部分构成,并能指出ADT与具体存储实现相互独立这一核心特征。学生能够准确描述栈的后进先出特性,规范表述入栈、出栈、读栈顶、判空等基本操作;能够描述队列的先进先出特性及入队、出队操作;能手工模拟两种结构在任意操作序列下的状态变化。学生能够运用Python列表封装实现栈与队列,代码具有清晰的操作接口;能针对括号匹配、排队模拟等真实问题完成需求分析、ADT选型、编码实现与测试验证的完整流程。学生在经历"具体情境—特征抽取—规则定义—程序实现"的完整过程后,体会抽象是计算机科学最本质的思维武器,形成先想清规则再动手编码的工程意识,养成从接口视角审视程序模块的习惯。四、教学重难点教学重点:栈与队列作为抽象数据类型的操作定义及其特性;从生活实例中抽取本质规则形成ADT定义的思维过程。教学难点:理解ADT定义独立于存储实现的意义;在陌生问题情境中识别适合用栈或队列解决的信号特征,完成ADT的选型与运用。五、教学策略与资源准备本课采用情境驱动与具身认知相结合的策略。以自助餐盘取放、食堂排队两个生活场景切入,借助实物演示和角色扮演让规则"长在身体上";再通过操作序列推演实现从感性到理性的过渡;最后以项目式任务驱动编码实践。辨证地看,栈与队列是一对天然的对比对象,教学中贯穿对比辨析,用教一个的方式教两个。课前准备的资源包括:一叠一次性餐盘、一叠卡片、微课视频《停车场与栈》、在线协作白板、机房Python编程环境、分层任务单。任务单分基础、进阶、挑战三级,保证每名学生都有可达成的目标和可攀登的空间。六、教学过程环节一:情境导入,制造认知冲突(8分钟)上课伊始,教师把一叠餐盘放在讲台中央,请一名学生从中取出三只盘子。学生很自然地从顶部连续拿走。教师追问:为什么没有人从中间抽?为什么不从最底下拿?学生会心一笑,答出"拿不动""会塌"之类的理由。教师顺势指出:结构本身的形态已经规定了操作的方式,我们能做的只有两件事——往顶上放,从顶上拿。紧接着播放一段二十秒的视频:某实验楼电梯口课间人流的情形,先到的人先进电梯。教师再抛出问题:餐盘堆和电梯口队伍,这两种事物在形状、材质、场景上毫无共同点,可是如果请你分别为它们设计管理软件,你在思考时的关注点会不会惊人地相似?教室里出现短促的议论声。有学生说"都是关心谁能进、谁能出、按什么顺序"。教师板书课题并给出核心命题:当我们只关心一个数据集合能被怎样操作,而不关心它内部用什么方式存放时,我们就在使用一种新的思维工具——抽象数据类型。抽象数据类型包含三个要素:数据对象、数据对象之间的关系,以及定义在它们之上的一组操作。DTD规定"是什么",由程序员决定"怎么做"。设计意图:用具身活动替代概念宣读,让学生在身体经验中先建立"操作受规则约束"的直觉,再由教师予以命名和固化,概念获得的顺序符合认知规律。环节二:具身体验,建构栈的操作定义(12分钟)各组领取八张写着数字的卡片。教师口述操作序列:入栈5、入栈3、入栈8、出栈、入栈6、出栈、出栈。学生动手摆放卡片,记录每次出栈的值和最终栈内从底到顶的元素。教师巡视,捕捉典型错误:有的小组出栈时拿走了底部的卡片,说明"后进的先出"规则尚未内化。全班核对结果:三次出栈依次为8、6、3,栈中剩余5。教师请操作正确的小组用语言描述规则,学生表述为"只能从最上面放,也只能从最上面拿"。教师将其规范为学科语言:栈是一种限定仅在一端进行插入和删除操作的线性结构,这一端称为栈顶,另一端称为栈底;其操作特性为后进先出。随后教师引导学生完成栈的ADT定义。师生共同在白板上写下操作清单:建立一个空栈;判断栈是否为空;将元素压入栈顶,即入栈;删除并返回栈顶元素,即出栈;读取栈顶元素但不删除;返回栈中元素个数。教师特别强调:这份清单没有一个字提到数组,没有一个字提到链表。它是一份"功能合同",实现方式是另一码事。同一个栈ADT,可以用列表实现,也可以用链表实现,对外表现完全一致。为检验理解,教师给出辨析快答:浏览器的"后退"按钮是不是栈?汉诺塔游戏中三根柱子上圆盘的取放是不是栈?学生判断并说明理由。第一个问题引发分歧,教师点拨:点击后退时最近访问的页面先出现,呈现后进先出特征,符合栈;而浏览历史记录若允许直接点击任意条目,则超出了栈的操作约束,那只是列表。这一辨析让学生体会到ADT的边界意识:不是数据相似就是同一种类型,操作规则才是判据。环节三:对比迁移,自主建构队列(7分钟)教师宣布规则转换:现在卡片代表到窗口办事的人,新到的人只能排在队尾,办完事的人只能从队首离开。学生自主推演操作序列:入队A、入队B、入队C、出队、入队D、出队。学生很快得出出队顺序为A、B,队中剩C、D。教师要求学生仿照栈的ADT定义,独立写出队列的ADT定义,包括数据对象描述与操作清单。两分钟后,随机抽取两份投屏点评。全班达成规范共识:队列是限定在一端插入、另一端删除的线性结构,插入端为队尾,删除端为队首,特性为先进先出;操作包括建空队、判空、入队、出队、取队首、求长度。教师组织同桌互问:打印机的任务等待列表为什么是队列而不是栈?餐厅叫号系统为什么必须是队列?如果把叫号系统改成栈会发生什么?最后一个问题引发笑声与深思——后到的顾客先被叫号,先到者永远等待,规则错误会导致系统性的不公平。学生在笑声中领悟:ADT选型不是技术细节,而是对现实世界秩序的承诺。环节四:从定义到代码,亲历前后顺序(12分钟)教师提出本环节的核心任务:为栈的ADT写一份Python实现。要求先写"使用说明",再写内部代码。教师现场示范工程化写法。先在协作白板上写出类的操作接口框架:Stack类需支持push、pop、peek、is_empty、size五个方法。然后提出问题:用什么容纳数据?学生一致回答列表。教师现场编码:初始化时创建空列表作为内部容器;push对应向列表末尾追加元素;pop对应移除并返回末尾元素;peek返回末尾元素;is_empty判断列表长度是否为零;size返回元素个数。关键教学点在此展开。教师提问:列表本身有insert方法可以在任意位置插入,为什么我们封装之后坚决不用?学生回答:因为栈的ADT定义不允许中间操作。教师总结:封装的本质是"自我设限"。我们主动砍掉列表的大部分能力,只留下符合规则的几个动作,换来的是行为的可预期。这就是ADT思想落到代码里的样子。学生在自己的电脑上完成Queue类的封装。教师给出提示:入队用列表尾部追加,出队移除头部元素,并提醒学生思考这样写在大数据量时的效率代价,留下一个悬而未决的问题——数组头部删除代价高怎么办,为后续学习循环队列埋下伏笔。代码完成后的互测环节别出心裁:同桌交换程序,不看对方内部实现,只按五个公开操作编写测试用例进行调用。若有同学的栈出现了"从中间取出元素"的测试结果,说明封装不严密。这一环节让学生亲身体验"面向接口编程"的含义:我信任你的合同,而不需要翻开你的账本。环节五:综合应用,ADT解决真实问题(14分钟)教师出示本课压轴任务:检验一段数学表达式中的括号是否正确配对。先展示三组样例:表达式(a+b)×c配对正确;表达式(a+b×c配对错误,左括号多余;表达式a+b)×c配对错误,右括号多余。学生先进行人工分析,教师引导其发现规律:扫描过程中,每遇到一个左括号,它都期待与"最近一个尚未配对的左括号"之后的右括号相配。"最近一个尚未处理的左括号先被配对"——学生在教师追问下喊出:这是后进先出!应当用栈。师生共同梳理算法:设立空栈;从左到右扫描每个字符;遇左括号入栈;遇右括号时先判栈空,若空则直接判定错误,不空则出栈一次表示配成一对;扫描结束后判栈空,空则全部配对成功,非空则左括号有剩余。教师强调这一算法的每一步都只使用栈的公开操作,代码与ADT定义严格对位。学生分层完成任务。基础层:依据算法流程图补全程序并运行三组样例验证。进阶层:扩展程序,同时支持小括号、中括号、大括号三种符号的配对检验,出栈时需检查括号种类是否匹配。挑战层:分析算法的时间代价,并思考若表达式极长,栈最深可能达到多少,这与表达式结构有何关系。教师巡视中特别关注两级学生的卡点。基础层的常见错误是先出栈再判空,导致空栈异常,教师引导学生回到ADT定义中寻找答案——判空操作存在的意义,就是为出栈提供前置保护。进阶层学生多在种类匹配判断处迟疑,教师建议出栈时将弹出的左括号与当前右括号对照,不一致即报错。成果展示环节,两组学生演示各自程序并接受质询。质询问题由教师预埋:如果输入空字符串,你的程序返回什么?为什么这个行为是合理的?学生需在判空逻辑与"零个括号意味着天然配对"的语义之间自圆其说,思维在答辩中被再度锤炼。环节六:课堂小结,提炼思维方法(4分钟)师生共同完成知识的图谱化整理。教师引导回顾今天走过的路:从餐盘与队伍中抽出规则,规则被写成ADT定义,定义被封装为代码,代码解决了括号配对这些凭直觉难以处理的问题。栈与队列只是这条路走出的两枚脚印,路本身更珍贵——这条路叫抽象。教师以一句话收束全课:计算机科学家面对复杂世界的策略,往往不是看得更多,而是故意看得更少。隐去实现的细节,留下操作的规则,复杂性就被关进了笼子。七、分层作业设计必做作业:完成教材配套习题中栈与队列的操作推演题;用流程图描述"用两个栈实现一个队列"的思路并尝试编程,体会ADT之间可以相互构造的奇妙性质。选做作业:调研一个真实软件中的栈或队列应用场景,如编辑器的撤销功能、操作系统的打印任务池,撰写三百字左右的分析短文,说明其中ADT选型规则与操作对应关系。八、板书设计主板书分三栏。左栏:课题与ADT三要素——数据对象、数据关系、基本操作。中栏:栈——后进先出,操作清单push、pop、peek、isEmpty、

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论