更全的杂志信息网

C++面向对象技术教学方法与教学实践探讨

更新时间:2016-07-05

0 引言

“程序设计”课程是大学理工科重要的基础课程, C/C++是该课程最主流的教学语言。长期以来,国内高校不断地探索和实践C/C++ 语言的教学方法,以我校为例,自九十年代末以来,学校在本科生各专业推行以C/C++作为程序设计教学语言,其中对理工科大一新生讲授面向对象的C++程序设计语言,对其余人文、医学等学科开展C语言(或C++部分)教学,为此组建了专门的教学团队,专门编写了相关教材,对程序设计与算法语言进行了持续的探索和研究[1]

帮助学生建立起计算机科学的基本概念,培养计算思维是C++语言教学的基本使命。概括近年来国内高校对C++语言教学的探索,大致可分为如下几类:①针对大学生心理和大学学习特点,以学习动机理论、学习迁移理论、感知规律的应用为例,研究提高教学效率和教学效果的方法[2];②强调与语言无关的面向对象思想的传递,如将设计模式和统一建模语言融合到C++教学中[3, 4];③研究将项目驱动和问题驱动的教学方法贯彻到C++教学过程中[5];④ 贯彻学以致用的思想,探索针对学生所学专业领域问题的针对性教学方法[6, 7];⑤探讨教学过程各环节的衔接,研究提高学生实战技能的教学方法[8, 9]

上述这些教学方法的探索、研究、实践和传播提高了我国高校C++程序设计的教学水平和学生的应用能力。

癌/睾丸抗原是一类在睾丸、胎盘、胎儿卵巢等组织及多种肿瘤组织中表达,而在其他正常组织中不表达的癌-胚胎抗原。本研究通过Oncomine网站进行数据挖掘、并利用免疫组化方法证实,在侵袭转移性乳腺癌中癌/睾丸抗原TEX14表达升高。不仅如此,利用TCGA数据库1 102例乳腺癌样本mRNA高通量测序数据,对TEX14与多种乳腺癌转移相关基因的表达进行相关性分析,并且探讨了TEX14的表达与乳腺癌患者预后的关系。

需要指出的是,实现高质量的程序设计教学,除了对教学方法本身的研究外,教师自身对教学内容的深刻理解是高质量教学的基础和前提。南京大学国家级教学名师卢德馨认为教师需具备的第一个必要条件就是对学科知识的本质有深刻理解[10];中科院院士姜伯驹先生提出:教师一定要对教学内容融会贯通,还要能因材施教[11];中科院院士钱伟长先生认为:“教师对教学内容要理解,这是要建立在深厚的基础上的。讲好课有两条,一要有学问,二要有好口才。有学问比好口才更重要”[12]

派生本身是一种再抽象和封装,是更精细化的抽象,在这个过程中识别子类需要用到抽象技术,形成子类要用到封装技术,子类自然而然拥有父类的属性和行为称为继承。

笔者总结历年教学实践,发现在C++课程教学中,指针和面向对象是学生学习最费劲的章节。很有意思的是,对于指针,如果学生反映不能理解则往往说明他们确实没有理解,因此教师较容易察觉并且很容易从学生的反馈中感知其理解程度和教学效果,从而作针对性教学。然而,在涉及面向对象的教学过程中,学生很容易误认为自己已理解但实际上理解非常不透彻,或者学生不理解但很难表达出这种不理解的困惑,让教师颇有铁拳打棉花般使不上劲的感觉。分析上述原因,主要有两点:

(1)局限于C++语言的自身特点,现有C++教材多遵循“先面向过程,再面向对象”的两步法教学模式[13-15],由于这两种思想在技术特征和方法论上存在一定的差异,学生适应上述思想的转化并且融会贯通这两种思想存在一定的难度;

(2)教师本身因缺乏工程实践或者对教学内容研究不够,或对面向对象技术的认识不够透彻,因而在教学过程中难以准确表达,导致学生似懂非懂。

针对C++面向对象技术章节教学过程中学生容易误解、难以运用的问题,本文针对面向对象具有的抽象、封装、继承、多态等概念的澄清,提出了一些针对性的教学建议。通过对本文教学方法历时6年的教学实践,在面向对象教学效果上有了很好的提升,得到了学生较好的反馈。

1 面向对象思想与C++语言

