VCL的诞生和设计原理(摘抄inside vcl)

VCL的诞生和设计原理
从无到有--?VCL对象生命的成型

基本的对象管理服务至少应该包含下面的服务:
l 对象的创建和初始化
l 对象方法的分配
l 对象的消灭

Object Pascal 的对象模型
使用Object pascal定义的Tobject类非常简单,只要如下两行代码就可以
Tobject =class
End;

这虽然时合法的类定义,但是实际用处不大,因为在创建类对象时必须为对象分配内存并且进行对象初始化之后才能正确的使用对象.
因此一般的类都会定义对象的构造函数(constructor或者ctor),而构造函数的目的就是为对象分配内存及进行对象初始化工作.由于对象分配了内存,因此当对象生命结束之后当然需要释放分配的内存以及进行初始化反向的工作,如此在能够归还系统资源,所以类也会定义析构函数(destructor 或者 dtor).因此最基础的类通常会定义成如下形式:
Tobject = class
  Constructor Create;
  Destructor Destroy; virtual;
End;

其中析构函数Destroy声明为virtual方法时因为在Tobject的派生类中可能会分配额外的资源,因此派生类可以改写(override)Tobject的析构函数,当派生类对象释放时,先释放他自己分配的资源,在调用Tobject的析构函数来释放Tobject为对象分配的资源.如果Tobject的析构函数不声明成虚拟方法,那么派生类的析构函数便会覆盖Tobject的析构函数,如此一来,只有派生类分配的内存会被释放,由Tobject为对象分配的资源则可能没有释放,这就造成了内存泄漏(leak)问题.

定义这样一个类:
TMyObject = class(Tobject)
  Destructor Destory ; override;
End;



Destructor TMyObject.Destory;
Begin
  //释放TmyObject分配的内存;
  inherited Destory;//调用父类的Destory;
End;

当我们使用如下程序代码创建TmyObject 时,发生了什么?
Obj := TMyObject.Create;
Object Pascal的对象模型在这行程序代码后进行了很多的工作,包括分配内存,设定字段变量数据结构,设定执行框架等工作,因此上面的程序可分解成如下的程序代码:
TMyObject.AllocateMemory;
TMyObject.InitializeSpecialFields;
Obj:= TMyObject.SetupExecFrame;

创建对象的第一步是分配内存,Object Pascal会使用内建的内存管理器为对象分配内存:
PMemoryManager = ^TMemoryManager;
TMemoryManager = record
  GetMem:function(Size:Integer):Pointer;
  FreeMem:function(p:Pointer):Integer;
  ReallocMem :function(P:pointer; Size:Integer):Pointer;
End;

虽然Object Pascal使用了默认的内存管理器,但是Object Pascal对象模型的设计似乎是允许切换内存管理器的.
在分配了对象的原始内存之后,Object Pascal的对象模型会先初始化所有的内存内容为0.
FillChar(Instance^ ,InstanceSize, 0);
然后对类中声明的特别字段进行初始化工作,如对于接口变量必须设定引用记数值为0,对于动态数组则必须初始化内存区块.
下面的TMyObject声明了Variant类型的字段变量vDate,那么Object Pascal的对象模式会对 vDate进行特别的初始化工作,至于GetHashValue虚拟方法则会进入VMT(Virtual Method Table)之中.
TMyObject =class(TObject)
Private
  VDate :Variant;
Public
  Function GetHashValue:Integer; virtual;
  Destructor Destory;override;
End;

转载于:https://www.cnblogs.com/liukun966123/archive/2004/06/15/15973.html

《深入核心——VCL架构剖析》光盘说明-、光盘用途 本光盘为《深入核心——VCL架构剖析》一书的配套光盘,供读者阅读图书时参考和学习。二、光盘内容 光盘“源代码”目录中包含了书中所有源代码,文件目录和图书的目录相对应。如“Chap01”表示书中第1章的范例源代码。 光盘包含了全部的pas、dfm和dpr文件。 我们已经对所有文件进行了简体化工作。如果您在使用中发现有界面乱码问题,请将窗体Font改为“宋体”,Charset改为gb2312即可,并请即时告知我们,让更多读者受益。三、运行环境 多数代码可以直接在Delphi6和Delphi7环境下运行。部分涉及.NET技术内容的代码,需要在Delphi 7上安装Borland .NET Complier for Delphi编译器方可编译执行。Borland已经正式推出Delphi 8 for .NET,所以本书范例中部分内容可能与D8最终版本不符。四、使用方法 直接将范例文件拷贝至硬盘适当目录即可。 多数完整应用程序代码已经编译为.exe可执行文件,读者可直接运行之。五、防病毒 本光盘所有文件都已经过Norton Antivirus扫描,未发现有任何已知病毒。六、风险 读者须对使用光盘所附代码、文件所造成的一切后果负责。 七、如果对代码有任何疑问、建议或者发现有遗漏、错误之处请与 liwei@csdn.net联系。六、所有源代码可以在学习和工作中直接使用,但请不要用于商业目的。
李维新书<<Inside VCL>>的前两章预读,12月份出版。《Inside VCL(深入核心——VCL架构剖析)》将带领您:• 领略优秀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观。 Delphi已经推出了7个版本,在未来也会持续的推出新的版本,许多人可能也已经使用Delphi许多年并且开发了各种不同的应用系统,但是不管我们使用了Delphi多久,我们真的已经了解Delphi,而且发挥Delphi十成的功能了吗?Delphi 1从推出以来,在每一个版本都加入了许多新的功能,融合的软件技术也一直在增加之中。从RAD、Flat-File数据库功能、VCL组件,一直到主从架构、Web、COM/COM+、MIDAS、多层分布式应用系统,到现在的SOAP/Web Service、dbExpress,DataSnap等技术,程序员们不断地学习和使用新的技术,以便用来开发新的应用系统或是增加程序员个人的附加价值,以求在信息领域能够更上一层楼。不过这些技术大都是属于“应用类”。... ...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值