Delphi面向对象学习随笔一:类与对象的关系
作者:巴哈姆特
http://www.cnpack.org
(转载请注明出处并保持完整)
工作几年了,总想做点总结,于是有了这篇东西,叫随笔吧呵
本文只是写写我对对象化的理解,主观成分很多,或许有错误,希望大家指正^_^
PS: 本文的演示代码均以Delphi 的Object Pascal语法为准。
类与对象的关系
要讨论类与对象的关系,需要先说一下什么是类,什么是对象。
类:
类、我认为是一个集合,和数学中的集合一样,是一类事物的统称,例如“人类”。
在计算机语言中,类和数组或结构等数据类型一样是用户(程序员)自定义的数据类型,但是我们常说,类是复杂的自定义类型,而其他的数据类型则称为简单的自定义类型。原因是因为类是有行为的!
另外、类是抽象存在的,就拿“人类”来说,我们都知道,在这个世界上是存在人类的,但是谁能说清楚“人类”长什么样?有多重?
对象:
对象则是类中的一个个体,例如我或者是正在看这篇文章的你,都是“人类”中的一个个体。
计算机语言中,你是无法让一个类直接为你工作的(有些带类方法的特殊情况除外),就像世界上没有任何一个人有能力让整个“人类”为你工作一样;那么要让你的类为你工作,我们就需要这个类的一个对象,当我们有了一个对象以后,那么我们才能让他为我们做我们想要做的事。
实例化对象:
我们都知道,在当前的计算机操作系统中,任何软件运行都需要一个内存块,也就是生存空间。同样,对象也要,就像我们生下来就要占地方一样。在你要让一个类的对象为你工作之前,你需要为他分配一个内存空间并创建它,这也是和其他的数据类型不一样的地方:
var
i: Integer; //定义一个整形变量i
s: TStringList; //定义一个TStringList类的对象s
begin
i:= 0;
{ 这是对的,因为当定义了一个int类型(简单类型)的变量后,
编译器会自动为你这个变量分配内存空间 }
s.LoadFromFile(...);
{ 错误,因为定义这个对象前,还没有为他创建内存空间,
直接这样执行会引起一个内存错误 }
end;
正确的方法应该是,在使用类的对象前,要显示的调用类的构造方法:
CODE:
s:= TStringList.Create;
或许有朋友会说,为什么不是s.Create呢?那是因为,在执行这条代码前,还没有为s分配内存空间,是不能访问他内部的数据成员的,而前面说了,“类是抽象存在的”,所以在编译器为你的代码打包成可执行文件后,TStringList在内存中已经存在了。当然这种“类名.方法名”的调用方式只能用在类(静态)方法上,而类的构造器的入口则是必须静态存在的。
属性、方法、事件:
属性是类的特性:例如红色的汽车,红色就是这辆汽车的颜色属性
方法则是我们传统意义上的函数或过程,也就是类可以做的事:例如汽车可以向前开,也可以向后开
事件则是在特定条件下,被动调用的代码段,也就是说,事件中我们指定填写的代码可能我们没有手动调用,但是它却可能在一个特定的条件下被对象内部调用而得到执行(当然不排除你显示的手动调用)。
暂时先说到这里,套用一句评书中的话:“预知后事如何,且听下回分解”^_^ |