在传统结构化程序设计方法中,存在着数据与方法分离、代码可读性差、复用性差、不易维护等缺点。面向对象技术通过对问题空间进行自然分割以更接近人类思维的方式建立问题域模型,以对象以及对象交互(行为)为中心描述客观世界,试图构造出模块化的、可重用的、维护性好的软件,同时降低软件的复杂性和减少开发维护支出。目前,除了程序设计,面向对象技术已被广泛应用到操作系统、数据库、网络服务、人机接口等多个领域中。

C++语言来源于C语言。一九七八年,美国电话电报公司(AT&T)贝尔实验室正式发布了C语言,此后美国国家标准协会ANSI(American National Standards Institute)在此基础上制定了一个C 语言标准,通常称之为ANSI C。一九八三年,贝尔实验室的Bjarne Stroustrup扩充C语言使之支持面向对象思想,宣告了C++语言的诞生。C++语言在支持面向对象的同时保留了传统C语言语法,由此导致其语法较之其余任何一种高级语言都复杂,客观上增加了该语言的学习难度。

1.4 观察指标 ①根据Barthel指数和Harris髋关节评分比较患者干预前后功能康复情况[2]。②根据视觉模拟疼痛评分(VAS评分)比较患者干预前后疼痛程度[3]。③根据焦虑自评量表(SAS评分)、抑郁自评量表(SDS评分)比较患者心理状态[4]。

一般认为,C++语言虽然入门难,但有了C++基础,可以较好衔接数据结构和算法等后续课程,可以更好理解操作系统的工作原理,可以快速掌握Java、C#等纯面向对象语言。

2 面向对象思想定义

一般认为面向对象具有如下四大技术特征(或方法):抽象、封装、继承以及多态。其中抽象、封装和继承本身就是思想方法,属于方法论范畴,而多态更多属于面向对象技术的行为特征。

图1在一张图上大致表达出了面向对象技术的主要思想和方法,下面重点对上述概念进行澄清和明确。实际上,很多C++教材都回避对这些概念进行明确的定义,如C++教父Bjarne Stroustrup的《The C++ Language Specification》(Edition 3)几乎没有对其中任何一个概念进行直接的定义,笔者此处综合不同教材,给出自己的理解和认识。

2.1 抽象

抽象代表了对一大堆个体的共性特征进行提炼,通过寻找共性特征实现类型识别和类型定义,它解决了“特殊到一般”的问题转化。对应于C++编程语言,相当于从一堆现实对象中寻找共性,最后凝练成能反映共有属性、行为特征的类,因此“抽象”和“实例化”是一对逆过程。

图1 一张图片大致表达出面向对象思想

对应上图1,如周润发、吴孟达等形形色色的男女或贫或富、或美或丑各异,但从他们每日都有衣食住行,凡此种种可以归结出其共同属性与行为特征,形成“人”这个类型,这就是抽象的过程。在抽象过程中,每个具体的人对应到C++语言中的对象,由具体的人凝练成“人”这个类型则对应到C++中的类。

每个具体的“人”具有姓名、年龄等属性,也有走路、睡觉、吃饭等行为特征,因此表达成C++语言可以大致写成:

class person

1)基于微课的自主学习:翻转课堂顺利实施的技术支持就是微课,特别是在实践性较强的计算机公共类课程中,把微课作为辅助教学非常便利,学生可以不受时间、地点的限制,多次地通过观看微课进行知识的复习和强化。在具体实现时,根据不同的课程要求,教师构建基于微课的课程自主学习平台,平台主要包括以下功能:

{

public:

void run(const int time_duration); //奔跑

void eat(); //吃东西

protected:

string name; // 姓名

考虑到属性值存在区间和数值的情况,以关联函数值作为度量指标,在计算出可拓距基础上,计算关联函数的标准差,从而确定属性的权重,如式(1):

(2)行为优先。一般对属性的存取需要通过方法实现,追求极致效率的情况除外。

};

面向对象中“抽象”这个动作用通俗的语言表达就是“不同里面找同”,寻找不同个体(对象)的共同属性和行为特征,形成一个类型(在面向对象程序设计语言中就是“类”)。

2.2 封装

1.1.3 主要仪器 鼓风干燥箱(DHG-9123A,上海精宏实验设备有限公司)、分析天平(TP-214,美国DENVER公司)、分光光度计(T6,新世纪北京普析通用仪器公司)、锤式旋风磨(JXFM110,杭州大吉光电仪器有限公司),超声清洗机(DL400B,上海之信仪器有限公司)

