| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5469 人关注过本帖, 1 人收藏
标题:类的实质思考
只看楼主 加入收藏
枯藤天涯
Rank: 1
等 级:新手上路
帖 子:99
专家分:0
注 册:2007-4-25
结帖率:100%
收藏(1)
 问题点数:0 回复次数:15 
类的实质思考
类的实质思考
枯藤天涯原创
首发于编程论坛



面向对象编程,到底什么是面向对象?面向对象程序设计到底有什么强大的力量?
面向对象编程和面向过程编程到底的区别是什么?
如何解释类,对象,继承,封装这些概念?
一段思考后,有了下面的理解。抛砖引玉!以期引发讨论。
从C中的一段代码开始:
int i;
i=34;
该代码简单不过,但是它与类的概念却又相同的地方。
我们声明了一个变量i,然后对其给予一个值。
但是这句代码的实质是什么?
该代码会被我们的编译器编译:
或许是内存中的两个字节,然后被这两个字节的位信息初始化为34对应的二进制串。

然而这与类有什么关系呢?
类就是我们自己定义的一个变量类型,但是对 该变量类型定义的变量 的操作不是由编译器完成的,
而是由我们设计程序来完成的。
请仔细的理解上面的话。
下面我解释下。
我们定义一个类。我们一定会在类中安排下数据成员,方法成员。直接的讲,数据成员就是些基本的数据,方法成员
就是我们定义的一些函数。

类就是像int这样的变量类型声明。为什么?
在上面,我们使用int声明了一个i变量,我们可以对其进行+,_,*,/运算。为什么?
这是因为编译器会理解我们给出的语法。也就是对这个i的操作函数实际是由编译器来帮助我们完成的。
我们自己定义了一个新的类。如果我们不在其中加入操作函数。该类的创建于建立一个结构体没有区别。
但是如果我们还在类中添加了针对这个类型的方法函数。也就是相当于我们扩展了编译器的功能。此时编译器
对我们自己新建的变量类型也可以支持。以后,如果我们再使用相同的类,它就会理解。

同时还有下面的相同的地方:
对于int,编译器对其分配的内存是两个字节。
如果我们定义了一个类变量,编译器会对我们的定义的类的语句分析,也会分配相应的内存空间。
不同的是在这些内存空间既有数据空间,也有函数空间。
由于编译器不知道如何处理我们定义的类操作,所以对其操作的工作必须有我们来完成。也就是去针对数据空间,
定义我们的操作函数(方法函数)。

一个对象是什么?对象就是我们指出的内存中我们定义的类的运行代码。由于要便于人理解。我们使用符号来
对应特定的内存空间块。
既然我们在写C的时候,经常要对一个变量初始化。
这样,我们定义类的时候,定义一个工作函数来初始化数据也必然会是常见的。
如此理解,会解释很多的现象。

最后,重复一遍:
类就是我们自己定义的一个变量类型,但是对 该变量类型定义的变量 的操作不是由编译器完成的,
而是由我们通过定义类的方法函数来完成的。
搜索更多相关主题的帖子: 实质 思考 
2008-12-10 21:19
大师级的巫医
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2009-10-27
收藏
得分:0 
还是不懂
2009-10-27 14:23
xiaowanzhu
Rank: 1
等 级:新手上路
帖 子:6
专家分:1
注 册:2009-9-14
收藏
得分:0 
深奥 领教了

青春我最狂
2009-11-03 11:14
handle2
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2009-11-5
收藏
得分:0 
我觉得应该从更一般的角度去理解,自然界中本来就有一些事物,一些对象,不是人去定义类的数据成员与操作,而是作为独立的自然对象它本来就是这样的,它可以做些什么,用什么做,我们只是意识到他的这种属性后用编程语言去描述他,其实这是一种思想,描述自然的方式很多,有面向过程,面向对象的思想,还有其他,只是面向对象这种思想由java为人所晓,但确实早已存在的。也许语言只是表面,思想才是深层的东西,懂得一种思想,也许就会写出一种新的语言。
2009-11-05 22:29
xiangzhenlin
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2009-11-8
收藏
得分:0 
写得很好啊!
2009-11-08 16:38
Joe_Fan
Rank: 1
等 级:新手上路
帖 子:3
专家分:5
注 册:2009-11-9
收藏
得分:0 
面向对象的实现最终还是要靠面向过程,先学好面向过程才是王道。
现在的面向对象是用起来方便。
2009-11-09 10:33
fgchg911
Rank: 4
等 级:业余侠客
威 望:1
帖 子:131
专家分:204
注 册:2009-9-6
收藏
得分:0 
楼主说的很对,类可以看成数据类型,就像int ,char, struct time, 很对,但也是废话
我先看到了那段红字,上面没细看
2009-11-14 01:08
fgchg911
Rank: 4
等 级:业余侠客
威 望:1
帖 子:131
专家分:204
注 册:2009-9-6
收藏
得分:0 
类的实质,我觉得楼主这解释的根本就不是实质,只是表象,实质就应该研究类是怎么实现的,创建对象时自动调用构造函数,我们只看到一个单步就跳那去了,但这是怎么实现的,
我学c的,按c的理解,根本就没有看到函数调用,怎么就跑了呢
但在汇编代码里有这么一条
call        @ILT+5(tm::tm) (0040100a)
也就是那语句编译时被翻译成了函数调用,
唉,都是编译器的问题,你写一段代码,你认识的,它一编译,变成计算机认识的,至于计算机看到的是不是你所想的,这中间就看编译器了
2009-11-14 02:07
juejitianya
Rank: 4
等 级:业余侠客
威 望:3
帖 子:44
专家分:272
注 册:2009-9-11
收藏
得分:0 
楼主说的很有道理,受益匪浅,呵呵
2009-11-15 09:36
谢志华
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2009-12-17
收藏
得分:0 
回复 3楼 xiaowanzhu
说得太好了
2009-12-17 20:13
快速回复:类的实质思考
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026663 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved