《Inside 深入核心VCL架构剖析》
Delphi 教程 系列书籍 (036) 《Inside 深入核心VCL架构剖析》 网友(邦)整理 EMail: shuaihj@163.com
下载地址:
Part1 Part2 Part3 Part4 Part5 附书源码
- 作者: 李维
- 丛书名: 李维作品系列
- 出版社:电子工业出版社
- ISBN:7505394894
- 上架时间:2003-12-30
- 出版日期:2003 年12月
- 开本:16开
- 页码:706
- 版次:1-1
内容简介
本书包括10个章节,从最基础的Windows操作系统原理讲起,回顾Windows Framework和VCL Framework的发展历史,介绍Object Pascal在00方面对VCL的支持,描述VCL Framework与Windows消息体系的集成,列举VCL组件与Windows组件的结合,探究基于接口的程序设计,指明VCL Framework设计COM架构的方法,探讨VCL Framework的永续储存,还以一章的篇幅专门讨论了VCL Framework中的设计模式,最后对下一代VCL Framework——VCL.NET作了前瞻式的研究。单看目录就可以知道,这本书不但涉及VCL Framework本身,还旁及Windows Framework、COM、设计模式等相关技术。读者从中获得的,也不仅只是VCL架构知识,更会在整个阅读和实作过程中极大地拓宽自己的开发眼界,形成在系统设计方面的大局观,追寻大师级的Framework设计思路,提升整体开发素质。
序言
Delphi已经推出了7个版本,在未来也会持续的推出新的版本,许多人可能也已经使用Delphi许多年并且开发了各种不同的应用系统,但是不管我们使用了Delphi多久,我们真的已经了解Delphi,而且发挥Delphi十成的功能了吗?
Delphi 1从推出以来,在每一个版本都加入了许多新的功能,融合的软件技术也一直在增加之中。从RAD、Flat-File数据库功能、VCL组件,一直到主从架构、Web、COM/COM+、MIDAS、多层分布式应用系统,到现在的SOAP/Web Service、dbExpress,DataSnap等技术,程序员们不断地学习和使用新的技术,以便用来开发新的应用系统或是增加程序员个人的附加价值,以求在信息领域能够更上一层楼。不过这些技术大都是属于“应用类”。但是在这些技术之外Delphi亦拥有优美的Object Pascal程序语言,以及有若宝山般的VCL Framework。Object Pascal提供了典雅面向对象程序语言的功能以及Pascal传统的严谨语法,值得程序员藉由Object Pascal学习面向对象的观念和技巧。而VCL Framework更蕴藏了大量的软件技术宝藏,它充分地使用了Object Pascal的特性,巧妙的软件实作技巧,深入的语言/编译器技术,动态对象生命周期的管理以及结合设计样例(Design Pattern),是许多Borland工程师多年软件智能和技巧的结晶。
VCL Framework这座宝藏公平地呈现在每一个Delphi程序员之前这么多年,然而大多数的我们,很久以来大都只是撷取VCL Framework表面之一角就可以快速使用Delphi开发和完成我们的应用系统,只有极少数的程序员真的尝试开启VCL Framework宝藏的大门,进入另外一个宏伟的软件工程大殿,接受从未经历过的高等软件技术的洗礼。因此,长久以来VCL的深度知识也被封锁在少数程序员的圈子中,这些极为有用的软件技巧自然也只被少数程序员所拥有。
在笔者工作的这么多年中也不时地追踪VCL Framework,因此学习到许多宝贵的软件知识,也解决了许多问题。笔者认识的许多朋友也或多或少都研究过VCL Framework,因此许多人也成为佼佼者,在工作上表现非常杰出。笔者和这些朋友都知道一个要诀,那就是当有解不开的麻烦时看看VCL Framework大概就可以解决了,笔者也经常在网络上看到一些高手说学Delphi根本不需要看什么书籍,只要看看Delphi的在线辅助和VCL Framework源程序就可以解决所有的问题。虽然笔者不绝对赞成这句话,因为在属于Delphi“应用层”的技术方面仍然是需要经验才能够运用得很好,否则只是属于会用而已。但是笔者赞成在偏向Window程序设计、系统功能方面,如果Delphi程序员能够了解VCL Framework,那么的确是非常容易解决这些问题的。不过前提是Delphi程序员必须能够掌握VCL Framework,简单地说,也就是必须看得懂VCL Framework的源程序并且掌握其中的设计绝窍。
然而我们必须承认,在这么多的Delphi程序员中仍然只有少数人拥有掌握VCL Framework的优势。这是为什么呢?因为要了解VCL Framework,需要许多基础的知识。如果没有其他人或是书籍来引导,那么就只有那些在软件开发上非常有经验的人才能够一窥全貌。
数年前笔者就知道当时Delphi Informant的主编表达有兴趣撰写一本Inside VCL书籍,准备剖析VCL的架构。当时笔者非常期待这本书,因为当时笔者也想了解VCL Framework以更上一层楼。不过笔者等了又等,到了现在仍然不见那本书的出现。为什么在Delphi领域中一直没有讨论VCL Framework的书籍出现呢?这是有许多原因的,最重要的两项因素可能是一来这种书籍不易撰写,需要作者投入极大的心力和时间,此外也考验了作者本身在软件方面的素养,不是一般作者愿意或是能够撰写的。二来可能是因为出版商对于这种书籍的市场销量有考量,这种属于进阶技术的书籍通常需要比出版入门书籍考量得更多。撰写VCL Framework另外的挑战是:VCL Framework仍然在快速的演进之中,不时地加入新的技术,架构甚至是移植到新的平台,不像其它的一些Framework几乎是处于停止发展的状态。因此,写这种书的作者必须不时地重新检视已经撰写的内容,看看VCL Framework是否又发生了变化?这对于书籍的作者而言是非常严峻的挑战。
笔者许多年来一直在写一些有关VCL的文章,但是这些内容从没有发表过,这是因为笔者在苦等不到Delphi Informant主编的书籍之后,便不自量力地想自己写一本有关VCL的书籍,但是由于笔者本人时间上的限制以及出版商的考量,因此后来就将计划暂搁了。直到最近,大陆的数家出版社接连都表达了出版此书的意愿之后,笔者才郑重考虑想要完成这本书,至此笔者开始认真地设计和收集这本书的内容。笔者知道,要完成这本书是一条漫漫长路,不过笔者决定一点一滴地试着完成这本书,希望2003年能够让这本计划多年的书籍问市,以达成笔者多年的心愿。
读者阅读本书时,需要知道本书并不是讨论特定的应用技术,也不会教导读者如何开发特定的应用系统。本书主要讨论的内容是VCL Framework设计和实作的技术,这包含了为什么需要VCL Framework?VCL Framework的设计思想,VCL Framework的设计架构,VCL Framework的实作技术,VCL Framework的演进,VCL Framework使用的软件技术,VCL Framework使用和结合的Design Pattern以及VCL Framework的未来:VCL.NET。在这些讨论的内容中读者将可充分看到VCL Framework的各种实作技巧,此外笔者也会试着和读者一起探讨许多VCL Framework设计背后的理论和原因,试着让读者了解在设计一个Framework时牵涉到的东西。让读者不但能够知道How,也知道Why。当读者经过了VCL Framework的洗礼之后,相信在软件思想和实作方面将有脱胎换骨的感觉。
笔者要谢谢所有帮助本书出版的朋友,没有这些朋友的催促,这本书可能永无面市的机会。当然更要谢谢许多读者多年来对于笔者的支持,最后希望本书的内容真的能够帮助读者进入VCL Framework的软件知识宝山。在读者能够从其中学习到受用无穷的软件技术之后,这些软件技术在读者未来于信息领域生涯的发展中将呈现出其无价的珍贵。更重要的是,藉由此一窥VCL Framework的内部实作秘密,将会让读者至少在思想上能够拉近和世界一流软件工程师的距离,当然读者如果在日常的实作中能够善用学习到的VCL Framework软件技术,那么也就表明读者正朝向一流软件人才的方向努力奋进。
李维 2003/10/8于台北,新店
目录
第1 回到从前
1-1 角色扮演
1-1-1 如何设计和驱动多任务执行环境
1-1-2 是的,这就是Windows的基本运作原理
1-2 回到从前!典型的Windows应用程序
1-3 窗口回调程序设计的缺点
1-4 Windows Framework的诞生和发展
1-5 窗口组件Framework
1-6 结论
2 VCL的诞生和设计原理
2-1 Borland VCL Framework的诞生
2-2 VCL的架构设计
2-3 从无到有——VCL对象生命的成形
2-3-1 Object Pascal的对象模型
2-3-2 从原始内存到对象雏形
2-4 Object Pascal对象服务
2-4-1 对象创建服务
.2-4-2 对象识别服务
2-4-3 对象信息服务
2-5 从原始基本对象到提供基本服务的VCL对象
2-6 VCL对象的释放服务
2-7 类和对象的Metadata-VMT(Virtual Method Table)
2-8 结论
3 面向对象程序语言和Framework
3-1 面向对象程序语言和VCL Framework
3-2 Framework使用面向对象程序语言的设计手法
3-3 神仙棒一挥——让它变成组件吧
3-3-1 VCL Framework的核心组件架构
3-3-2 TComponent类的设计
3-4 这还不够,让它成为Windows控件吧
3-4-1 TControl
3-4-2 封装Windows控件的TWinControl类
3-4-3 不使用Windows Handle的组件封装类
3-4-4 自定义控件类TCustomControl
3-4-5 封装Canvas的类
3-4-6 结合Canvas和TWinControl类
3-5 COMAdmin类的设计和实现
3-5-1 TCOMAdminCatalog类的设计
3-5-2 CoCOMAdminCatalogCollection类的设计
3-5-3 TCOMAdminCatalogObject类的设计
3-6 结论
4 VCL Framework和窗口消息
4-1 窗口消息和VCL Framework
4-1-1 原始的处理方式
4-2 VCL的窗口消息封装机制
4-2-1 从窗口回调函数到面向对象的类方法
4-3 TObject的消息分派服务
4-3-1 窗口消息分类
4-3-2 调用惯例(Calling Convention)
4-3-3 VCL封装类的方法种类
4-3-4 TObject分派消息的原理和流程
4-3-5 VCL消息分派架构
4-4 Delphi窗口应用程控者:TApplication
4-4-1 TApplication对象的创建
4-4-2 TApplication和秘密窗口
4-4-3 TApplication的消息循环
4-5 TApplication创建的主窗体
4-5-1 主窗体的创建流程
4-5-2 Delphi窗体类处理窗口消息的机制
4-6 TApplication的设计思想
4-7 结论
5 VCL组件和窗口控件的结合
5-1 VCL组件的创建和窗口控件的结合
5-1-1 填入跳跃程序区块
5-1-2 VCL Framework统一消息分派函数——StdwndProc
5-2 VCL Framework的自定义消息(Customized Framework Message)
5-3 VCL完整的消息分派流程
5-3-1 TButton类
5-3-2 动态消息和VCL事件处理函数的结合
5-3-3 TForm类
5-3-4 内定窗口消息函数——DefaultHandler
5-4 VCL消息处理设计模式(Design Pattern)
5-4-1 Dispatcher
5-4-2 Broadcasting
5-4-3 利用VCL Framework的消息分配机制
5-4-4 拦截VCL Framework未处理的窗口消息
5-4-5 拦截TObject消息分派的服务
5-4-6 窗口消息流动时间
5-4-7 平均处理消息数目
5-5 结论
6 接口程序设计
6-1 为什么要有接口
6-1-1 接口程序的驱动力
6-2 接口的演进、比较以及Delphi的接口机制
6-2-1 Microsoft COM
6-2-2 Java
6-2-3 C#的接口
6-2-4 Delphi接口设计的发展
6-3 Delphi的接口机制
6-3-1 接口是交互的合约
6-3-2 声明接口
6-3-3 实现和使用接口
6-3-4 接口和对象的生命周期
6-3-5 声明继承和实现继承
6-3-6 多重接口的实现
6-3-7 接口的委托(Interface Delegation)
6-3-8 接口属性
6-3-9 通用接口机制的实现方式
6-3-10 COM组件模型影响的接口机制
6-3-11 VCL Framework提供的通用接口和接口类
6-3-12 接口小范例——Interface Walker
6-4 高级接口技术
6-4-1 Delphi延伸接口机制加入的接口RTTI(Run-Time Type Information)
6-4-2 接口设计会影响应用系统的效能
6-5 Delphi接口机制未来的发展
6-6 结论
7 VCL Framework的COM架构
7-1 以面向对象技术来设计COM的支持架构
7-1-1 什么是COM对象
7-1-2 ClassFactory
7-1-3 COM Aggregation
7-1-4 Type Information
7-1-5 注册信息
7-1-6 设计的想法
7-2 VCL Framework支持COM的面向对象架构
7-2-1 COM执行环境的服务
7-2-2 创建COM对象的服务
7-2-3 COM对象类
7-2-4 Delphi编译器实现的变化
7-2-5 TAggregatedObject
7-2-6 TContainedObject
7-2-7 VCL Framework如何提供COM Aggregate的功能
7-3 VCL Framework创建COM对象的流程
7-4 VCL Framework使用的设计模式
7-4-1 Factory/Factory Method设计模式
7-4-2 Bootstrap设计模式
7-4-3 ForEach设计模式
7-5 结论
8 VCL Framework的持久化机制
8-1 什么是持久化(Persistence)
8-2 持久化的发展
8-2-1 COM的持久化
8-2-2 Java的持久化
8-2-3 .NET的持久化
8-2-4 Delphi/C++Builder
8-3 Delphi的持久化机制
8-3-1 复制对象变量和Assign方法
8-3-2 Shallow Copy
8-3-3 Deep Copy
8-3-4 TFiler类
8-3-5 TWriter类
8-3-6 TReader类
8-4 使用Delphi的持久化能力
8-4-1 使用TPersistent/TComponent类
8-4-2 动态创建和储存VCL组件
8-4-3 动态储存自定义VCL组件
8-5 VCL Framework持久化的Design Pattern
8-5-1 Two-Way Sequential设计模式
8-5-2 Adapter设计模式
8-6 流类
8-7 结论
9 VCL Framework和设计模式
9-1 Framework设计模式
9-1-1 Notify设计模式
9-1-2 Facade设计模式
9-1-3 Command设计模式/Action设计
9-2 企业应用设计模式
9-2-1 Table Module设计模式
9-2-2 Record Set设计模式
9-2-3 Service Layer设计模式
9-3 结论
9-4 参考书目
10 VCL Framework的演化——VCL.NET
10-1 Object Pascal和CLR
10-1-1 数据类型
10-1-2 类引用(Class Reference)
10-1-3 虚拟构造函数和多态对象创建
10-1-4 Class Method/Class Static Method
10-2 设计的挑战
10-2-1 辅助类(Helper Class)的功能
10-2-2 Unit Initialization/Finalization
10-2-3 Cracker Class
10-2-4 析构函数的执行
10-3 VCL.NET的实现
10-3-1 使用.NET的PInvoke机制调用Win32服务
10-3-2 串联Delphi.NET运行时和.NET虚拟执行环境的机制
10-3-3 使用.NET Framework类取代VCL Framework类
10-3-4 实现额外的.NET接口以提供VCL.NET开发.NET组件的能力
10-3-5 扮演.NET和VCL.NET间Adapter角色的TObjectHelper
10-3-6 .NET和Win32间的Wrapper
10-4 VCL.NET如何处理Windows消息
10-5 VCL.NET使用的设计模式
10-5-1 使用Adapter设计模式
10-5-2 使用Wrapper设计模式
10-5-3 Register/Notify设计模式
10-6 结论