《C++程序设计教程》(第二版)的写作动机与特色

2006-03-24 04:00
计算机教育 2006年3期
关键词:程序员代码程序设计

钱 能

一、 用标准C++教学与编程

计算机科学与应用的迅猛发展,直接推动了《C++程序设计教程》一书的再版。由于C++语言作为有效的开发工具在计算机界起着重要的作用,因而在国内得到了越来越多的应用,许多大型的计算机和软件开发公司要求程序员必须能够进行C++编程,这一趋势导致了越来越多的学校开设C++程序设计课程。1998年ISO/IEEE所制定的C++标准如今已经被各大C++编译器制造商全盘采用,2002年又修订了C++新的国际标准,国内的C++教学也逐步意识到用标准C++进行教学的重要意义,这也意味着C++正以一日千里之势在向前发展。

这些年中,发现用非标准C++进行编程,总是磕磕碰碰,遇到编译器的严重挑战,而用标准C++进行编程却能顺利进行。这倒不是说非标准C++不能进行实战。例如,在VC6下书写的程序,只打算在Windows环境下运行,也没有什么不妥,因为Windows在我国的使用和开发群体那么大,使得VC6也似乎成了一种Windows的“标准”了。但是,在C++中使用类进行编程,以及使用STL便不那么顺畅了,编写的代码移植到其他系统变得困难了。由于人为地制造此编译器和彼编译器的差别,也就使得代码彼此之间比较和研究产生了障碍。

所以一开始学习,采用标准C++学习,是一种良好的习惯,它能够帮助读者发现最本质的问题。例如,字符串处理,用char*直接描述和用string类描述有本质的区别,当读者看清两者的差异后,到了使用Windows资源或者MFC时,就会自然理解CString与char*的区别来。

标准C++有更多的使用群体、更好的移植性和对以后的新标准更好的适应能力,这也促使了第二版从前C++过渡到标准C++。

二、 结构调整,强化体系

采用原先第一版做教材时,发现速成教学很奏效,也就是在实验室现学现编,而且可以无需任何预备知识。相反,循序渐进地进行课堂教学,因为没有接触到计算机,没有直接进行编程实践,关于数据类型定义、说明、命名以及语法格式等概念的理解反而有一些障碍。这不得不让引人思考,是否应该以编程的感性认识让学生自己去分辨编程中语言要素以及操作顺序。几次下来,确认了首先上机实验这样的教学方式很有效。于是在第二版中,将基本编程这一章的内容放到前面第二章,而数据类型和具体的计算表达统统属于初学编程时的问题来加以解决,放到了第三章和第四章。

同时,因为第二版的实例教学色彩更浓厚,一些概念靠实例的学习可以掌握,所以把原来单独成章的数组以及指针都拆到第三章中,作为其中的一节内容了。

第一、二部分讲述基本编程和过程化编程方法,考虑到一些内容的份量比重,过程化编程中的数组、指针、引用和结构,都不再单独成章。这实际上是对全书作大幅度的内容结构重组的开始。

由于实例中输入输出的数据设计特别重要,所以全书贯穿了文件流的基本操作。

以基本编程语句,数据类型和计算表达的章节顺序展开叙述,同时还归类了过程化编程的诸种方法,是作者多年教学经验的总结。学了简单的编程语句,随之展开过程控制结构的实验,以感性认识牵动理性认识,在C++学习上更能奏效,也顺应了教学规律。

抽象编程是指采用抽象分层的手法,进行各个模块的具体编程。抽象编程并不是动动脑,动动嘴,比划比划的形式,而是更有效地进行的具体编程。要实质性地提高编程能力,必须学习C++的内部实现技术和抽象表达手段,两者并重。面向对象编程的主要手段体现在抽象编程,书中强化了C++的抽象表达技术,特地将多态和抽象类拎出来单独成章,而第一版在抽象表达手段上明显不足。

除此之外,还加强了基于对象编程,完善了面向对象编程,补充了高级编程。

第一版在面向对象和高级编程方面比较薄弱,在教学中,明显感到一是体系性不强,二是内容相对不足。因而,第二版必须针对这一缺陷,在结构上作一大的调整。结果,对象化编程中的堆与拷贝构造函数、静态成员和友元、多重继承、操作符重载和IO流都不再单独成章,而以面向对象编程的最重要几个内容来编排:类,对象生灭、继承、基于对象编程、多态以及抽象类。而且也大大扩充了原先的内容,特别是抽象类,模板和异常这三章内容,增幅比较大。

模板这一章除了介绍基本用法,还介绍了STL的模板技术以及程序组织方法,模板的全局定做和局部定做,用模板实现的多态技术与虚函数的多态技术的区别与相互补充性,最后介绍了泛型编程,这些内容属于高级编程的基础,它对于理解开发中的样本代码会带来很大的好处。异常这一章除了介绍基本用法和增强编程的可靠性与容错性的作用外,还介绍了标准异常、异常申述、异常关键实现技术和非错误异常的处理方法,它对于读者理解异常的本质会起到很好的作用。

三、 为新教学模式开道

打破旧式教学的刻板模式,致力于消除计算机专业的学生在大学毕业后却不会编程的普遍现状。本书将程序设计课程的教学要求和目标牢牢锁在编程能力而不是应付机械式考试上,强调程序设计课程应充实更多的编程实践,让更多有编程经验的教师来讲解和指导实验,并要求以实际的编程活动来确认是否掌握了所学内容和方法。

因此第二版无论是代码实例,还是习题都采用编程实验形式,而且,事实上,作者已经完成了两年的课程考试以编程为主的形式的过渡。

第二版的出版,也意味着作者将以编程实时提交作为实验形式,也以编程实时提交作为考试的形式,以此作为C++程序设计课程的新教学模式。

