ANSI-C面向对象编程翻译-序言

来源:互联网 发布:做软件开发 编辑:程序博客网 时间:2024/05/18 13:31

版权所有,转载请注明出处。本文地址:http://blog.csdn.net/SerenityMoon/archive/2010/11/21/6025498.aspx

 

译者序:

 

我刚刚做出了一个艰难的决定,我决定翻译这本《ANSI-C面向对象编程》。这本书是一位刚刚离职的技术狂同事推荐给我的,细看了一点发现这是一本非常棒的书。但是苦于本人英语不佳,从网上又没有搜到中文译本,于是我决定翻译它,方便我自己的阅读,也提供给诸位爱好编程的技术狂人们。

C语言虽然是一门结构化的语言,但是它是一个非常有技巧的语言,用C可以写出非常优美、非常具有艺术性的代码来。C++脱胎于C,虽然是一门面向对象的语言,但是我不得不说,它的确是一门非常糟糕的语言,它的标准复杂到目前没有任何一款编译器支持C++的所有特性,而且不同的编译器甚至是同一款编译器的不同版本,对C++代码的理解是不一样的。由于多继承的引入,虽然C++是面向对象的,但是你需要比C更加地了解底层才能在胜任多继承情况下C++代码的调试。

这本书从另一个角度去理解C,去看C是如何实现面向对象的。技术之外,我也更想去思考一下我们与老外思想上合技术上的差距,以及造成这种差距的原因。

本人能力有限,翻译中难免有错误的地方,有感兴趣的童鞋希望不吝指摘。今天先翻译了序言,以后会定期更新。由于工作的原因,我不可能投入太大的精力到本书的翻译,预计每一至两周翻译一章。英文原本的下载地址是http://www.planetpdf.com/codecuts/pdfs/ooc.pdf

2010年11月21日于沈阳

 

目录:

 

-序

-内容

-1 抽象数据类型

-2 动态连接

-3 编程悟性Programming Savvy

-4 继承

-5 编程悟性Programming Savvy

-6 类的层次结构

-7 ooc 预处理器

-8 动态类型检测Dynamic Type Checking

-9 静态构造Static Construction

-10 委托

-11 类方法

-12 持久对象

-13 异常

-14 递进消息Forwarding Messages

-A ANSI-C 编程暗示Programming Hints

-B ooc 预处理器Preprocessor

-C 手册

-参考书目

 

 

序:

 

    没有能解决掉所有问题的编程技术。

    没有能只产生正确结果的编程语言。

    没有每个项目都该从头写的程序员。

    面向对象编程已经出现了十多年,它目前仍是解决问题的灵丹妙药。本质上,除了接受了二十多年来的一些好的编程法则外并没有什么新的东西带给我们。C++是一门新的语言因为它是面向对象的,如果你不想使用或者不知道如何使用那么你不需要使用它,因为普通的C就可以实现面向对象。虽然子程序的思想和计算机一样久远并且好的程序员总是随身携带着他们的工具和库,但是只有面向对象才可以在不同项目间实现代码复用。

    这本书不准备推崇面向对象或者批评传统的方式。我们准备以ANSI-C来发掘如何实现面向对象,有哪些技术,为什么这些技术能帮我们解决更大的问题,如何利用它的一般性以及更早的捕获异常。虽然我们会接触很多术语,如类、继承、实例、连接、方法、对象、多态等等,但是我们将会剥去其魔幻的外表,使用我们熟悉的事物来表述他们。

    我非常有意思的发现了ANSI-C其实是一门完全的面向对象的语言。如果想要和我分享这份乐趣你需要非常熟悉它,至少也要对结构、指针、原型和函数指针。通过这本书,你将遇到一个新语言”——按照Orwell和韦氏词典对一门语言的解释,语言的设计目的就是缩减思维的广度——而我会尽力证明,它不仅仅汇合了所有的那些你想汇聚到一起的良好的编程原则。结果,你可以成为一个更熟练的ANSI-C程序员。

前六章建立ANSI-C做面向对象编程的基础。我们从一个抽象数据类型的信息隐藏技术开始,然后加入基于动态连接的通用函数,再通过谨慎地扩充结构来继承代码。最后,我们将上述所有放进一个类树中,来使代码更容易地维护。

    编程需要规范。良好的编程更需要很多的规范、众多原则和标准以及确保正确无误的防范措施。程序员使用工具,而优秀的程序员则制作工具来一劳永逸地处理那些重复的工作。用ANSI-C的面向对象的编程需要相当大量的不变的代码——名称可能变化但结构不变。因此,在第7章里我们搭建一个小小的预处理器,用来创建所需要的模板。它很像是另一个方言式面向对象的语言。但是它不应该这样被看待,它剔除方言中枯燥无味的东西,让我们专注于用更好的技术解决问题的创新。OOC有非常好的可塑性:我们创造了它,了解它,能够改变它,而且它可以如我们所愿的写ANSI-C代码。

    余下章节继续深入讨论我们的技术。第8章加入动态类型检测来实现错误的早期捕获。第9章讲我们通过使用自动初始化来防止另一类软件缺陷。第10章引入委托代理,说明类和回调函数如何协作,比如去简化标准主程序的生成这样的常规任务。其他章节专注于用类方法来堵塞内存泄漏,用一致的方法来存储和加载结构数据,和通过嵌套异常处理系统的规范错误的恢复。

    在最后一章,我们突破ANSI-C的限制,做了一个时髦的鼠标操作的计算器——先是针对curses然后是针对XWindow系统。这个例子极好地表明:即使是不得不应对外部库和类树的风格,通过对象和类我们已然可以非常精致地进行设计和实现。

    每一章都有总结,这些总结中我试图给随意浏览的读者一个梗概以及它对此后章节的重要性。大多数的章节都有练习题,不过他们并不是正式的阐明性文字,因为我坚定的相信读者应当自己实践。由于该技术是我们从无到有建立起来的,所以尽管有些例子应该能够从中获益,但是我避免建立和使用庞大的类库。如果你想要真正地理解面向对象的编程,首先掌握该技术并且在代码设计阶段考虑你的选择更为重要;而开发中依赖使用他人的库应当在这稍后一点。

    本书的一个重要部分是所附源码软盘——其上有一个DOS文件系统,包括一个用来按照章节顺序来创建源码的简单shell脚本。

还有一个ReadMe文件——在你执行make命令前要先查阅这个文件。使用一个工具如diff并且追踪根类和ooc报告在后续章节的演化也是非常有帮助的。

    这里展现的技术源自我对C++的失望。当时我需要面向对象技术实现一个交互式编程语言,但我意识到无法用C++建立一个可移植的东西来。于是我转向我所了解的ANSI-C,并且我完全能够做到要做的事情。我将这个些告诉组里的几个人,然后他们用同样的方法完成了他们的工作。如果不是布赖恩·克尼翰(Brian Kernighan)以及我的出版商翰斯·尼科拉斯(Hans-Joachim Niclas)、约翰·维特(John Wait)鼓励我出版这些笔记(在适当的时候全新的展现一下),这个事情很可能就止于此,我的注解也就是一时的时尚了。我感谢他们和所有帮助并且经历本书不断完善的人。最后但是并非不重要的,感谢我的家庭——面向对象当然绝不可能代替餐桌上的面包。

 

 

199310月于Hollage     阿塞尔-托彼亚斯·斯莱内尔(Axel-Tobias Schreiner