Delphi对象模型(Part I)

<script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
<script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>

 

 

 

Delphi对象模型 (Part I)

 

 

Delphi对于面向对象编程的支持丰富而且强大。除了传统的类和对象,Delphi还提供了接口,异常处理,多线程编程等特性。这一章节深入讲解了Delphi对象模型。读者应当对标准的Pascal比较熟悉,并且对有关面向对象编程的基本法则有一定了解。

(本文的英文原文将DelphiObject Pascal统一表述为Delphi,可能有概念不清之嫌疑。但在大多数情况下,相信读者能够根据上下文来判定文中所述之Delphi的具体含义——译者注。)

 

Classes and Objects类和对象

可以将类想象为一种特殊的记录。与记录相似的是,一个类描述的是一种特殊的类型,它由任意多个部分组成,每一个部分称为一个字段。与结构不同的是,一个类可以包含函数和过程(称为方法method),以及属性property。一个类可以继承自另一个类,因此,它继承了祖先类中所有的字段,方法,以及属性。

一个对象(Object)是一个类的动态实例。对象总是从堆中动态分配得来,因此一个对象引用(object refrence)更象一个指针(但是不需要pascal^操作符)。当你将一个对象引用赋值给一个变量时,Delphi只是复制了指针,而不是复制整个对象实例。程序中不再结束使用一个对象时,应当调用Free方法显式地释放该对象。Delphi没有提供自动的垃圾收集机制(后面一章中的提到的接口除外)。

为简短起见,术语“对象引用”简称为“对象”,但是对象更精确的表述应当是一块内存,Delphi在其中存放该对象的所有字段的值。在Delphi中使用一个对象的唯一方法就是使用对象引用。一个对象引用通常以一个变量的形式存在,但是也有函数或者属性返回值的形式。

类同样是一个独立的实体(与Java中的类似,但与C++中的不同)。在Delphi中,类表现为内存中一张只读的表,表中存放着指向该类的虚方法的指针以及其他许多信息。一个类引用(Class reference)就是指向该表的一个指针。类引用最常见的用法是创建一个对象或者用来测试一个对象引用的类型,也可以在其它许多场合使用。比如,传递类引用给某个例程或者从一个函数中返回一个类引用。类引用的类型称为元类(metaclass)

2-1显示了几个类的声明。类的声明以关键字Class开头。类的声明中包含字段(field),方法(method),属性(property)等部分,以关键字End结尾。每一个方法的声明类似于forword前导声明,你必须在同一单元中实现它(抽象abstract方法除外,有关抽象方法的内容将在后面提到)。

type
  
  
  TAccount = class
   
   
  private
   
   
    fCustomer: string;  // name of customer
    
    
    fNumber: Cardinal;  // account number
    
    
    fBalance: Currency; // current account balance
   
   
  end;
   
   
  TSavingsAccount = class(TAccount)
   
   
  private
   
   
    fInterestRate: Integer; // annual percentage rate, scaled by 1000
   
   
  end;
   
   
  TCheckingAccount = class(TAccount)
   
   
  private
   
   
    fReturnChecks: Boolean;
   
   
  end;
   
   
  TCertificateOfDeposit = class(TSavingsAccount)
   
   
  private
   
   
    fTerm: Cardinal;  // CD maturation term, in days
    
    
  end;
   
   
 
  
  
var
  
  
  CD1, CD2: TAccount;
   
   
begin
  
  
  CD1 := TCertificateOfDeposit.Create;
   
   
  CD2 := TCertificateOfDeposit.Create;
   
   
  ...
   
   

 

2-1描述了例2-1中的对象和类在内存中的存放结构。变量以及相关对象存放于可读写的内存中。类存放在只读的内存中,与程序码放在一起。

 Figure 2.1

Delphi对象模型与其他几个面向对象语言的类似,比如C++Java。表2-1显示了Delphi与其他几种流行的编程语言的简要对比。

Table 2-1: Delphi Versus the World

语言特性

Delphi

Java

C++

Visual Basic

继承

 

多重继承

 

 

 

接口

Delphi3000.com/articles/article_988.asp#footnote-1" title=Footnote>[1]

单根类

 

 

元类

 

 

类(静态)字段

 

 

虚方法

 

抽象(纯)虚方法

 

类(静态)方法

 

动态方法

 

 

 

垃圾回收

Delphi3000.com/articles/article_988.asp#footnote-2" title=Footnote>[2]

 

Delphi3000.com/articles/article_988.asp#footnote-2" title=Footnote>[2]

可变类型

 

 

OLE自动化

 

 

静态类型校验

 

异常处理

函数(过程)重载

 

操作符重载

 

 

 

非类函数

</script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>

<script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值