☆领略优秀Framework之大局观!
追寻软件架构大师设计思路,高屋建瓴,廓清Framework设计要义。 告诉您何谓Framework,VCL是一种什么样的Framework,未来 VCL Framework将走向何方。它是Delphi程序员不可不读的一部大书。
☆剖析VCL之精妙大架构!
深入探究VCL设计与实现,以RPG方式与读者共同扮演架构设计师, 一砖一瓦搭起VCL大厦。配合Windows Framework、COM、Interface等各种技术,按图索骥,逐步厘清VCL Framework真正的脉络所在。
☆掌握OO开发之大奥义!
紧密融合OO理念和设计模式,用OO理念重新考量VCL,指出其中优 秀和不妥之处;让您在了解VCL Framework的同时,体验源自顶尖程 序员的OO观。
第1章 回到基础点
全章 : ~50页
* 多任务操作系统环境
* 窗口讯息系统(Window Messaging System)
* 系统讯息队列(System Message Queue)和应用程序讯息队列(Application Queue)
* 典型的的窗口应用程序
* 典型应用程序设计的缺点
* 为什么我们需要Window Framework
* Window Framework的世代
* 1-1 角色扮演
* 1-1-1 如何设计和驱动多任务执行环境
* 讯息驱动模型
* 窗口运作模型
* 执行系统,事件,讯息和触发应用程序代码
* 1-1-2 是的,这就是Window的基本运作原理
* Window定义的讯息数据结构
* 回叫函式以及呼叫惯例
* 回叫函式(Callback Routine) 以及呼叫惯例(Calling Convention)
* 注册Window窗口类别
* 建立Window窗口
* 数据结构和数据型态的转换
* 1-2 回到从前!典型的Window应用程序
* 1-3 窗口回叫程序设计的缺点
* 我们可以改善窗口应用程序的撰写吗?
* 1-4 Window Framework的诞生和发展
* 为什么我们需要Window Framework
* 第1代的Framework- OWL 1.x,MFC
* 第2代的Framework-OWL 2
* 百花齐放的阶段-ZApp, Zinc, etc....
* 第3代的Framework-VCL
* 第4代的Framework-.NET Framework, VCL.NET
* 1-5 窗口组件Framework
* 1-6 结论
第2章 VCL的诞生和设计原理
全章 : ~40页
* Borland VCL Framework的诞生
* VCL Framework的架构设计
* VCL Framework的对象服务
* Object Pascal的对象模型和『TObject』
* 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章 Object Pascal对象导向程序语言的支持
全章 : 82页
* 对象导向程序语言和VCL Framework
* Framework使用对象导向程序语言的设计手法
* 神仙棒一挥-让它变成组件吧
* 这还不够,让它成为Window控件吧
* 如何让Framework提供客制化的能力
* 不使用Window Handle的组件封装类别
* 封装Canvas的类别
* COMAdmin类别的设计和实作
* 3-1 对象导向程序语言和VCL Framework
* 3-2 Framework使用对象导向程序语言的设计手法
* 抽象类别法
* Place Holder方法
* 逐渐增加法
* 三明治手法
* 复盖父代实作法
* BootStrap设计法
* 3-3 神仙棒一挥-让它变成组件吧
* 3-3-1 VCL Framework的核心组件架构
* 3-3-2 TComponent类别的设计
* 可同时扮演Container组件和单一组件的功能
* 基础组件互动通知功能(Notification)
* 同时提供可视化和非可视化组件架构基础
* 和Delphi整合发展环境互动的机制
* 3-4 这还不够,让它成为Window控件吧
* 3-4-1 Tcontrol
* TControl控件基本信息
* 基础资源服务
* 处理鼠标的服务
* 处理讯息和事件的服务
* 控件重绘服务
* 3-4-2 封装Window控件的TWinControl类别
* 封装Window控件
* 封装Window建立功能
* 封装Window讯息
* Window控件重绘服务
* 处理Window讯息服务
* 3-4-3 不使用Window Handle的组件封装类别
* 3-4-4 客制化控件类别TcustomControl
* 3-4-5 封装Canvas的类别
* TCanvas类别
* TControlCanvas类别
* 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和窗口讯息
全章 : 69页
* 窗口讯息和VCL Framework
* 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-2 VCL封装类别的方法种类
* 4-3-3 TObject分派讯息的原理和流程
* 4-3-4 VCL讯息分派架构
* 4-4 Delphi窗口应用程控者:TApplication
* 4-4-1 TApplication对象的建立
* 4-3-2 TApplication和秘密窗口
* 4-4-3 TApplication的讯息循环
* 4-5 TApplication建立的主窗体
* 4-5-1 主窗体的建立流程
* TWinControl.Create
* TForm.HandleNeeded
* TForm.CreateHandle
* TForm.CreateWnd
* TForm的父代类别TScrollingWinControl
* TWinControl.CreateWnd
* VCL Framework的窗口thunk回叫函式-InitWndProc
* TForm. CreateParams
* TCustomForm.CreateWindowHandle
* 4-5-2 Delphi窗体类别处理窗口讯息的机制
* 有趣的范例-拦截窗口讯息以及改变窗体属性
* 4-6 TApplication的设计思想
* 4-7 结论
第5章 VCL组件和窗口控件的结合
全章 : 48页
* VCL Framework的偷天换日之计
* 讯息分派核心程序StdWndProc
* 从静态类别Framework到动态组件架构
* 完整的窗口讯息处理流程
* VCL Framework的设计样式(Design Pattern)
* 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设计样例
* 数值 Dispatcher设计样例
* 字符串Dispatcher设计样例
* 5-4-2 Broadcasting设计样例
* 5-4-3 利用VCL Framework的讯息分配机制
* 5-5 结论
第6章 界面程序设计
全章 : 92页
* 为什么要使用接口?
* 界面的演进和比较
* Delphi的界面机制
* 界面程序设计
* 6-1 为什么要有界面?
* 6-1-1 接口程序的驱动力
* 公用服务方法的汇集
* Plug-in Point
* Proxy/Stub的应用
* 软件服务
* 功能汇集
* 物件角色(Object Role)
* collections和成员
* 对象互动
* intra-class的角色
* 6-2 接口的演进,比较以及Delphi的接口
* 6-2-1 Microsoft COM
* 6-2-2 Java
* 6-2-3 C#的界面
* 6-2-4 Delphi接口设计的发展
* 为了对COM支援
* 6-3 Delphi的界面机制
* 6-3-1 接口是互动的合约
* 6-3-2 宣告界面
* 6-3-3 实作和使用接口
* 使用型态转换(Type Casting)
* 利用Delphi编译器的内建机制
* 使用TObject的GetInterface
* 使用对象的QueryInterface方法
* 使用COM的QueryInterface API
* 使用Object Pascal的as操作数
* 6-3-4 接口和对象的生命周期
* 物件生命周期掌握在他人手中
* 对象生命周期掌握在程序员手中
* 6-3-5 宣告继承和实作继承
* 6-3-6 多重接口的实作
* 6-3-7 界面的委派
* 使用对象接口委派
* 使用类别对象委派
* 6-3-8 接口特性
* 6-3-9 通用接口机制的实作方式
* 6-3-10 COM组件模型影响的接口机制
* 界面参考计数值
* GUID接口实作原理
* 6-3-11 VCL Framework提供的通用接口和接口类别
* TInterfacedObject
* Self Returning
* 6-3-12 接口小范例-Interface Walker
* 6-4 高阶接口技术
* 6-4-1 Delphi 延伸接口机制加入的接口RTTI(Run-Time Type Information)
* 接口机制结合RTTI
* 使用接口和RTTI
* 6-4-2 接口设计会影响组件系统的效能
* 6-5 Delphi接口机制未来的发展
* 6-6 结论
第7章 VCL Framework和COM的设计架构
全章 : 100页
* 以对象导向技术来设计COM的支持架构
* VCL Framework支持COM的对象导向架构
* VCL Framework建立COM对象的流程
* Factory/Factory Method设计样例
* Bootstrap设计样例
* ForEach设计样例
* 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编译器实作的变化
* Delphi 3
* Delphi 3的对于COM支持的编译器实作
* Delphi 5的对于COM支持的编译器实作
* Delphi 7的对于COM支持的编译器实作
* 7-2-5 TAggregatedObject
* 一般应用程序使用TAggregatedObject
* 在COM组件模型中使用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的永续储存
全章 : 89页
* 什么是永续储存
* 永续储存的发展
* Delphi/C++Builder,Java和.NET下的永续储存比较
* VCL Framework的永续储存机制
* VCL Framework永续储存的秘密
* 使用VCL Framework的永续储存能力
* VCL Framework的串行流类别(Stream Class)
* VCL Framework永续储存的设计样例
* 8-1 什么是永续储存(Persistence)?
* 8-2 永续储存的发展
* 8-2-1 COM的永续储存
* 8-2-2 Java的永续储存
* Form Designer和永续储存
* Java Serialization
* Java Remoting
* 8-2-3 .NET的永续储存
* Form Designer和永续储存
* .NET Serialization
* .NET Remoting
* 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
* Two-Way Sequential设计样例
* Adapter 设计样例
* 接口-类别混合的Adapter设计样例
* 类别继承的Adapter设计样例
* 设计样例使用范例
* 8-6 串行流类别
* 8-7 结论
第9章 VCL Framework和Design Pattern
全章 : 71页
* VCL Framework和设计样例
* Notify设计样例
* Facade设计样例
* Command设计样例
* Table Module 设计样例
* Table Data Gateway 设计样例
* Record Set设计样例
* Service Layer设计样例
* 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 结论
第10章 VCL Framework的演化-VCL.NET
全章 : 114页
* Object Pascal和CLR
* 设计的挑战
* .NET对于VCL Framework的影响
* VCL.NET的实作
* 从Win32到虚拟执行环境
* 实作技术的改变
* 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如何处理窗口讯息
* 10-5 VCL.NET使用的设计样例
* 10-5-1 使用Adapter设计样例
* 10-5-2 使用Wrapper设计样例
* 10-5-3 Register/Notify设计样例
* 10-6 结论
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于台北, 新店
Borland公司(中国大陆)大中华区首席技术官(CTO)
李维具有相当丰富的开发经验,其作品极具感染力,在书中他常常运用层层推进的演绎手法,引导读者主动思考,对技术趋势的分析和预测更是堪称一绝。国内读者对他的作品评价甚高,虽是程序设计方面的书籍,读者常常感觉他的作品阅读起来毫无倦意,不但能学习到扎扎实实的编程技术,还能在阅读的过程中使自己的思路得到相当大的锻炼和提升。李维先生为人豁达,幽默风趣,待人处事谦虚,对事情永远充满自信。