#2
大师级的巫医2009-10-27 14:23
|
类的实质思考
枯藤天涯原创
首发于编程论坛
面向对象编程,到底什么是面向对象?面向对象程序设计到底有什么强大的力量?
面向对象编程和面向过程编程到底的区别是什么?
如何解释类,对象,继承,封装这些概念?
一段思考后,有了下面的理解。抛砖引玉!以期引发讨论。
从C中的一段代码开始:
int i;
i=34;
该代码简单不过,但是它与类的概念却又相同的地方。
我们声明了一个变量i,然后对其给予一个值。
但是这句代码的实质是什么?
该代码会被我们的编译器编译:
或许是内存中的两个字节,然后被这两个字节的位信息初始化为34对应的二进制串。
然而这与类有什么关系呢?
类就是我们自己定义的一个变量类型,但是对 该变量类型定义的变量 的操作不是由编译器完成的,
而是由我们设计程序来完成的。
请仔细的理解上面的话。
下面我解释下。
我们定义一个类。我们一定会在类中安排下数据成员,方法成员。直接的讲,数据成员就是些基本的数据,方法成员
就是我们定义的一些函数。
类就是像int这样的变量类型声明。为什么?
在上面,我们使用int声明了一个i变量,我们可以对其进行+,_,*,/运算。为什么?
这是因为编译器会理解我们给出的语法。也就是对这个i的操作函数实际是由编译器来帮助我们完成的。
我们自己定义了一个新的类。如果我们不在其中加入操作函数。该类的创建于建立一个结构体没有区别。
但是如果我们还在类中添加了针对这个类型的方法函数。也就是相当于我们扩展了编译器的功能。此时编译器
对我们自己新建的变量类型也可以支持。以后,如果我们再使用相同的类,它就会理解。
同时还有下面的相同的地方:
对于int,编译器对其分配的内存是两个字节。
如果我们定义了一个类变量,编译器会对我们的定义的类的语句分析,也会分配相应的内存空间。
不同的是在这些内存空间既有数据空间,也有函数空间。
由于编译器不知道如何处理我们定义的类操作,所以对其操作的工作必须有我们来完成。也就是去针对数据空间,
定义我们的操作函数(方法函数)。
一个对象是什么?对象就是我们指出的内存中我们定义的类的运行代码。由于要便于人理解。我们使用符号来
对应特定的内存空间块。
既然我们在写C的时候,经常要对一个变量初始化。
这样,我们定义类的时候,定义一个工作函数来初始化数据也必然会是常见的。
如此理解,会解释很多的现象。
最后,重复一遍:
类就是我们自己定义的一个变量类型,但是对 该变量类型定义的变量 的操作不是由编译器完成的,
而是由我们通过定义类的方法函数来完成的。