虽然第一版已经开始脱离应付书面考试的学习形式,但某些地方还留恋着计算机等级考试的内容细节描述,而第二版的写作已经将一些细节下放到《详解》1中去了。《教程(第二版)》作为主教材,其手段是编程方法和编程训练并施,其内容是内部特性与抽象编程并重。当然,学好了C++编程技能,书面考试亦会得心应手。

本书在内容上是跨编程基础,过程化编程,对象化编程和高级编程的四合一。可以选择进行其中的第一、二部分,或第三、四部分的教学。第一、二部分和第三、四部分分别可以作为一学期约64个理论实践课时的教学,其中上机实验可占到总学时的1/2左右。

四、 引领进一步编程提高

目前市面上,C++的书籍很多,真是眼花缭乱,有很多是国外名家写的经典之作,但初学者看了很难有大的收获,而有过一些开发背景的读者看了会觉得很精彩,感到真是一种享受。到了“享受”这个层次,学习C++就无障碍可言了。本书旨在引导初学者,学会欣赏C++学习的初级精彩;然后根据作者的指引,直接去享受C++经典著作的内在精彩。

书中经常出现对参考文献的阅读指引,其中大部分都是指引到国外的C++经典著作中去,从而帮助读者学习更深刻的C++编程内涵。

书中也经常出现程序设计方法的多样性探讨、语言特征上的优缺点描述及编译工具评价等,甚至对C++中的一些名词和术语进行了更确切的中文命名。作者不隐晦自己的观点,更欢迎专家来信探讨。对于计算机教师和高级程序员来说,应是一种有益的参考。

五、 通俗、诙谐和深长意味

本书描述的浅显易懂来自于不懈的实践经历和长期的教学经验。然而,仅仅浅显,往往使著述的篇幅显得臃肿,所以,必须已经对某一领域的科学现象有所透彻的理解,才能真正通俗易懂甚至诙谐幽默得起来。

通俗和诙谐也是作者撰写本书的一大特点,因为作者已经不相信一本刻板描述高水平体系化的书,能够为读者所接受。人来自生活,对于堆积着公理、定理、规定,公式推导,规范的书,看似堂堂正正,而少有对体系作深刻揭示而又实例不足的书,已经证明是不受现代读者欢迎的。而且C++编程语言作为技能性课程更需要最后以能力来证明自己的学习成就而不是考试成绩。

通俗和诙谐不是无原则的,它必须围绕一个体系,紧扣主题,重点突出。在难点的叙述上,更能见通俗和诙谐的魅力。

例如,作为性能这一章的开场白,有一段对效率的独特描述,来警示效率在编程中的重要:“程序员谈论最多的是效率问题,C++面向对象程序设计方法就是在效率的争辩中发展起来的。面对所要解决的庞大问题,人们害怕徒劳无功,所以对种种影响效率的方法横加指责。软件业的发展,是因为生产的软件一个个实用起来了。而要实用,效率便是其生命!”

六、 抽象编程与内部特性并重

高级编程都是抽象编程,抽象编程总是接口独立,层次分明。抽象编程最大的好处是程序的模块之间职责分明,容易维护和扩展。面向对象编程的一个重要优势就是能够在对象化编程中把抽象性的效果淋漓尽致地体现出来,抽象编程是程序员追求的重要目标,把握了抽象编程也就是本质上把握了编程的方法。因此,本书抓住抽象编程,对面向对象等高级编程方法展开重点描述。

C++编程本质上是数据类型和算法的堆积,很多算法的性能是需要程序员通过语句使用的效率推敲来把握的,也就是说,C++的内部特性对其程序的性能起着重要的作用,这种作用不是哪种编程方法可以左右的。此外,STL的性能也涉及到所用语句的内在效率,它必须从实践中慢慢把握。

要提高编程能力,便要以抽象编程观来进行编程思考,扩大编程的视野,同时必须重视C++内部特性,提高C++性能,让程序真正实用起来。对C++来说,这是两种相辅相成的本质,一个强调低层特性,一个强调从顶层纵览全局。坚持两者并重,才能使C++体现出超乎其他编程语言的简捷和高效。体现了C++强大的生命力也就体现了一个人的编程能力。这就是学习C++编程语言的着眼点。

七、 代码风格

编程重代码形式,优秀程序员总是具有自己独特的代码风格。代码风格的好坏直接影响其可读性,影响其与其他程序员的沟通。这也就决定了该代码的生命力。要想尽可能快地成为一个程序员,应该有意识地训练自己的代码书写风格。这就首先需要见识一些优秀代码,然后从实践经历中慢慢形成自己的代码风格。

本书正是意识到了代码风格的重要,从根本上着手来培养程序员,本书特地对第一版所有的源代码的风格进行了改良,使之更优雅、精简和可读。同时还补充了许多高效和精巧的代码。难怪书的封底点出“风格独特,极具模仿价值”。

这里要避免强调风格所导致的误区:性能是程序运行的生命,但有时性能和代码并不调和。也就是说,实现了高雅的风格,而操作并不一定高效;实现了高效,代码不一定可读性好。书中一般会采取一种简捷的偏向于袒护性能的代码形式。发生这种情况时,代码可能会显得很奇异,甚至有点晦涩难懂。好在这是一部教材,把这些悬念留给亲爱的老师,会使课堂教学更精彩,而且也将会有《C++程序设计教程详解》来细述。

猜你喜欢
程序员代码程序设计
基于OBE的Java程序设计个性化教学研究
项目化教学在Python程序设计课程中的应用
C++程序设计课程教学改革研究
医学专业“Python程序设计”课程教学改革总结与思考
2020年程序员依然很吃香
程序员之子
神秘的代码
一周机构净增(减)仓股前20名
重要股东二级市场增、减持明细
加班