面向对象封装技术用“类”作为表达形式、以访问权限为控制手段实现了对象属性和方法统一描述并避免了相互干扰,且对用户隐藏不必要的实现细节。封装在现实世界有很多鲜活的例子,如:①一个食堂内部如何杀鸡做菜是不让食客看见听到的,只提供卖菜的窗口,这样既可以很好满足食客们的口腹之欲,又不会让其产生隐约的负罪感(不向食客输出无用的干扰信息);②集成电路器件如CPU内部构造复杂但引脚都简单明了,用户只需要知道如何连接引脚就可以设计出优秀的应用系统。

菌体短杆状,单细胞,极少双连,周生鞭毛,具荚膜,大小 1.3~1.9×0.53~0.6(um),革兰氏染色阴性,能发酵葡萄糖产出气体,菌落微凸乳白色,边缘齐整圆形,半透明反光,质粘稠。胡萝卜软腐欧文氏菌马铃薯黑胫亚种适宜温度10~38℃,最适为 25~27℃,高于 45℃即失去活力。

如上,面向对象封装技术最大的优点是可以实现细节隐藏,避免对用户的过多信息干扰,其运用要点在于:

(1)紧耦合。被封装的属性和行为在逻辑上要属于一个主体,切忌生拉硬扯拉郎配。

int age; // 年龄

(3)极简性。如无必要,勿增实体,要符合奥卡姆剃刀原则。凡是被去掉后仍旧能工作的成员和方法,通常要去掉;凡是仅供内部调用的成员和函数,务必隐藏。

(4)安全性。类内一般不宜存在相互依赖的属性,这个和数据库第三范式(3NF)要求大致一致。如追求极致效率,设计了依赖或者传递依赖的属性时,应严禁外部公开访问这些属性,且修改该属性的类public成员函数必须保证数据一致性。

综上所述,对脑血管疾病合并糖尿病患者而言,优质护理的实施具有重要意义,可帮助其平稳度过围术期,减少术后各类并发症,促进早日康复。

有效的保证财政系统信息安全对于财政系统来说非常重要。在财政管理工作中使用计算机网络系统虽然在一定程度上提高了工作的效率,但计算机的安全漏洞也给财政工作带来了一定的麻烦。所以财政部门应该做好相关的安全防护措施,加强加密技术的使用和防范病毒的力度,这样才能有效保证地方财政信息安全。

对应到图1,如果我们设计一个人 class,那么人的钱属性可以是protected/private,而buy(), borrow()方法可以是public的,这么设计后,能达到的效果是对现实世界最真实的模拟:

比如初学者很容易犯胡乱封装超大类(和写超大函数的原因差不多)、滥用继承等问题。在教学过程中,教师应该在运用面向对象思想的教学实例中不断强化这些概念,并且最好能和现实世界的实例对应起来。

高中生物涉及生命体内部结构以及化学作用等知识,内容比较复杂,加上生物知识本身比较枯燥,提高了学生的学习难度,影响了学生的学习效果。因此,在高中生物教学中,教师要围绕如何激发学生的学习兴趣,提高学生的学习效率合理运用信息技术开展教学,为学生提供全新的生物知识学习方法,为学生直观呈现高中生物教学内容,拉近学生与生物知识之间的距离,从而提升学生学习生物的兴趣。这样不但可以将抽象的知识形象化,降低学生的理解难度,而且让学生真切体会到生命的神奇,从而进一步激发学生对生物知识的学习兴趣。

(2)但你可以通过让他买东西(buy)或者问他借钱的方法修改他的财富值。

在教学过程中,封装的技术特点可以用“隐藏一切可以隐藏的,暴露无奈必须暴露的”这么一句话把要点强调出来。

2.3 继承与派生

继承和派生是面向对象技术中最容易误导初学者的概念。大部分C++教材没有对这两个概念进行定义,这可能是部分C++初学者难以掌握这两个概念的重要原因。在《The C++ Language Specification》(Edition 3)中就没有定义继承或者派生,或者认为C++只是用来实现这些概念,只是强调“The derived class is said to inherit members from its base class, so the use of base and derived classes is commonly referred to as inheritance”。同样,在该书中继承的特点在于:“Inheritance allows to create classes which are derived from other classes, so that they automatically include some of its ”parent's“members, plus its own”。 国内教材典型如谭浩强先生的《C++ 面向对象程序设计》将之定义为“一个新类从已有的类那里获得其已有特性,这种现象叫类的继承”[14]

上述表达基本上说清了形式,但没有说清本质,对于初学者而言并不容易真正理解。

一般认为派生是一种行为,继承是一种结果,他们本质是一致的,只是侧重描述的视点有所差别。面向对象派生主要有两种场合:①类型细分;②行使(implement)职能,即java语言中的接口(interface),在C++语言中接口一般采用多继承实现。

因此,教师有必要帮助学生理清概念:派生最主要的场合是类型细分,由大类生成小类,而小类对象由于本身也属于大类,因此它自然而然具有大类的属性和行为。对于初学者而言,首要的是要理解派生的第一种场合“类型细分”的概念,理解了类型细分后就非常容易解释继承这个概念。比方说,在图1中,人类个体中,因为男女具有不同属性和行为特征,可以细分成男人和女人两类,也就是说人可以派生出男人和女人,显然当我们实例化男人或者女人时,由于他(她)首先是人,因此自然而言就有人的一切属性和行为。理解了这一切,会发现C++中子类、父类、基类这些名字实际上起得很糟糕,初学者很容易在这些概念误导下“误入歧途”。

让我们先看一看目前新加坡初级学院的老师通常的教法。我手头有一本由玲子传媒出版的《现代短篇小说·新诗赏析》[11],里面收录了H2华文与文学课程的3个短篇小说(鲁迅的《药》、王蒙的《最宝贵的》和王文兴的《命运的迹线》)和3首现代诗(徐志摩的《再别康桥》、郑愁予的《错误》和淡莹的《海魂》)的赏析内容。这本书,被很多担任H2华文与文学课程教学的老师作为主要的教学参考资料。关于《药》的基本教学内容,此书指出了以下教学重点。

“白马非马”是中国古代著名哲学家公孙龙的狡辩术,而在面向对象技术中,派生的要点是“白马是马”,即小类是大类细分出来的,小类对象就是大类对象。进一步,大类对象未必是小类对象,总结一句话就是“马非白马”,有了这两点,自然而然就理解了派生和继承的行为学特征,不需死记硬背自然而然就明白,而不能直接将基类对象赋给派生类,同样很容易理解一个派生类的初始化和析构过程。

不论采用哪种教学方法,有一点非常重要,教师自身对所教授课程必须有深刻的认识和理解,缺乏对教学内容透彻理解的教学改革如缘木求鱼、舍本逐末,其成效值得怀疑。

一句话解释派生或者继承:继承不是财产继承,最主要是类型细分。派生就是在“相同里找不同,然后再在不同里找相同,细分成小类”。派生的原则:“白马是马”。

2.4 多态

多态通常称为动态联编或者动态绑定,相对是比较容易理解的概念,它更多属于面向对象技术的行为特征,因为大类细分出小类,小类对大类的某个动作行为具有不同的表现。在图1中,人这个大类(对应C++的基类或者父类)具有走walk和唱sing这两个动作:

此外,好封装实践在表达形式上应该是“外衣外穿、内衣内穿”,体现如下特点:①先公开,后私有;②先重要,后次要;③先常用,后少用;④合并同类项。这样的好处在于直接展示用户最关心的、最常用的东西,提高了程序的可读性、可维护性、可调试性等。

1949年秋,赵忠尧看到了中华民族崛起的希望。加速器是制造原子弹的核心设备,他躲开美国联邦调查局和海关的严密检查,将自己几年来收集到的加速器零部件分装入30多个箱子,与购买的教学设备混在一起,陆续运回祖国大陆。但此时国际形势发生了变化,中美已不通航,赵忠尧本人的回国遇到了难以想象的困难。直到1950年8月,他才侥幸获得一份过境香港的签证,1950年8月29日,赵忠尧和钱学森、邓稼先等100多名留美学者一起,登上了美国的“威尔逊总统号”。

(2)对于sing这个动作,男人当引领高歌大江东去,女人浅唱慢吟杨柳岸晓风残月。

在教学过程中,对于多态需要注意:①存在派生体系;②派生类对基类虚函数进行覆盖(override);③存在触发场景—用基类指针或者引用指向调用派生对象后,调用该虚函数。

对应于图1中,相当于抓来一个男人或者女人,关在黑箱里面唱歌,外面的人只知道里面藏个人,当要求里面的人唱歌时,躲在里面男人自然而然唱男声,躲在里面女人自然而然唱女声。

一句话解释多态:大类细分出小类后,小类对大类的某个动作具有不同行为特征。

3 面向对象教学的注意点

程序设计语言教学本身是实践性非常强的课程,学生必须在实践中提高认识,增强能力。C++语言面向对象这一章节的教学同样如此。这里,指出学生在学习过程中容易犯的一些典型错误并给出实践建议。

3.1 避免包罗万象的抽象

初学者在学习C++类章节后,容易犯的典型错误是将一大堆有关的或者无关的东西都封装到一个巨大无比的类中,这个类包装了所有需要的功能。造成上述问题的原因是,学生尚没有建立起面向对象的概念,在思维上还是面向过程的。如用计算机模拟做菜,初学者很容易写出一个超大无比的“cooking”类,用这个类搞定一切,从卖菜、洗菜、做菜到上菜。而一个C++老手,可能会设计出采购员、洗菜工、厨师、上菜员等岗位,并且对人力资源合理配置。

因此,要学习面向对象C++编程,必须在思维模式上从处理向管理转变,也就是说要从如何做事转变成考虑需要哪些角色、由谁来做事、如何交接等问题上来。

在面向对象程序设计中,在类设计上要注意如下几点:类内高内聚、类间低耦合、理清交互接口、有机协调类对象。

同前,大部分教材如《The C++ Language Specification》(Edition 3)都没有直接定义封装。实际上,封装并不是面向对象语言的专用技术,在面向过程程序设计、编码中,封装思想同样被广泛应用,典型如C程序将源代码分别用头文件和c文件存储,其中头文件提供了供外部调用的数据结构、变量声明、函数接口但并不给出函数的实际实现,而将实现存储在c文件中,用户有这些头文件的声明就可以编写自己的调用程序。此外,在C程序中如果有些数据结构、变量、函数只是在某个特定C源代码中使用而不需要被外部文件调用的话,就不需要在头文件中对他们做任何声明,且一般会在函数实现前增加static修饰符限制外部调用。

3.2 保留万不得已的暴露

初学者用C++语言表达类时,容易有两个极端:什么都公开和什么都保护。C++类教学过程中对封装可以要求严厉一点:隐藏一切可以隐藏的,暴露无奈必须暴露的。当学生建立起基本概念后,在实际应用中,可以在追求极致效率情况下,公开部分成员。如windows上VC++中CPoint类直接公开了成员x,y。

(1)对于walk这个动作,男人大步流星,女人是凌波微步;

3.3 坚持白马是马的派生

在派生相关内容教学上,初学者容易从功能的角度出发为了复用功能强行派生,图2就是一个典型例子,直线由点派生而来,而在现实世界上,直线不是点,因此这种派生就不合理。

(a)点类的C++描述

(b)派生形成直线类 (c)聚合生成直线类 图2 直线类的不同构造方法(b不合理、c合理)

派生要坚持“白马是马”的准则。图3是一个值得讨论的派生图,其中:①矩形、圆、三角形都从几何图形派生,这是合理的;②由矩形派生出长方体,用三棱柱派生出三角形,这都值得商榷,因为长方体不是矩形,这种派生就显得很生硬,不符合真实世界语义,违背了“白马是马”的原则。

图3 违反“白马是马”准则的派生树

此外,派生和聚合要分清概念:①若一个对象属于某种类型(is-a),但比那种类型对象多一些个性属性和功能,用派生,典型如钢笔之于笔用派生;②若一个对象由若干个对象造成(has-a),此时用聚合,典型如房子之于窗户用聚合。

在过滤器业务领域,科德宝过滤技术集团新开发的一套数字化软件使过滤解决方案的定制化配置成为可能。科德宝过滤效率电子计算工具(简称e.FFECT)可以分析并设计多级过滤系统,它能基于实际工况定制过滤器配置,为单个用户找到最佳过滤解决方案铺平道路,从而确保最佳的功能可靠性、能源和成本效益。

4 面向对象思想之C++教学实践

笔者在C++语言教学中,为了让学生更好领会面向对象程序设计与编程思想,主要做了如下尝试:

