设为首页 加入收藏

TOP

C++沉思录 前言
2013-10-07 00:06:50 来源: 作者: 【 】 浏览:68
Tags:沉思 前言

前 言

原由

1988年初,大概是我刚刚写完C Traps and Pitfalls(本书中文版《C陷阱与缺陷》由人民邮电出版社出版)的时候,Bjarne Stroustrup跑来告诉我,他刚刚被邀请参加了一个新杂志的编委会,那个杂志叫做《面向对象编程(www.cppentry.com)月刊》(Journal of Object-Oriented Programming,JOOP)。该杂志试图在那些面孔冰冷的学术期刊与满是产品介绍和广告的庸俗杂志之间寻求一个折中。他们在找一个C++(www.cppentry.com)专栏作家,问我是否感兴趣。

那时,C++(www.cppentry.com)对于编程(www.cppentry.com)界的重要影响才刚刚开始。Usenix其时才刚刚在新墨西哥圣达菲举办了第一届C++(www.cppentry.com)交流会。他们预期有50人参加,结果到场的有200人。更多的人希望搭上C++(www.cppentry.com)快车,这意味着C++(www.cppentry.com)社群急需一个准确而理智的声音,去对抗必然汹涌而至的谣言大潮。需要有个人能够在谣言和实质之间明辨是非,在任何混乱之中保持冷静的头脑。无论如何,我顶了上去。

在写下这些话的时候,我正在构思我为JOOP撰写的第63期专栏。这个专栏每期或者每两期就会刊登。其间,我也有过非常想中断的时候,非常幸运的是,Jonathan Shopiro接替了我。偶尔,我只是写一些当期专栏的介绍,然后到卓越的丹麦计算机科学家Bjørn Stavtrup 那里去求助。此外,Livleen Singh曾跟我谈起为季刊C++(www.cppentry.com) Journal撰写稿件的事,那个杂志在发行6期之后停刊了。Stan Lippman也甜言蜜语地哄着我在C++(www.cppentry.com) Report上开了个专栏,当时这本杂志刚刚从一分简陋的通信时刊正式成为成熟的杂志。加上我在C++(www.cppentry.com) Report上发表的29篇专栏文章,我一共发表了98篇文章。

在这么多的杂志刊物里,分布着大量的材料。如果这些文章单独看来是有用的,那么集结起来应该会更有用。所以,Barbara 和我(主要是Barbara)重新回顾了所有的专栏,选择出其中最好的,并根据一致性和连续性的原则增补和重写了这些文章。

本书正是世界所需的又一本C++(www.cppentry.com)书籍

既然你已经知道了本书的由来,我就再讲讲为什么要读这本书,而不是其他的C++(www.cppentry.com)书籍。天知道!C++(www.cppentry.com)方面的书籍太多了,为什么要选这一本呢?

第一个原因是,我想你们会喜欢它。大部分C++(www.cppentry.com)书籍都没有顾及到这点:它们应该是基于科目教学式的。吸引人最多不过是次要目标。

杂志专栏则不同。我猜想肯定会有一些人站在书店里,手里拿着一本JOOP,扫一眼我Koenig的专栏之后,便立刻决定购买整本杂志。但是要是我自认为这种情况很多的话,就未免太狂妄自大了。绝大多数读者都是在买了书之后读我的专栏的,也就是说他们有绝对的自由来决定是否读我的专栏。所以,我得让我的每期专栏都货真价实。

本书不对那些晦涩生僻的细节进行琐碎烦人的长篇大论。初学者不应该指望只读这本书就能学会C++(www.cppentry.com)。具备了一定基础的人,比如已经知道几种编程(www.cppentry.com)语言的人,以及已经体会到如何通过阅读代码推断出一门新语言的规则的人,将能够通过本书对C++(www.cppentry.com)有所了解。大部分从头开始学的读者先读Bjarne Stroustrup的The C++(www.cppentry.com) Programming Language(Addison-Wesley 1991)或者Stan Lippman的C++(www.cppentry.com) Primer(Addison-Wesley 1991),然后再读这本书,效果可能会更好。

这是一本关于思想和技术的书,不是关于细节的。如果你试图了解怎样用虚基类实现向后翻腾两周半,就请到别处去找吧。这里所能找到的是许多等待你去阅读分析的代码。请试一试这些范例。根据我们的课堂经验,想办法使这些程序运行起来,然后加以改进,能够很好地巩固你的理解。至于那些更愿意从分析代码开始学习的人,我们也从本书中挑选了一些范例,放在ftp.aw.com的目录cseng/authors/koenig/ruminations下,可以匿名登录获取。

