http://hubdog.csdn.net/UpdateList/ul20030102.htm
三味书斋――delphi篇
主持人:xingzhou(行舟),《程序员》杂志社技术编辑
嘉 宾:grhunter(韩磊):中文开发在线(www.CoDelphi.com)创始人
Hubdog(陈省):《delphi深度探索》作者
Pascal和Object Pascal
xingzhou:李维的《Borland传奇》系列文章,看似语言平静,但是其蕴含的Borland情结让许多程序员为之击节。Borland在C++开发工具市场的溃败让人为之伤感,但是Borland的反击策略让人感到意外,因为他们的武器居然是曾经被自己所抛弃的Pascal,早期的Turbo Pascal虽然红极一时,但是Borland还是用自己的Turbo C把Turbo Pascal送到了博物馆里。
grhunter:不过,也有业界知名人士认为,采用Pascal正是delphi成功的一个原因。因为虽然Pascal语言有ANSI标准,但放眼世界大概只剩Borland一家编译器厂商还支持Pascal,既是唯一,Borland也就拥有绝对的领导优势。正因为对于这套语言的先进技术与主导地位,使delphi几乎等于一套全新的语言,可以纵情发挥,而它也的确用极其优雅简洁的风格展现出不同于其它开发工具的格局。
Hubdog:delphi的真正精髓正是Object Pascal。Borland在标准的面向过程的Pascal语言的基础上融入了现代的面向对象的软件开发思想,让这门“最优雅”的编程语言焕发出新的生命。
xingzhou:使用Pascal作为元语言的一个好处是没有兼容包袱,因为ANSI标准实际上等同于Borland自己的标准。这一点好处从C++ Builder的缺陷上可以反证,为了兼容各种C++元素――包括Borland以前的OWL、MFC、ANSI标准等等,使得它的编译速度奇慢无比,这个缺陷也成为了C++ Builder最大的垢病。
grhunter:是啊,MS VC++占有C++语言开发平台市场的绝对优势,C++ Builder等产品要兼容它也是无奈之举。
Hubdog:虽然标准Pascal同Object Pascal在很多方面是相通的,但是面向对象和面向过程是两种差别很大的开发思想。如果最开始学的是标准Pascal,当面向过程的思想在你脑海中根深蒂固后,你会觉得面向对象的思想很难理解,至少我曾经经历过这样一个痛苦的过程。因此我觉得如果一个从来没有学过标准Pascal的人,对于Object Pascal中OOP思想的理解,反而要更加自然。因此,我的建议是跳过标准Pascal,直接学习Object Pascal。
xingzhou:关于面向过程和面向对象,我觉得不能简单地区分谁好谁坏,或者谁先进谁落后。我的理解是面向对象是开发的一种方法论,而面向过程才是软件开发的目的,有了OOP的概念后,让我们在软件开发中多了一种新的、很好的选择。如果非要作个高低、上下比较,反而让人很糊涂。
不过谈到学习Pascal语言,要在市面上找到合适的书恐怕很难了。现在Pascal的书籍难得一见,更别提找到一本专门讲Object Pascal的书了。
Hubdog:其实,学习Object Pascal最权威和最全面的资料应该是随delphi软件分发的在线帮助中的Object Pascal Reference。可惜,由于Borland公司没有微软那样雄厚的财力和人力,迄今为止Object Pascal的帮助还都是纯英文的。但是如果买了正版delphi软件,将获得Borland的Object Pascal的中文翻译手册。
xingzhou:正所谓远在天边、近在眼前啊!
grhunter:阅读这类“语言指南”至少有两个好处:一者虽然内容平铺直叙,但一路看下来,对语言一定会有完整的认识;二来可以对语言本身及编译器特性之间的差异有清楚的了解。新手经常分不清楚什么是语言本身的问题,什么是编译器实现的问题,什么是支撑平台特有的问题。
Hubdog:这本手册不是很厚,但是重要的主题一个都不少,从语言最基本的要素讲起,数据类型、变量、常数、函数过程、类、标准IO、动态连接库和包、内存管理、内嵌汇编语言、对象接口等全都提到了,甚至还包含了一张Object Pascal的语法图,唯一的缺点是不像《C++ Primer》那样配有大量详细的例子讲解。
xingzhou:善用软件自带的文档的确是个好主意,简单地按下“F1”,就可以在强大的联机帮助系统中迅速得到答案。虽然delphi的帮助系统与庞大的MSDN还难以相比,但也已经足够应付实际情况了。
Hubdog:事实上,其他讲解Object Pascal语法细节的书在国内外基本就没有,即使有一些书稍微涉及,也都是蜻蜓点水而已。不过网上倒是有人翻译了Macro Cantu写的《Essential Pascal》,虽然内容不是很多,但是有不少精妙的讲解,值得一看。
xingzhou:我在网上搜了一下,《Essential Pascal》中外版的下载地点还真不少,如:http://www.21url.net/delphi/Essential_Pascal.chm。
Hubdog:Ray Liscbner的《delphi技术手册》一书中也有一部分关于语言本身的内容,讲得不错,而且电力出版社翻译得也不错,不过奇怪的是这样一本在2001年全球销量第一的delphi经典书在国内卖的并不好,让我很是奇怪。我猜可能是这本书的例子太少了,因此很多人觉得可操作性不强吧?
系统介绍类:
xingzhou:我本人很少使用delphi,只是由于常用C++ Builder,而C++ Builder的书很少,所以基本上都是参考delphi的图书,毕竟它们有着非常类似的地方。我虽然买了一些delphi书,但是仔细想想,却感到,与C++等其他书相比,很难有几本让大家认为是“经典”的delphi书。
grhunter:正如不可将C++与Microsoft Visual C++混为一谈,我们也不能简单地认为delphi就是Pascal。针对C++而言,可以举出C++ Primer等大部头为例,但是如果将讨论范围仅限于VC++,堪称经典的作品似乎就不多了。其实,在delphi开发界,也有一些著作/作者是大家耳熟能详,甚至是其书必买、非其书必不买的。
xingzhou:但是对于初学者而言,选择适当的书的确是一件令头疼的问题,耗资甚巨但收获不多的情况比比皆是,许多人都在问这个问题:“如何选到一本好的delphi读物呢?”
grhunter:这个问题的答案见仁见智。大致说来,我不怎么买国内作者的作品,甚至于不大买国内翻译的著作。
Hubdog:我也有同感,因为国内有些出版社实在是不爱惜自己的名声。如很多打着delphi入门的招牌的书,上来就讲如何开发数据库程序、如何使用TButton等控件,这导致了很多delphi初学者有一种误解,认为delphi和VB、PB等开发工具差不多,无非就是一种可以用来快速开发数据库应用程序的语言,认为delphi的程序开发就是拖放几个控件,设置一些属性,就OK了,而这是完全错误的认识。
xingzhou:我也注意到许多翻译的书质量不高,一些评价很高的书的中文版广受批评的情况屡见不鲜。
grhunter:不过,国外的delphi类书籍也并非本本优秀,可以说其中多数也是垃圾。建议读者在选购书籍之前,先到这几个地方看看:1、Dr. Bob的网站(www.drbob42.com),其中有一些书评,评价中肯。2、delphi Informant Magazine杂志在线版(www.DelphiZine.com)或纸质印刷版,该杂志的书评均出自高手,比较可信。3、Amazon在线书店(www.Amazon.com),如果一本delphi书籍在上面获得比较高的评价(包括编辑评价和读者评价),那么,这本书绝对值得购买。
xingzhou:根据权威调查结果,使用Delph的程序员在中国超过一半。在CSDN网站,delphi也是人气最旺的论坛之一。但是,我注意到经常有人提很简单的问题,而且提这些问题的人中,有些其实很有经验了。我想这是他们的知识结构有漏洞的原因,或者说,学习不系统所招致。
grhunter:系统学习delphi,建议看Charlie Calvart的delphi x Unleashed(中文译名《delphi x编程技术内幕》)系列,但是似乎到第四版就没有继续了。该系列书胜在文笔轻松,但并不因轻松而失之流俗,常能“于无声处听惊雷”、在读者最不以为意之处着意题点,令人顿感程序设计的美妙与深奥。
xingzhou:我手头有一本delphi的大块头:《delphi 5编程开发指南》。我觉得很不错,比较全面,我最爱看的是它的那些专题。现在,Amazon已经在卖6.0版了。
Hubdog:《Delphi5程序员开发指南》的作者都有丰富的开发经验,其中像Chalies Calvert和Xavier等人还曾经在Borland公司任职,因此写的这几本书都非常有实战性,很到位。而且因为这几本书所覆盖的知识点很全面,非常适合放在案头,以备平时查阅。
grhunter:这一系列书最大的特点就是注重技术的具体应用,针对读者在开发中容易遇到的问题、作较深入的讲解,所以实用性相当强。
Hubdog:Macro Cantu的《delphi从入门到精通》(Masteringdelphi x)系列书也很不错,国内引进了For Delphi4、5、6。最近我看了《Delphi6从入门到精通》英文版,感觉全书的水平比以前的版本拔高了不少,特别是对Delphi6的新技术跟踪非常紧,改写了大量的内容,增加了对XML和COM+,Action增强,CLX和数据库方面的内容等,看起来非常过瘾,
grhunter:这本书的大卖点是Masteringdelphi x的作者Marco Cantu对Object Pascal理解甚为透彻,且能紧跟技术发展、针对delphi的每一新版本增补相应的章节。
Hubdog:的确,这本书中关于Object Pascal的讲解应该说是这几本书中最好的,特别是它对接口和包的讲解提供了一个非常精彩的例子,展现了如何利用接口和包实现类似于Borland的Open Tools Api的插件技术,而且从delphi的未来技术发展趋势来看,接口技术模仿多重继承的方式将会在很大程度上替代以前的单根深度继承的VCL框架,这部分的内容值得仔细琢磨。一个好消息是这本书中文版已经由电子工业出版社引进到了国内,不过还有一个坏消息是在China-pub上看到书评认为翻译的好像一般,不是让人很满意,所以我想英文好的人还是看英文版的比较好。
grhunter:这几书的共同特点是分主题进行讨论,附有丰富有趣的例子,而且都是大百科全书类的书,动辄上千页。所以看这几本书如果不配合实战练习就失去意义了,所以拿到书后我觉得一定要仔细看原书所配的源程序,运行书中的例程,对照书中相应章节的说明,这样可以很快的上手。
Hubdog:此外这三本书的程度又稍微有些区别,相对来说,Xavier等人写的《delphi程序员开发指南》比较基础,基本上是基于VCL的开发,而且各个版本之间内容变化的比较少,最新的D6的版本同D5的版本相比,我大概看了一下,只是增加了Interbase Express和Decision Cube的内容。而Chalies的《Delphi4技术内幕》相对稍微深一些,很多例子都不是基于VCL的,而是直接调用Windows API来实现的,刚读的时候可能会有些困难,但是这无疑会帮助读者更好的理解VCL的精彩实现。此外,Chalies对于DirectX比较精通,因此他的书是唯一一本包含使用delphi开发DirectX程序内容的书,另外《技术内幕》这本书的DCOM和CORBA部分也很精彩,是最早论述分布式三层开发的书,即便现在来看,也不算过时。
grhunter:系统学习delphi的书另外还有Todd Miller等的Using delphi x(中文译名《delphi x开发使用手册》)系列,作者本人就是delphi开发组成员,对Object Pascal和delphi都有深刻的认识,讲解起来也驾轻就熟,有助于对delphi开发的全面认识。
参考手册类:
grhunter:推荐两本,Clay Shannon的Developer’s Guide to delphi Trouble-shooting(中文译名《delphi开发人员排错指南》)和Ray Lischner的delphi in a Nutshell(中文译名《delphi技术手册》)。Developer’s Guide to delphi Trouble-shooting将程序编写和编译过程中可能遇到的种种警告、错误信息列出,加以详细解释。既有错误可能原因的描述,又给出解决问题的方法,是作者集多年开发经验的一部心血之作。delphi in a Nutshell对VCL体系、RTTI、多线程等内容的讲解,简洁明了、直指人心,下下都挠到痒处。
Hubdog:对于VCL函数库,我想没有哪一本书要比《delphi技术手册》更详细和全面了,作者Ray Liscbner用了整整将近400页的篇幅详细全面介绍了VCL的函数、过程、变量、关键字等,并且将很多晦涩难于理解的东西讲的非常清晰透彻。唯一缺憾就是,书中并没有附上函数过程的索引,查起来不是那么方便。说到Ray Liscbner,此人可是我的偶像,写过多本畅销的delphi书,包括《Secret of Delphi2》和《Hidden Path of delphi》其中Hidden Path of delphi是迄今为止国外出版的唯一一本讨论Open Tools Api的书,讲解了很多Borland从来没有公开的秘密,可惜这两本书没有被引进到中国。Ray Liscbner最近正在为Oreilly写坚果系列的另一本书《C++ in a nutshell》,他还经常在Borland的Open Tools Api和Kylix新闻组中出没,非常热心,还回答过我好几个问题呢。
grhunter:这本书确是delphi开发者手边必备的读物。
主题研究类
xingzhou:在Windows平台上编程,合理使用它提供的API进行编程是一个永恒的话题,这一点对于delphi来说也不例外,前面推荐的《delphi程序员开发指南》就包含了不少如何利用API进行编程的内容。
Hubdog:国外的Wordware出版社出版了一系列delphi使用Windows API编程的书――《The Tomes of delphi》系列,其中最好的两本是《Windows Core API开发》和《Windows Graphical API开发》。这一系列书的特点就是每个API都配合有一个详细的例子来说明,并且对API的每个参数都有详尽的说明,每本书平均将解了将近300个例子,在编程中遇到API不会调用,只要翻看这本书,一定能找到答案。其中图像API那本书我尤其喜欢,因为该书的例子展现了很多图形特效。在读完书中精彩例子后,再看看这些精美的特效,也是一种额外的享受。遗憾的是这些书也没有引进到中国
grhunter:这种类型的书在国内倒是也出了一些,但大多都是将网上delphi爱好者翻译的技巧东拼西凑而成的大杂烩,非常零碎,而且并不能保证一定可以运行。我不推荐大家购买这类书。
Hubdog:不过陈宽达写的《delphi深度历险》一书算是一个例外,内容比较丰富和深入,语言也继承了台湾作家一贯的风趣幽默的特点,读起来轻松愉快。
xingzhou:这本书名副其实地做到了深度的历险,但我觉得其内容过于偏向自娱一类,而对于系统级、功能应用级的API涉及较少。
Hubdog:我也觉得该书不够系统,这可能是由于作者写作此书还在上学,因此兴趣比较分散的原因吧?
grhunter:“深度历险”大概因为是作者第一部书的缘故,笔下拘束,缺乏大家风范。
xingzhou:在Windows下,掌握COM编程也是重要的一环。
grhunter:Eric Harmon的delphi COM Programming(中文译名《delphi COM深入编程》),就delphi中的COM编程技术作了大致的介绍,例子有趣,使人不致因COM技术的晦涩深奥而顿生退意。
Hubdog:这本书的特点是堆砌了大量的源代码,但是我感觉缺乏理论性和系统性的描述,让人只是知其然而不知道所以然。所以很多delphi开发COM时,还要去借鉴Don Box的《COM本质论》和经典的《Inside OLE2》这类C语言的书。
xingzhou:Hubdog的大作《delphi深度探索》似乎是国内唯一专门讨论用delphi进行COM开发的书。
grhunter:呵呵,不客气了,Hubdog的“深度探索”体例太过零碎。
Hubdog:是的,我对于COM的介绍比较侧重于应用。这主要因为我写此书时,还在学校念书,兴趣广泛,因此这本书的内容也就比较零碎,理论性不强,导致很多人看了之后,都觉得太深,看不懂什么意思,我事后想起来也懊悔当初没有多写些总结概括性的内容,可惜木已成舟,于事无补了。
xingzhou:谈到delphi开发,数据库程序开发无疑是delphi最重要的一个应用领域,这也是delphi成功的基础之一,它不但彻底打败了Power Builder,在与VB的较量中也占据了上风。
Hubdog:数据库开发方面进阶的好书,我最早看到的是李维写的《Delphi3实战》一书,国内的版本名为《Delphi3从入门到精通》,是宇航出版社出的。严格的说,这本书并不是一本纯粹的讲数据库开发的书,全书中只有一半是同数据库开发相关的,但是难得的是这本书对我们最常用的数据库组件的使用效率和使用场合做了深入的分析,其中对TTable、TQuery和TStoredProc组件使用的比较,TDataBase的属性设定,Lookup和Locate等查找方法的效率比较,同时结合作者丰富的实际案例的经验,一针见血地指出了很多数据库系统效率低下的根本原因,读后让人对如何编写高效的数据库程序有一种豁然开朗的感觉。值得一提是,这本书还是最早介绍三层开发的书,过去了这么多年,在《Delphi4技术内幕》等书早已被我以5折卖掉的今天,它依然在我的书架上占有一席之地。
xingzhou:我使用ADO编程也是从李维的书开始学习的,记得是《delphi 5.x ADO/MTS/COM+高级程序设计篇》。
grhunter:李维的分布式多层系统系列(包括《delphi 5.x分布式多层应用系统篇》、《delphi 5.x分布式多层应用电子商务篇》、《delphi 5.x ADO/MTS/COM+高级程序设计篇》和《delphi 6/Kylix2 SOAP/Web Servic程序设计篇》等),是delphi多层应用程序设计不可多得的专门读物,笔法引人入胜、在中文类delphi读物中堪称佼佼者。。
Hubdog:李维无疑是分布式数据库开发书籍中的精品,这些书涵盖了用Delphi5开发分布式多层应用程序涉及的必要技术,从讨论如何使用delphi建立分布式多层应用系统开始,一直深入剖析到如何开发高效率的多层应用系统,让你对于delphi的MIDAS和分布式对象技术了如指掌。凡是刚开始使用MIDAS进行开发人都会遇到系统效率极其低下和DCOM配置的恼人问题,李维在这几本书中愿意将他开发的宝贵经验出版,与大家共享,是值得我们庆幸的。
grhunter:但读者应该认识到,该系列图书介绍的多层分布应用,大体上是基于Borland自己的平台,且例子太过简单,直接用于实战后患无穷。不过,假使读者抱着“了解多层分布式应用”的心态去阅读,则会得益匪浅,关键在于不可尽信书中所言。
xingzhou:李维的书属于尝鲜一类,基本上都是介绍Borland的新产品、新技术,作品就好比Borland的科普读物,用来入门再好不过,但是有了一定的工作经验后,就需要自己摸索了。正所谓“师傅领进门,修行在自身”。
Hubdog:另外,这些书介绍的是delphi自带的MIDAS三层开发架构,更在大型系统中,像BEA的Tuxedo和Weblogic和IBM的Cics,MQ和WebSphere等中间件一统江山,即便在中小规模的系统中,MIDAS也远不是主流产品,实际成功的案例很少,而与之相比微软自己的COM+和Asta等第三方的中间件产品在稳定性和简便性上无疑是要占据上风的。
Hubdog:至于说大陆相关的书籍,虽然出了很多,但是苛刻的说,没有什么好书,大部分都是简单将delphi在线帮助中关于数据库开发部分的文档翻译过来而已。虽然有些实例开发方面的书,但是在深度上都无法同李维的书相比。
grhunter:再推荐几本其他的书。Keith Wood的delphi Developer’s Guide to XML,是目前唯一一本全面介绍XML技术在delphi中应用的书籍,该书组织结构(从XML规范、DOM规范到各厂商对DOM/SAX的API实现到真实世界中的具体应用)得当,具有相当强的通用性与指导性。作者长期为delphi Informant Magazine撰稿,文笔质朴直白,往往一语中的,废话较少。Alex Fedorov等人的Advanceddelphi Developer's Guide to ADO和Kudzu等人的delphi Developer’s Guide to Communication Programming,是所属专门领域中的典范之作。
Hubdog:李维写的《Delphi6 Soap/Web Service设计篇》对于当前热门的很多技术如Soap, Web Service和UDDI等做了详尽的介绍,对它们的优缺点也做了中肯的评价,对未来的技术发展做了很好的前瞻。但是,目前Web Service还处于一个快速发展的阶段,很多规范还不完善,应用程序也还没有大规模的使用这类技术,因此我觉得这本书比较适合作为技术储备,实际的意义还不是很大。另外这本书对于Soap的基础XML没有太多涉及,也算是美中不足吧。
总结
grhunter:川菜以博采诸家所长而终独树一帜,delphi开发者的阅读面同样也不宜太过狭窄。我想,除delphi书籍之外,以下三类书籍,也应该有所涉猎:一是Windows系统原理和API参考,一是软件工程,一是建模和OO(面向对象)原理。更高明的读者,还可以从哲学和其它一切书籍中体悟到程序的真谛。
Hubdog:总的来说,delphi的书籍到目前为止都还是比较偏重于应用。
grhunter:delphi能在微软开发工具狂轰滥炸之下屹立不倒,其原因有二,一曰界面亲切,二曰重在应用。合二为一,就是所谓RAD(Rapid Application Development,快速应用开发)。自然 ,delphi相关书籍也处处凸显出“注重实用”的特点。
xingzhou:上面介绍的经典书全是海外版,与C++等语言的状况如同一辙,其原因值得深究。
grhunter:这说明国内缺少大家,缺乏经验丰富、学识深攫的高手
Hubdog:许多经典的外版书引进后,读者反映不好,说明国内的翻译水平也亟待提高。
grhunter:是啊,如Don Taylor在与另外两位作者合作的delphi Programming Explorer一书的最后部分中,甚至采用侦探小说的形式来描述delphi数据库应用开发技术,而且其情节之曲折、文笔之用心,丝毫不亚于大部分“真正的”侦探小说。Marco Cantu、Steve Teixeira(及其写作小组)、Charlie Calvart等人的著作,可以一再修订出版,而每一版本的推出,都受到delphi开发者的踊跃追捧,这与作者彰显的文字风格也不无关系。遗憾的是至今几乎尚未见到过一部真正能够完全展现原著风貌的中文译本。一本区区几百页的书,译者多达数人以至十数人,其译作质量可想而知。连基本的术语、语法逻辑都要弄错,更谈不上什么文字的风格了。
xingzhou:情况相比前几年已改善不少,希望出版社能真正重视这方面的问题,让经典书籍真正成为精品。