Delphi面向对象学习随笔九:后记

作者:巴哈姆特
http://www.cnpack.org
(转载时请注明出处并保持完整)

最后一篇了,呵呵!其实通过写这几篇笔记,也发现了我自己知识欠缺的部分。当然也通过各位高手的提点,让我把以前学习过的东西来了一次“体检”。
    当然,错误也有,但是改了就还是好同志嘛,呵呵^_^

随便介绍一下Delphi中的几个比较常用的类吧:

TObject:
    VCL中所有类的根类,即是说:VCL中所有的类/组件/控件都是从TObject中继承而来。TObject类中定义了基本的构造方法和析构方法。

TPersistent:
    继承于TObject,按字典中的意思是“持久类”(姑且这样叫它吧,因为我一直就是这样叫这个类的-_-|)。该类在VCL中的地位不亚于TObject,VCL中很大一部分类都是继承于这个类的。TPersistent类实现了published域对象的RTTI功能,也就是说:该类以及它的派生类中定义在published中的属性、方法和事件可以显示在Object Inspector窗口中,也可以把属性的值保存到dfm文件中。当然,这些RTTI的特性,都是由编译指令{$M+}指定的。如果是直接从TObject继承的子类,加上这个编译指令,同样有RTTI功能。另外TPersistent还提供了持久类对象实例之间互相Assign的机制,子类可实现它。

TComponent:
    所有组件的基类,由该类或它的派生类所派生的新类是可以注册到Delphi的组件面板中的。也就是说,当你要开发一个新的组件时,该类将是你所能选择的最基础的类。

TControl:
    可视组件(一般我们说的控件也就是指TControl类或它的派生类)。

TWinControl:
    标准Windows控件,该类以及派生类都有一个非常重要的属性THandle。也就意味着,继承于这个类或派生类的控件可以接受消息(SendMessage()或PostMessage()发送,当然还有系统发送的)。当然,非可视组件(TComponent的派生类)也有具有THandle属性的。比如说TTimer。

TCustomControl:
    继承于TWinControl,添加了画布属性Canvas和Paint方法。那么,当我们考虑写一个自绘的并且有句柄的控件的话,考虑用这个类或许可以减少我们很多工作量。

TGraphicControl:
    自绘控件,从TControl类继承,与TWinControl类不同的是,它没有句柄。

TInterfacedObject:
    前面说过,这个类应该是我们选择实现接口类的根类,因为它已经为我们实现了IInterface接口中的方法。当然如果你想自己实现IInterface中的方法的话,你也可以选择从TObject类中继承。

大概就这样吧,相当的简单。其中的奥秘其实可以从VCL的代码中挖掘。

我每一次看VCL的代码,都会忍不住佩服一次Delphi开发小组的成员。VCL的代码真的是太优秀了,虽然也有BUG,呵呵。

题外话:
    这段时间在网上翻帖子,看到有朋友为了“到底是OOP好还是GP好”而大打口水仗;也有朋友为了“使用属性(property)好还是使用Getxxx和Setxxx这样的方法好”而破口大骂。
    就我看来:任何东西,只要他存在,那么就是最大的道理,没有必要争论这些。有这些时间还不如多去学习点新的东西更好。

鸣谢:
    首先要谢谢刘啸,如果没有刘啸为我的笔记润色润色的话,我想会有很多会有歧义的地方。
    也要感谢刘啸、沈兄和周劲羽的批评和补充,有了他们的批评,才使我又学习到了很多东西。

当然,也要感谢正在看这个笔记的各位,希望各位可以给我指出不正确的地方。多交流才会有提高嘛^_^

最后:希望我写的东西没有误人子弟。

时间: 2024-10-23 15:53:32

Delphi面向对象学习随笔九:后记的相关文章

Delphi面向对象学习随笔三:overload与override

作者:巴哈姆特(转载请注明出处并保持完整)    首先,我想单独说明一下overload,为什么呢?因为overload和对象化关联不大,所以,我感觉单独提出来说明比较好.    我们都知道,在Pascal语法规则中,同一个UNIT里是不能存在两个同名的函数的,例如: function func(): Boolean; function func(const x: Char): Boolean; 这样是会出语法错误的,原因是因为标识符规则限制.但是问题出来了,如果我们需要几个功能相似但是参数不同

Delphi面向对象学习随笔八:物理封装

作者:巴哈姆特http://www.cnpack.org(转载请注明出去并保持完整)前面说过的封装其实是逻辑意义上的封装.逻辑封装是对某一特定逻辑功能模块的封装,这个特定逻辑功能块可以是一个类,当然也可以是一个包,他们都有自己的逻辑边界.另一种封装方式,我们通常叫它为物理封装:物理封装其实是具体实现代码的物理集合,他可以以bpl,dll,com+等形式体现. 逻辑封装里,对象的传递.数据共享与调用相对要简单的多,只要我们引用类所定义的单元(unit)就可以直接访问类中public和publish

Delphi面向对象学习随笔七:COM

作者:巴哈姆特http://www.cnpack.org(转载请注明出处并保持完整) 上一篇,我们介绍了接口.如果没有接触过COM对象的话,你会觉得接口真的很麻烦,也许会有:“还不如直接定义一个类更方便”的想法.    的确,没有经过COM封装的接口确实比较麻烦.在我看来,没有经过COM封装的接口似乎没有存在的意义.那么,什么是COM对象呢?它有什么优点呢?接下来开始对COM对象进行一个简单的介绍: COM是个二进制规范,它与实现的语言无关.这样,即使COM对象由不同的编程语言创建,运行在不同的

Delphi面向对象学习随笔二 编写第一个类

作者:巴哈姆特(转载请注明出处并保持完整) 这回,我们讨论怎么编写我们自己的第一个类.    在编写我们自己的类之前,首先要说的是“类的继承”.    记得前几天,我在和一个朋友讨论类的特点的时候,他说:“类是可以没有构造方法的!”其实类必须有至少一个构造方法的,但是他的话也不全错,可以理解成“我们可以不实现我们自己的构造方法”.    当我们没有显式的为类编写一个构造方法的时候,那么,看上去,这个类好象是没有构造方法,但是实际上,就算你没有为这个类编写一个属于你自己的构造方法的时候,该类还是有

Delphi面向对象学习随笔五:一个真正的类

作者:巴哈姆特(转载请注明出去并保持完整)写在前面的话:    本篇笔记完全属于我的个人主观观点,如有错误请指正^_^  类的定义:    首先,我想说的是,类并不是一些变量和函数简单的“拼凑”出来的.类应该是对于一个事物的抽象描述,而不是一个动作的抽象描述.怎么讲呢?    比如说:鞋子是一个事物,我们可以把它的特点抽象出来,并用计算机语言去描述成为一个类,而鞋子又分了凉鞋.皮鞋等,那么“凉鞋”和“皮鞋”则是“鞋子”的派生类.它们看上去是非常自然的.    那么,现在我有另外一个类,“初始化数

Delphi面向对象学习(-)

Delphi面向对象学习随笔一:类与对象的关系作者:巴哈姆特http://www.cnpack.org(转载请注明出处并保持完整)工作几年了,总想做点总结,于是有了这篇东西,叫随笔吧呵    本文只是写写我对对象化的理解,主观成分很多,或许有错误,希望大家指正^_^    PS: 本文的演示代码均以Delphi 的Object Pascal语法为准. 类与对象的关系    要讨论类与对象的关系,需要先说一下什么是类,什么是对象. 类:    类.我认为是一个集合,和数学中的集合一样,是一类事物的

lua面向对象学习随笔 --类与实例

面向对象最基本的就是两点:类,对象. 但是lua是无类型的,要实现面向对象只能模拟实现. 其实他们都是表,多了个__index属性,就模拟出了实现“类和继承”的效果. 面对Lua千万别用c++的类来类比,不然会误入歧途! 它就是一个table而已下面一个典型的定义一个“类”的方式. class={} function class:new(o) local o=o or {} setmetatable(o,self) self.__index=self o:ctor() return o end

面向对象学习随笔

面向对象中讲的属性与构造函数,现象与对象,继承多态,接口,抽象类都会用到类和对象.[所以类和对象的理解和运用很重要!] 类不能直接使用 对象才可以使用 class 类名                    {                                           }     类的里面应该定义什么:         a. 将这类事物拥有的共同特征定义为类的成员变量.         b. 将这类事物拥有的共同的功能定义为方法.(我们在自己写的类中 不要加static

linux学习随笔九

主学shell基础的知识 站在用户的角度:shell的类型 登录式shell:正常通常是某些终端登录 su - USERNAME su -l USERNAME 非登录式shell su USERNMAE 图形终端下打开命令窗口 自动执行的shell脚本 kash的配置文件: 全局配置:/etc/profile /etc/profile.d/*.sh /etc/bashrc 个人配置:~/.bash_profile, ~/.bashrc 功能: profile类的文件 设定环境变量 运行命令或脚本