如果你已经对C++(www.cppentry.com)有所了解,那么本书不仅能让你过一把瘾,而且能对你有所启示。这也是你应该阅读本书的第二个原因。我的意图并不是教C++(www.cppentry.com)本身,而是想告诉你用C++(www.cppentry.com)编程(www.cppentry.com)时怎样进行思考,以及如何思考问题并用C++(www.cppentry.com)表述解决方案。知识可以通过系统学习获取,智慧则不能。

组织

就专栏来说,我尽力使每期文章都独立成章,但我相信,对于结集来说,如果能根据概念进行编排,将更易于阅读,也更有趣味。因此,本书划分为6篇。

第一篇是对主题的扩展介绍,这些主题将遍布本书的其余部分中。本部分中没有太多的代码,但是所展现的有关抽象和务实的基本思想贯穿本书,更重要的是,这些思想渗透了C++(www.cppentry.com)设计原则和应用策略。

第二篇着眼于继承和面向对象编程(www.cppentry.com),大多数人都认为这些是C++(www.cppentry.com)中最重要的思想。你将知道继承的重要性何在,它能做什么。你还会知道为什么将继承对用户隐藏起来是有益的,以及什么时候要避免继承。

第三篇探索模板技术,我认为这才是C++(www.cppentry.com)里最重要的思想。我之所以这样认为,是因为这些模板提供了一种特别的强大的抽象机制。它们不仅可以构造对所包含的对象类型一无所知的容器,还可以建立远远超出类型范畴的泛型抽象。

继承和模板之所以重要的另一个原因是,它们能够扩展C++(www.cppentry.com),而不必等待(或者雇佣)人去开发新的语言和编译器。进行扩展的方法之一就是通过类库。第四篇谈到了库——包括库的设计和使用。

对基础有了很好的理解以后,我们可以学习第五篇中的一些特殊编程(www.cppentry.com)技术了。在这部分,你可以知道如何把类紧密地组合在一起,或者把它们尽可能地分离开。

最后,在第六篇,我们将返回头来对本书所涉及到的内容做一个回顾。

编译和编辑

这些经年累月写出来的文章有一个缺陷,就是它们通常都没有用到语言的现有特性。这就导致了一个问题:我们是应该在C++(www.cppentry.com)标准尚未最终定稿的时候,假装ISO C++(www.cppentry.com)已经成熟了,然后重写这些专栏,还是维持古迹,保留老掉牙的过时风格呢?

还有许多这样的问题,我们选择了折中。对那些原来的栏目有错的地方——无论是由于后来语言规则的变化而导致的错误,还是由于我们看待事物的方式改变而导致的错误——我们都做了修正。一个很普遍的例子就是对const的使用,自从const加入到语言中以来,它的重要性就在我们的意识中日益加强。

另一方面,例如,尽管标准委员会已经接受bool作为内建数据类型,这里大量的范例还是使用int来表示真或者假的值。这是因为这些专栏文章早在这之前就完成了,使用int作为真、假值还将继续有效,而且要使绝大多数编译器支持bool还需要一些年头。

致谢

除了在JOOP、C++(www.cppentry.com) Report、C++(www.cppentry.com) Journal中发表我们的观点外,我们还在许多地方通过发表讲演(和听取学生的意见)来对它们进行提炼。尤其值得感谢的是Usenix Association和SIGS Publications举办的会议,以及JOOP和C++(www.cppentry.com) Report的发行人。另外,在Western Institute in Computer Science的赞助下,我们俩在斯坦福大学讲授过多次单周课程,在贝尔实验室我们为声学研究实验室和网络服务研究实验室的成员讲过课。还有Dag Brück曾为我们在瑞典组织了一系列的课程和讲座。Dag Brück当时在朗德理工学院自动控制系任教,现在在Dynasim AB。

我们也非常感谢那些阅读过本书草稿以及那些专栏并对它们发表意见的人:Dag Brück、Jim Coplien、Tony Hansen、Bill Hopkins、Brian Kernighan(他曾笔不离手地认真阅读了两遍)、Stan Lippman、Rob Murray、George Otto和Bjarne Stroustrup。

如果没有以下人员的帮助,这些专栏永远也成不了书。他们是Deborah Lafferty、Loren Stevens、Addison-Welsey的Tom Stone以及本书编辑Lyn Dupré。

我们特别感谢AT&T开通的经理们,是他们使得编写这些专栏并编辑成书成为可能。他们是Dave Belanger、Ron Brachman、Jim Finucane、Sandy Fraser、Wayne Hunt、Brian Kernighan、Rob Murray、Ravi Sethi、Bjarne Stroustrup和Eric Sumner。

Andrew Koenig

Barbara Moo

新泽西州吉列

1996年4月

【责任编辑:杜书 TEL:(010)68476606】

回书目   上一节   下一节

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C++沉思录 目录 下一篇2.2.1 有些抽象不是语言的一部分

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: