Delphi——面向对象的Pascal
一般说来,面向对象的编程语言主要基于三个基本概念:类、继承以及多态性。由于Delphi采用了一些特别技术,使得用户甚至可以在对Object Pascal语言一无所知的情况下编写Delphi应用程序。当用户建立窗体、添加新组件以及处理事件时,Delphi会自动产生大部分的相关代码。本文就Delphi与其他OOP语言的一些区别作简要描述,以便学员对Delphi这种面向对象的Pascal语言有更深一步的了解。类(Class)是一种用户定义的数据类型,它有自己的内部数据和函数或过程形式的方法,用来描述一些相似对象所拥有的共同特性和行为。在大多数OOP语言中,通过声明类的变量来创建类的实例,即实际的类对象,像最著名的C++就是这样。而Object Pascal采用的是另外一种称为对象引用的机制,类的对象并不真正保存类的数据,它只是一个引用,指向类数据在内存中的实际位置。其代码并没有真正创建对象,而只是一个指针的位置。对于用户自己定义的类必须手工建立,而组件的实例则可以由Delphi自动建立。
继承(Inherit)就是把一个新的对象定义为已经存在的类的后代,新类继承了旧类的一切东西,在向新类中添加任何新的内容之前,父类(或基类)中的每一个字段和方法都存在于派生类中。在继承时,只需要在类的声明开始部分说明类和它的父类即可。与C/C++不同,Pascal是一门强类型语言,用户不能使用显示的类型强制转换。两个值兼容的规则是只有当它们是相同的数据类型时才能视它们为兼容。该规则的一个重要例外是在类存在的情况下:当需要父类对象时,可以使用子类的对象;但相反则不行,不能在需要子类对象时使用父类对象。
多态(Polymorphism)的基本思想是用户调用对象方法,但具体调用哪个对象方法则依赖于与变量相关的对象类型,而Delphi在运行前是不能确定与变量相关的对象的实际类型的。这一关键技术使得面向对象的编程语言有利于可重用性,用户可以在不清楚各级实际派生类的情况下编写使用这些类的代码。在Delphi中,一种对象方法使用滞后联编有两种基本方法:用户可以声明它为虚拟(virtual)或声明它为动态(dynamic)。这两种方法语法相同,使用结果也相同,不同在于编译器实现的机制。
有关Delphi面向对象的进一步知识可参见类的封装、类的接口、单元与作用域、动态联编、重载和抽象对象方法等内容的详细解释。