4.1 理清概念用直白浅显的语言传递面向对象思想

理清面向对象的概念,是正确和合理运用C++语言实现面向对象程序设计和编程的前提和基础,面向对象思想如果概念不清,很容易设计并写出不堪入目的代码。

(1)你不能直接从别人口袋里面掏钱(那是别人private/protected的东西);

4.1 课堂实录 现以“外界因素对种子萌发的影响”实验为例,主题为“设计实验检测影响种子萌发的因素”,是教材中第9章“植物学”第4节“植物繁殖”学生课后的个人探究活动。教师给学生提出实验主题后,要求学生通过文献阅读提出探究问题、实验设计方案、进行实验、实验数据采集与分析、得出实验结论并进行评价和改进。经过观察,大多数学生选择的自变量有“温度”“培养液pH”“赤霉素”和“光照强度”等,将胚芽的长度作为因变量即实验指标。学生利用教师提供的黄豆、绿豆和红豆等实验材料,借助实验仪器,在实验室内进行实验,整个实验持续数周。学生每天同一时间进行实验观察记录、利用软件进行数据采集和分析(可借用校内时间)。

必须指出的是,面向对象思想可以用C++语言设计和实现,但面向对象思想本身可以超脱于任何程序设计语言。从根本上说,面向对象思想是一种分析、设计哲学,它超脱于编程语言而存在,我们熟知的C++、Java、C#和python等语言都可以实现面向对象编程。除此之外,非面向对象编程语言如ANSI C照样可以用面向对象思想编程,Qualcomm曾经力推的移动开发平台BREW(Binary Runtime Environment for Wireless,无线二进制运行环境),在其4.0版本前所提供的无线对象模型API及开发语言均是基于C语言。除了软件编程,面向对象思想作为一种通用问题解决方法,也可以应用于其他工程领域。

4.2 规范编程从实践上强化行为为中心的准则引导习惯

面向对象程序设计与编程中,不同的教科书遵循各自的编码风格。一般认为,早期的教科书(包括C++之父亲自操刀的《The C++ Programming Language》(1st,2nd,3rd Edition))多采用先数据后行为的书写格局[15],大部分现代教材多采用先行为后数据的书写格局[13], 此外部分教材如谭浩强先生《C++面向对象程序设计》两种书写方式均有。

这两种书写方式反映了两种不同的思维模式,前者从用户接口的角度考虑,将用户最频繁调用或者最关心的东西展示给用户,而后者则偏重于从数据角度设计类。图4示出这两种不同的编码风格。

(a)行为优先的编码风格

(a)数据优先的编码风格 图4 两种书写风格

目前,以行为为中心的代码书写方式更符合面向对象思想,已经成为工业界的主流,如华为、谷歌公司均以此规范编码。

4.3 模仿对比对STL从模仿到熟练应用实现融会贯通

C++语言包罗万象,其中标准C++类库功能强大,包含了数组、链表、队列、栈、hash表等多种数据结构及算法支持并已经过多年优化。在工业届,除非特别场合(如嵌入式环境)一般不建议用户用自己的类替代标准库。

我们在C++教学过程中,让学生由简到繁模拟STL标准库写自己的模拟版本如myvector、mylist、 mystring、mystack、myqueue等类,通过这种模仿和对比,让学生可以很快掌握STL C++接口,同时可以全面锻炼面向对象思想,复习动态内存分配、对象复制拷贝、运算符重载、对象参数调用等系列知识,最终达到一举多得的效果。

4.4 项目驱动理论和实践结合培养卓越工程师思维

面向对象思想因为本身比较抽象,除了需要尽量用贴近生活用学生容易感同身受的例子来引导学生理解外,更需要培养学生面向对象程序设计解决问题能力,循序渐进用项目驱动学生学习,从项目和问题着手贯彻面向对象方法学。

如在学习过程中,可以配合高等数学和线性代数相关教学内容让学生编写分数类、复数类、空间向量库、矩阵运算库或让学生实现一个简单CAD系统等等,教师在教学前应该有很多思考和准备,这种教学方法既可以巩固领域知识,又能真正锻炼面向对象程序设计和编程能力。

