《C++语言程序设计》教学法讲座.ppt_第1页
《C++语言程序设计》教学法讲座.ppt_第2页
《C++语言程序设计》教学法讲座.ppt_第3页
《C++语言程序设计》教学法讲座.ppt_第4页
《C++语言程序设计》教学法讲座.ppt_第5页
已阅读5页,还剩103页未读 继续免费阅读

下载本文档

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

文档简介

C+语言程序设计 教学法讲座,清华大学 郑莉,C+语言程序设计 教学法讲座(1):课程概述,清华大学 郑莉,3,目录,课程理念 教材简介 教学建议 配套资源 课程网址,4,课程理念,C+作为第一门程序设计课程 C+语言支持面向对象的观念,更接近于人类的思维方式,因而也就更容易为初学者所接受。 在教学中抓住主线、突出重点、强调思想方法、注重实践环节,便可以克服语法复杂的难点。 从6年来在清华大学的教学实践来看,以C+作为第一门高级程序设计语言来教是可行的。,5,课程理念,第一门语言课的教学目标 语言只是一种表达工具,自然语言亦是如此。 程序设计语言可以用来表达需要解决的问题和解决问题的方法,但是方法本身不属于语言的范畴,要在其它课程中学习。例如:计算方法、数据结构等。 学习语言需要实践,因而离不开对分析问题和解决问题方法的学习。但是初学者的目标应定位在编写小程序、解决简单问题。,6,课程理念,在有限的学时中先了解什么 树木还是森林? 先讲授面向过程的结构化程序设计,后讲面向对象的思想先见树木,后见森林。 先从细微处着眼,首先关注算法与技巧。 熟练掌握基本的编程技术以后,再学习面向对象的思想和方法。 优点:技巧训练充分、基本技术过硬。 缺点:先入为主,接受面向对象的思想较难。,7,课程理念,在有限的学时中先了解什么 树木还是森林? 先介绍面向对象的思想与方法,再训练程序设计的方法与技巧先见森林,后见树木。 首先学会将人类的自然思维方法用于程序设计。 首先建立系统与全局的观念。 在实践环节和后续课程中,不断学习各种算法、训练编程技巧。 优点:首先学习高度抽象的思维方法,建立系统和全局的观念,为后续学习奠定了思想方法的基础。 缺点:对教材与教师的要求较高,若不能立足于较高的位置、深入浅出地讲解,会使课程空洞无物、枯燥无味。,8,教材简介,教材系列 C+语言程序设计(第3版) C+语言程序设计(第3版)学生用书 C+语言程序设计(第3版)教师用书 C+语言程序设计案例教程 内容编排原则: 不割裂面向过程部分与面向对象部分,以面向对象的程序设计思想贯穿始终。,9,实践环节,这门课的实践性很强,教师需要强调并引导学生通过实践加深对课程内容的理解、提高编程能力。为此,本书设计了配套的学生用书,包括学习指南、各章要点导读、实验指导、习题解答。教师应该要求学生上机运行每一道例题,完成各章的实验任务,尽量多做习题。来不及做的习题,可以参考习题解答,将习题解答作为补充的例题来使用。,10,配套资源,教师用书(电子版),包括电子讲稿(PPT文件)、讲课要点、考试样题。 学生用书,包括学习指南、各章要点导读、实验指导、习题解答。 案例教程及案例课件库 例题、实验参考程序源代码。 视频课件、配音课件 作者的教学网站,可以下载讲稿、录音,在线学习,参与讨论。,11,案例课件库,0:8080/demo/,12,清华网络学堂课程网址,清华课程网址/index.jsp 网页主要内容 电子教案(PPT)与讲课录音(mp3) 在线讲堂(视频课件) 参考资料 例题源程序 答疑、讨论,13,郑莉的网络课堂, 电子教案与讲课录音 例题源程序,C+语言程序设计 教学法讲座(2):程序设计基础,15,目录,对应章节 背景知识的重要性 思想方法的重要性 基础知识如何介绍 培养编程实践能力的开端 基础语法的介绍方法 函数的讲法 实验课安排,16,对应章节,第1章 绪 论 第2章 C+简单程序设计 第3章 函数,17,背景知识的重要性,了解相关背景知识可以使学生从一开始就站在全局的、宏观的角度看问题,避免单纯陷入语法细节,造成学会了语法却不会写程序的后果。 要使学生了解 计算机程序的作用和意义 程序语言和程序设计技术的发展历程 程序设计在软件开发中的地位 对应讲稿:第1章3-7页,21-26页,18,思想方法的重要性,以面向对象的程序设计思想贯穿始终 在绪论课中浅显地介绍面向对象的思想 以后在讲授每个新的语法知识点时,都要从面向对象思想的角度阐释 以面向对象的思想为起点,使学生将这种程序设计思想与人类自然的思维方法统一 对应讲稿:第1章8-20页,19,基础知识如何介绍,信息的表示与存储相关知识对于程序设计课程是必须的。 如果有其他课程介绍相关知识,这部分内容可以不讲。 如果没有其他课程介绍这部分内容,应考虑在课上讲授,或安排自学辅导。 对应讲稿:第1章27-41页,20,培养编程实践能力的开端,简单介绍上机编写程序的过程 简单介绍相关术语和概念 通过实验一,指导学生学会变异环境的使用 对应讲稿:第1章42-45页,21,基础语法的介绍方法 基础语法内容,C+语言概述 基本数据类型和表达式 数据的输入与输出 基本控制结构 自定义数据类型,函数的声明和调用 函数间的参数传递 内联函数 带默认形参值的函数 函数重载 C+系统函数,22,基础语法的介绍方法 C+语言概述,阐述与的关系,同时说明学习不必首先学习面向过程的语言。 介绍基本语法成分时,采用与自然语言的语法成分类比的方法。 强调越丰富的语法规则为语言提供越强的表现力,可以与自然语言类比来讲,使学生对繁多的语法不要产生抵触 对应讲稿:第2章3-8页,23,基础语法的介绍方法 基本数据类型和表达式,阐明这部分语法的重要性:数据处理与计算是计算机程序的最基本功能,要使程序能够处理计算问题,就需要能够对各种类型的数据和运算进行模拟。 在讲课中强调每一种数据类型模拟了哪些实际数据,用途是什么。具体语法规定可以淡化,留给学生自学。 对应讲稿:第2章9-38页,24,基础语法的介绍方法 数据的输入与输出,C+没有输入/输出语句 输入/输出被看作信息的流动 输入/输出功能通过I/O流类库实现。优点:功能丰富、灵活,易于扩充 只通过例题简单介绍标准输入/输出,格式控制不作为重点,可以不讲。 对应讲稿:第2章42页,25,基础语法的介绍方法 基本控制结构,介绍每种分支与循环语句时,首先从涉及分支与循环的实际问题入手,给出解决问题的程序实例,然后引导学生从中发现分支与循环语句的用法,最后给出语法规定。 对于语法细节可以淡化,留给学生自学。关键要讲清楚用途、用法。 对应讲稿:第2章43-74页,26,基础语法的介绍方法 自定义数据类型,基本数据类型不足以模拟复杂的实际数据,于是语法提供了自定义数据类型的机制。 枚举实际上是整数集合的子集,用以定义由有限整数构成的数据类型,与使用整数类型相比,可以获得由语法保证的数据和发行检验。 结构体是将具有内在逻辑联系的不同类型数据组合在一起构成新的数据类型。是从C语言继承的,面向过程的,不能规定对新数据类型的处理方法。 对应讲稿:第2章75-88页,27,基础语法的介绍方法 函数,函数是定义和实现一个功能模块的机制 在面向过程的程序设计中,函数是程序模块的最小单位。 在面向对象的程序设计中,函数是类的行为的体现。,28,基础语法的介绍方法 函数的声明和调用,函数定义是函数功能的具体实现代码 使用函数以前要声明函数原型 函数调用和返回的过程要讲透 函数递归调用是难点,从以下几方面讲 一些实际问题和解决问题的方法本身的描述是递归的,典型例子是阶乘。 演示简单递归问题的函数调用过程 要求学生课后通过开发环境的调试工具观察递归调用的过程。 对应讲稿:第3章3-41页,29,基础语法的介绍方法 函数的参数传递,形参在形实结合时才分配内存空间并被初始化 形实结合时参数单向传递(传值)。以数据交换不成功的典型例子来演示。 介绍引用作形参。在此介绍引用类型学生比较容易理解。 对应讲稿:第3章42-49页,30,基础语法的介绍方法 内联函数,从兼顾执行效率和程序结构的角度来引入内联函数。前面讲透了函数调用的执行过程,这里学生才能理解函数调用的效率问题 编译器在执行优化时可能会自主决定函数是否内联 对应讲稿:第3章50-51页,31,基础语法的介绍方法 带默认形参值的函数,实际问题中很多时候是有默认值的,举一些例子。为了模拟这些情况,程序中也需要为函数处理的数据设置默认值 对应讲稿:第3章52-55页,32,基础语法的介绍方法 函数重载,重载的思想,与人类自然的思维方式是一致的。 重载使得具有相似但不同功能的函数可以拥有相同的函数名,方面了函数的使用者。 重载类的成员函数可以提高类通用性 对应讲稿:第3章56-62页,33,基础语法的介绍方法 C+系统函数,C+的系统函数是从c语言继承来的,对应的头文件是 系统函数的说明文档可以查阅编译系统的帮助,学生应该学会阅读英文的帮助文档。,34,实验课安排,实验一(2学时) 集成开发环境应用入门 实验二(4学时) 学会编写简单的C+程序。 复习基本语法及简单的输入输出。 观察头文件的作用。 学会使用集成开发环境中的debug调试功能:单步执行、设置断点、观察变量值。,35,实验课安排,实验三(2学时) 掌握函数的定义和调用方法。 练习重载函数的使用。 练习使用系统函数。 学习使用VC+的debug调试功能,使用step into追踪到函数内部。,36,小结,程序设计基础部分的讲解要从大处着眼,强调 面向对象的思想 程序在模拟和解决现实问题中的作用 每一种语法规定的用途和意义 淡化语法细节,切忌纯粹罗列语法 通过自学、实验和作业掌握、巩固基础语法。要安排足够的上机辅导和答疑,作业可以多留一些,以加强基础训练。,C+语言程序设计 教学法讲座(3):类的概念,清华大学 郑莉,38,目录,对应章节 面向对象的思想背景 超越语法介绍类与对象 特殊成员函数的讲解切入点 类的组合 实验课安排,39,对应章节,第4章 面向对象程序设计的基本特点 类和对象 构造函数和析构函数 类的组合 UML图形标识 程序实例-人员信息管理系统,40,面向对象的思想背景,现实中的类与对象 计算机程序对现实问题的模拟 程序中基本数据类型的局限性及自定义类型的必要性 “类型”的含义:数据+处理函数 自定义类型的途径类,41,超越语法介绍类与对象,从现实问题出发举例说明对象的实际意义 从对现实事物的分类管理角度引出抽象与分类观点 从现实中物体的封装出发说明封装的必要性,引出C+中的封装机制类 以现实中封装物体的内部构造与外部接口,以及程序对现实的模拟角度,介绍成员的访问属性。 对应讲稿:第4章13-28页,42,构造与析构函数,回顾基本类型变量初始化的过程 对象初始化的必要性及其困难 自定义的初始化构造函数 对象的“克隆”拷贝构造 对象消亡前的“善后”与析构函数 对应讲稿:第4章29-46页,43,类重用的方式之一组合,部件组装的思想背景 组合类与成员对象间的“has-a”关系 组合类的部件成员 组合类对象的构造与析构 对应讲稿:第4章47-58页,44,实验课安排,实验四(4学时) 掌握类的声明和使用。 掌握类的声明和对象的声明。 复习具有不同访问属性的成员的访问方式。 观察构造函数和析构函数的执行过程。 学习类的组合使用方法。 使用VC+的debug调试功能观察程序流程,跟踪观察类的构造函数、析构函数、成员函数的执行顺序。,45,小结,对类与对象的介绍要以实际问题为背景 对类的抽象、封装与隐藏机制要着重讲解其意义和作用 构造、析构函数重点讲其用途 类的组合中“has-a”关系的应用背景,C+语言程序设计 教学法讲座(4):数据共享与程序结构,清华大学 郑莉,47,目录,对应章节 数据共享的需求与途径 数据共享的相关语法 共享数据的安全性 编译预处理命令与多文件结构,48,对应章节,第5章 作用域与可见性 对象的生存期 数据与函数 静态成员 共享数据的保护 友元 编译预处理命令 多文件结构和工程 本章内容的特点:与数据的共享和保护相关,49,变量的寿命、作用域、可见性,理解变量的寿命、作用域、可见性是数据共享的基础 寿命 静态生存期:全局寿命 动态生存期:局部寿命 以典型实例演示寿命、作用域、可见性的综合效果,可以借助调试工具演示 对应讲稿:第5章3-22页,50,数据共享的需求与途径,函数间需要数据共享 同一个类的对象间需要数据共享 不同类之间需要数据共享,51,数据共享的相关语法(一),函数间的数据共享 全局变量、函数参数、返回值 将共享的数据与共享数据的函数封装成类 对应讲稿:第5章23-25页,52,数据共享的相关语法(二),同一个类的对象间数据共享 静态成员,也称类成员 静态数据成员 该类的所有对象共享该成员的同一个拷贝 静态函数成员 类外代码可以使用类名和作用域操作符来调用静态成员函数。 静态成员函数只能直接引用属于该类的静态数据成员或静态成员函数。 对应讲稿:第5章26-32页,53,数据共享的相关语法(三),不同类之间的数据共享 友元函数 友元类 对应讲稿:第5章33-40页,54,共享数据的安全保护,常类型 常引用:保护被引用的对象 常对象:对象本身不可改变,用常成员函数访问 常指针:保护被指向的对象 对应讲稿:第5章41-48页,55,编译预处理命令与多文件结构,主要通过学生自学与实验掌握,56,实验课安排,实验五(2学时) 观察程序运行中变量的作用域、生存期和可见性; 学习类的静态成员的使用; 学习多文件结构在C+程序中的使用;,57,小结,讲授本章内容时最主要的是找到主线索共享与保护,要避免杂乱无章 重点在静态成员、友元、常类型 要强调学生在实验中的亲自动手调试、观察,C+语言程序设计 教学法讲座(5):数组与指针,清华大学 郑莉,59,目录,对应章节 数组概念的引入 数组的讲解要点 数组的适用场合、优点、缺点 指针的讲解要点 直接使用内存地址的优点及缺点 动态内存分配及对象深拷贝问题 字符串的存储与处理,60,对应章节,第6章 数组 指针 动态内存分配 深拷贝与浅拷贝 字符串 程序实例-人员信息管理系统改进,61,如何处理大量同类型对象,对同类型对象群体中每一个体往往使用同样的处理方法。可否使用循环语句?关键是在循环体中如何以统一的方式标识每一个体变量。 群体中的对象往往具有逻辑上的密切联系,或存在次序关系。如何以数据结构来描述这种关系? 数组恰恰是解决上述问题的数据结构。 对应讲稿:第6章第3页,62,数组的讲解要点,数组的声明与引用 以统一的名称命名一组变量 以下标表示元素的序号 数组的实质 数组名即数组的首地址 数组元素在内存中是按次序连续存放的 对多维数组的理解 二维数组可以看成是一维数组的数组 二维数组按行存放 对象数组的构造需要调用元素类的构造函数 对应讲稿:第6章4-27页,63,数组的适用场合举例,用于存储同类型的数据序列 用于在函数间传递大批数据 以数组名为参数,传递数组的首地址而不是元素值 要注意:对形参数组的修改会直接反映到实参数组中,64,数组的主要优点与缺点,优点 便于按统一方式处理大量同类型数据 支持对同类型数据序列的随机访问 便于在函数之间共享大量数据 缺点 插入/删除/重新排列元素时需要大量移动元素。 存在下标越界等安全隐患 长度不可动态调整,65,指针的讲解要点,访问程序的内存单元既可以通过变量名,也可以通过地址 指针是存放地址的变量 指针只有被赋予合法地址以后,才能使用 指针的运算规则与指向的类型相关 指针可以接受动态分配的内存地址 指向函数的指针可以增加程序的通用性 this指针使得非静态成员函数可以识别处理的对象 指向类非静态成员的指针必须与对象名/对象指针联合使用 对应讲稿:第6章28-86页,66,使用内存地址的优点及缺点,优点 灵活高效 支持动态内存分配 有利于数据共享 缺点 安全性差,可能会出现对内存的非法访问 使程序的可读性下降 注意事项 使用指针时要确保其含有有效地址,例如不要使用未被初始化的指针,函数不要返回动态局部变量的地址等,67,例题:动态数组类,主要知识点 动态内存分配 在析构函数中释放动态分配的内存空间 深拷贝与浅拷贝问题 对应讲稿:第6章87-89,96-105页,68,字符串的存储与处理,以字符数组存储字符串C语言的方法 具有数组固有的安全隐患 只能使用库函数进行处理 使用String类 安全性好 封装了处理函数,重载了运算符 对应讲稿:第6章106-118页,69,实验课安排,实验六(4学时) 学习使用数组数据对象; 学习字符串数据的组织和处理; 学习标准C+库的使用; 掌握指针的使用方法; 练习通过debug观察指针的内容及其所指的对象的内容; 练习通过动态内存分配实现动态数组,并体会指针在其中的作用; 分别使用字符数组和标准C+库练习处理字符串的方法。,70,小结,本章两大主要知识点是:数组和指针 介绍数组关键在于概念的引入、数组的用途。同时要指出数组这种数据结构的不足之处。 指针部分对于初学者的难度较大,主要是对地址的理解问题,要讲透。 通过this指针说明类的非静态成员函数为什么能识别处理的对象 对象的深拷贝问题、拷贝构造函数的必要性、析构函数的必要性,都要在本章讲清楚,C+语言程序设计 教学法讲座(6):类的继承与多态,清华大学 郑莉,72,目录,内容构成 继承机制的实际意义,以及“is-a”关系 继承时的成员访问控制 继承时的构造、析构函数 解决多继承时的冗余和二义性问题虚继承 多态机制的背景和意义 静态多态性:函数重载和运算符重载 动态多态性:虚函数,73,对应章节,第7章 继承与派生 继承与派生 访问控制 类型兼容规则 派生类的构造和析构函数 派生类成员的标识与访问 程序实例-人员信息管理 第8章 多态性 多态性概述 运算符重载 虚函数 抽象类 程序实例-对于一个小型公司的人员信息管理程序的改进,74,继承机制的实际意义,从一些容易理解的实例出发,解释“继承”的意义 概念的继承和代码的重用 对新问题的适应 对应讲稿:第7章3-8页,75,继承时的成员访问控制,继承过程中可以设定访问控制权限 无论以任何方式继承,基类的成员都存在于派生类的对象中。 基类的私有成员只能通过公有接口访问 对应讲稿:第7章9-23页,76,继承时的构造、析构函数,构造函数和析构函数不被继承基类的构造函数只能初始化从基类继承来的成员。派生类新增成员要自己设计构造函数来初始化 理解构造函数的执行次序和参数转递 首先初始化基类子对象、对象成员,最后初始化派生类新增成员 派生类要负责为基类的构造函数和对象成员的构造函数转递参数 如果为一个类编写了构造函数,就最好再写一个默认的构造函数 析构函数的调用次序与构造函数相反,77,虚继承,多继承有可能导致冗余和二义性问题,可以通过虚继承解决 继承一个类时,很难预料将来是否会出现二义性,虚继承的基类及各派生类,直至最远派生类通常是由一个人或项目组一次设计完成的 能不用虚继承尽量不用,会给后继派生类增加复杂性,78,多态机制的背景和意义,要从我们熟悉的多态的思维方式入手介绍程序对多态的模拟 从设计新的类型的角度说明运算符重载的意义一个新的类型包括数据和运算方法 运算符重载实质上也就是函数重载,属静态多态性 对应讲稿:第8章3-7页,79,运算符重载,这里只讲运算符重载的一般概念和基本语法,对一些特殊运算符的重载,如,留到第9章结合实例介绍会比较直观 对应讲稿:第8章8-29页,80,动态多态性,绑定的概念 以基类的指针指向派生类的对象,并希望由此调用派生类的函数静态绑定不能实现,使用动态绑定。 对应讲稿:第8章30-42,81,实验课安排,实验七 学习声明和使用类的继承关系,声明派生类; 熟悉不同继承方式下对基类成员的访问控制; 学习利用虚基类解决二义性问题。 实验八 掌握运算符重载的方法; 学习使用虚函数实现动态多态性。,82,小结,本章讲解时的关键在于以面向对象的现实意义引出语法规定,以程序模拟现实问题。,C+语言程序设计 教学法讲座(7):数据结构与STL,清华大学 郑莉,84,目录,为什么在C+课中介绍数据结构基础知识 模板 安全数组类、链表类 栈与队列的概念 查找与排序算法 泛型程序设计思想 STL简介,85,对应章节,第9章 函数模板与类模板 线性群体 群体数据的组织 第10章 泛型程序设计及概念和术语 C+标准模板库中的容器 迭代器 标准C+库中的算法,86,为什么介绍数据结构基础知识,数据结构是程序设计能力的基础 非计算机专业在本科阶段可能没有数据结构课,程序设计课中应该介绍一些基础知识 计算机专业在学习第一门语言时可能还没上数据结构 数据结构基础有利于对STL的理解 借本章的一些综合例题,对全书内容作一个复习,87,模板,模板是C+语言的特色 这里只介绍函数模板与类模板的基础知识,初步认识模板的程序设计思想 重点介绍模板的意义和用途 对应讲稿:第9章3-28页,88,数组类模板,安全性和可扩展性 使用模板达到通用性 借此例题综合复习 深拷贝问题 特殊运算符重载 对应讲稿:第7章3-29页,89,链表类模板,链表的基本概念 链表操作的基本方法 为学习STL打下基础 对应讲稿:第9章30-30页,90,栈与队列的概念,着重介绍栈与队列的概念和应用场合,以及栈与队列的基本操作方法 为理解STL中的类模板奠定基础 对应讲稿:第9章39-57页,91,查找与排序算法,介绍常用的查找与排序算法,使学生能够解决一些简单的查找与排序问题,并有助于理解STL的算法 以函数模板来实现对各种不同类型数据群体的处理,这实际上就是泛型程序设计中通用算法的思想,有助于理解STL 对应讲稿:第9章58-76页,92,泛型程序设计思想,泛型程序设计思想不同于面向对象的思想,但是两者并不矛盾,配合使用可以使程序更为通用、灵活 这里只介绍泛型程序设计的基本思想,不进行深入介绍 对应讲稿:第10章第3页,93,STL简介,简单介绍STL的相关概念、术语,目的是使学生以后自学容易一些 主要概念是:容器、迭代器、适配器、通用算法 对应讲稿:第10章4-25页,94,实验课安排,实验九 了解节点类的声明与实现,学习其使用方法; 了解链表类的声明与实现,学习其使用方法; 了解栈类的

温馨提示

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

评论

0/150

提交评论