笔记概述

OOP是个大难题,也是重中之重的基础,这个道理我很明白。当然我学习的第一门面对对象的语言是C++,所以我打算对比学习二者,顺便巩固一下c++知识,提升的我编程水平。

delphi面对对象概述

和c++一样任何一门面对对象的编程语言都离不四个重要的特点:
抽象,封装,继承和多肽

delphi 面对对象的概述

三个术语

1.域(field),也被称为域定义或者实例变量,域是包含在对象中的数据变量。在对象中的一个域就像是在Delphi记录一个域,在C++ 中它被称为数据成员
2.方法(method),属于一个对象的过程和函数名,在C++ 中它被称为成员函数
3.属性(property),属性是外部代码访问对象中的数据和代码的访问器,属性隐藏了一个对象的具体实现的细节,这个我觉得和c++ 一样,外界不能直接访问private的成员,但是可以通过public的成员函数来去访问,只不过c++ 没有把函数和这个访问函数分开罢了,而且这并没有使语句变得复杂,可以实现一些效果,可以在传入数据的时候 对传入的数据进行操作一番再去赋值。

使用步骤

1.定义一个类

2.用该类声明一个名字(实质是一个指针)

3.用该类实例化一个对象,并使它与先前的名字联系起来(构造)

3.调用对象的方法或属性

4.释放对象(析构)

详细介绍

一、定义和声明一个名字
在使用一个对象之前,用class关键字声明一个对象。可以在一个程序或单元的type部分声明一个对象类型:

type
    TFooObject = class
	<成员>
	{
	域 ,方法;
	}

end;

除了声明一个对象类型,通常还需要一个对象的变量,即实例。实例定义在var部分

var
    FooObject:TFooObject;

你可能要问,这些方法是怎样进到对象中的,不需要为这些方法写代码,对吗?是的,刚才讨论的方法来自于Object Pascal的基类TObject对象。在Object Pascal中所有的对象都是TObject对象的后代,而不管它们是否是这样声明的。因此,下面的声明:

type
    TFooObject = class;

相当于

type
    TFooObject = class(TObject);

class(基类型),括号里放入的是父类;

二、通过调用构造器来创建对象的实例,这就是所谓的实例化
前面的var就是仅为对象声明了个指针,c++ 会为我们自动调用构造函数,但是delphi 并不会,所以我们要自己调用一下,当然 和c++ 一样如果你不写构造函数,他也会默认有个构造函数(实际上是继承Object(所有类的基类型)的构造函数)

FooObject:= TFooObject.Create;

构造器主要是用来为对象创建实例并为对象中的域分配内存进行初始化使得对象处于可使用的状态。

与c++(每个类的构造函数可以被重载,所以可以有多个构造函数) 一样Delphi的对象至少有一个构造器称为create(),但是一个对象可以有多个构造函数。根据不同的对象类型,Create()可以有不同的参数。

仔细看上面的代码,发现delphi语言和C++ 调用构造函数大有不同,c++的构造
在一般情况下无法直接调用构造函数,即使再重载过后我们也一般是在声明对象时,用:<对象名>(参数列表)的形式进行调用,但是delphi 看似 直接是调用类的方法: TFooObject.Create;(TFooObject是类名),而不是像其他方法那样通过实例来引用。这看上去有点奇怪,但是很有意义。变量FooObject在调用时还没有被定义,而TFooObject已经静态地存在于内存之中,静态调用它的Create()方法是合法的。当然这个后面我还会在方法里面详细的介绍;

最后,当一个对象实例用构造器创建的时候,编译器将对对象的每一个域经行初始化,你可以放心地认为所有数字被赋值为0,所有指针赋值为NIL,所有字符串为空

析构
和c++一样,使用完对象后,我们需要把占用的内存换回去;在delphi中,应该调用这个实例的Free()方法来释放它。Free()首选进行检查保证这个对象实例不为NIL,然后调用对象的析构方法Destroy()。不像调用Create(),这里是调用对象实例的Free()方法,记住不要直接调用Destroy(),而调用更安全的Free()方法,因为Free()首选进行检查保证这个对象实例不为NIL,然后调用对象的析构方法Destroy()。

FooObject.free;

  
在C++中,一个静态声明的对象在离开它的作用域时自动调用它的析构方法,但是要对动态生成的对象手动调用析构方法。

这个规则在Delphi里面也适用,所有使用Create()动态声明创建的对象即使离开创建它时候的作用域,它也不会被自动释放,必须使用Free()方法来动态的析构,除了在Delphi中的隐式动态创建的对象,所以一定要记住这个规则:凡是创建的,都需要释放。这个规则有两个重要的特例

1)当对象被其他对象拥有时,它将替你释放对象。

2)引用技术的对象,当最后一个引用释放时,它将被析构。

未完待续
本篇笔记就先写到这里,我后面整理一下 deiphi 的方法成员

努力成长的程序员