另外,C++语言给了用户最大的权限和灵活度,但语言本身不具有垃圾回收等特点,因此在教学过程中可以有意识提醒学生如下几点:①用好构造和析构函数,实现资源尽可能自动分配、自动回收;②提高效率,对于大对象使用引用传递或指针传递而非值传递;③坚守语义,不论是类抽象还是派生及运算符重载,一定要坚守语义,且运算符重载在行为特征上要和简单数据类型语义一致;④强化调试能力,教师多讲实例,对容易发生的编译和运行时问题有针对性教学策略。

5 结语

基于上述认识,笔者在C++教学过程中不断尝试和改进教学方法,历时六年的教学实践表明上述教学方法教学效果显著,学生评教名列全校前茅。以2016、2017两年为例,在以面向对象为主要教学内容的第二学期C++教学中,学生评教成绩远高于学院和学校平均成绩(图5);以2017年为例分析,在备课、讲授、答疑、批改等单项指标也全面领先于学院和学校平均指标(图6)。

图5 2016、2017年学生评教总评对比

图6 2017年学生评教单项指标对比

针对程序设计与算法语言课程教学过程中学生对于面向对象技术“难理解、难应用”的问题,本文试图从概念上对抽象、封装、继承、多态等重要概念容易出现的典型误解进行针对性澄清,用浅显且容易传递的语言对上述概念进行了诠释,并对面向对象的教学过程中提出了经过自身实践的教学建议。

教学是个不断迭代改进的过程,笔者的这些教学方法和教学实践将在以后继续完善和优化。

参考文献:

[1] 吴乃陵. 面向对象C++程序设计教学改革[J]. 南京:电气电子教学学报. 2003, 25(2): 9-11, 43.

[2] 任刚,王炜. 浅谈心理学在C++程序设计教学中的应用[J]. 南京:电气电子教学学报. 2005(04): 109-112.

[3] 章品正,於文雪. 设计模式在C++课程教学中的运用[J]. 北京:计算机教育. 2014(14): 41-45.

[4] 何峰. 从模板到模式:对面向对象程序设计教学的思考[J]. 南京:电气电子教学学报. 2010(06): 64-66.(张小国文)

[5] 夏思宇,李骏扬,魏海坤,等. “程序设计与算法语言”实践课程中的项目教学[J]. 南京:电气电子教学学报. 2014, 36(4).

[6] 罗晨. 浅谈C++程序设计语言教学与专业应用的结合[J]. 石家庄:教育教学论坛. 2014(30): 239-240.

[7] 李骏扬,陈汉武. 工科专业C++语言教学目标与方法的探讨[J]. 北京:计算机教育. 2007(16): 16-18.

[8] 鲁红英, 肖思和, 孙淑霞. “C/C++语言程序设计”课程教学改革与实践[J]. 北京:计算机教育, 2013(7):95-98.

[9] 蒋浩,黄学良,徐志科. C++程序语言课程教学环节的组织与设计[J]. 南京:电气电子教学学报. 2009, 31(6): 10-11.

[10] 张富生. 解读卢德馨研究性教学[J]. 北京:中国大学教学. 2007(3): 41-45.

[11] 李江涛. 北大姜伯驹院士:坚持批改作业50年的数学家[EB/OL]. [2014-06-03]. http://www.edu-gov.cn/news/4627.html.

[12] 钱伟长. 大学必须拆除教学与科研之间的高墙[J]. 北京:群言. 2003(10): 16-20.

[13] 钱能. C++ 程序设计教程[M]. 北京:清华大学出版社有限公司, 2005.

[14] 谭浩强. C++ 面向对象程序设计[M]. 北京:清华大学出版社有限公司, 2006.

[15] 吴乃陵,況迎辉,李海文. C++ 程序设计[M]. 北京:高等敎育出版社, 2003.

张小国
《电气电子教学学报》2018年第02期文献

服务严谨可靠 7×14小时在线支持 支持宝特邀商家 不满意退款

本站非杂志社官网,上千家国家级期刊、省级期刊、北大核心、南大核心、专业的职称论文发表网站。
职称论文发表、杂志论文发表、期刊征稿、期刊投稿,论文发表指导正规机构。是您首选最可靠,最快速的期刊论文发表网站。
免责声明:本网站部分资源、信息来源于网络,完全免费共享,仅供学习和研究使用,版权和著作权归原作者所有
如有不愿意被转载的情况,请通知我们删除已转载的信息 粤ICP备2023046998号