source:http://www.cnblogs.com/hssl/archive/2008/07/01/1233511.html
白话浅谈:类与对象(一)

哈哈,我不够伟大,别跟我学,我始终觉得赚钱是我工作的第一动力,不是我喜欢钱,而且为了体现我的价值!但是要赚的明白,赚的合理,不要成钱的奴隶哦!




好了,不废话了,说说正题!为什么前面说那么多废话呢?其实那是为了下面要说的正题做为铺垫的,正是有了对象,才使千千万万的人能有机会从事IT这一行业!才使编程变的能让我们这些智商不照的人去理解应用!至于为什么?去问大师们吧,我不就不罗嗦了!
类与对象,顾名思义,类嘛不就类别的意思吗?什么叫对象呢?不是谈对象的对象,且听我后面一一道来...
我想大家都吃过月饼,不知可有人知道月饼是怎么做出来的。做月饼是用模具的,把配好的月饼陷放进模具里一磕,拿出来就是一个月饼了。做铁杯子是的要用模具的,把熔化的铁的液体放在铁杯的模具里,冷却后,出来就是铁杯子了。现在这个模具就有了类别的吧,做月饼的叫做月饼 类模具,做铁杯的叫做铁杯 类模具,程序中的类就和这个 类是一个意思的。人类,植物类,猪类,狗类,猫类,猴子类。。。都和程序中的类是一个意思。可见,一个类就是一种东西,它和其他类的东西是不一样的,人类和猪类是一样的吗?说这类有何意义呢?大家都知道月饼类模具是做月饼的,这类的模具就是做月饼的,把原料放进模具不就能出来月饼吗?出来这个月饼,我们叫什么?就叫月饼!更高度点叫什么呢?叫对象!
记住啊,把月饼的料放进月饼的模具里,能做出来月饼,这个月饼就是对象!而把料放进模具里,到做出来这一个过程,我们就称为:对象的实例化!
至此我们要搞清三个问题:
一,类:就是那个月饼的模具
二,对象:就是那个月饼
三,对象的实例化:就是把料放进模具里到成品出来这一过程
那么这个类能吃吗?不能,因为它是模具啊,只有当实例化后我们才能吃这个类产生出来的对象也就是月饼。
程序中啊,我们说的类与对象其实都可以按上述比喻来类比的。
我们创造了一个类,也就相当于我们发明了一个模具,往往我们并不是用这个类(模具)的本身,而是要用类产生的产品(对象)。
那么类是什么样子呢?也就是这个模具是什么样子呢?
先来看看月饼类吧:(用C#语言的,月饼的英语不知道怎么写就用拼音吧)

2



3

4

5

6

7

8

9

10

11

12

13

14



15

16

17

18

19

20

21



22

23

24

25

上面整个代码,就相当于月饼的模具啊,模具里面包括很多东西滴、、、
第4行,就是模具上的一个小孔,色素就是往这个小孔倒的,孔的名字叫做color(色素是能吃的啊)
第7行,是另外一个小孔,香料就是往这个小孔倒的,孔的名字叫做smell(香料也是能吃的啊)
第10行,是模具的一个大槽子,把配好的馅料,就往里倒就行了,槽的名字叫做stuffing
好,现在我们把色素按色素小孔倒进去,香料按香料小孔倒进去,馅倒进大槽里。下面我们就开始做月饼了,比如模具上有个开关,现在我们一按开关,模具开始动了,一会,一个月饼出来了。。。。。。我们一按开关,模具就工作了,怎么工作的?就相当于执行action()这个函数了,函数里面怎么运转的,我们暂且不管,反正它给我做个月饼就行了!!!
那个需要原料的小孔,大槽啊,就相当于程序里的属性或者叫成员,开关一按,开始工作,就相当于程序里的函数或叫方法。这个属性也可以不用填充,一开始就有值的,比如,月饼的尺寸,我们规定好了啊,不要设定了。上面代码中没写啊。
现在总结一下:
我们发明一个模具,叫月饼的模具,这个模具作为一个整体其内部结构与外界无关。我们要往模具里加原料(包括:色素,香料,馅),我们加原料时要往模具不同的地方加,加完后,一按开关,让模具工作,出来一个月饼了。
类比如下:
我们发明一个类,叫做月饼类,这个类作为一个整体其内部结构与外界无关。我们往类里加一些东西,这东西分别给类的不同地方,并通知类开始工作,类工作了,过一会,出来个对象了,这个对象叫:月饼对象。
而从往模具(类)里加料到产生一个月饼(对象)这个过程叫做:对象的实例化。实例化一个月饼,就是完成这样一个过程。
现在发现,又加色素,又加香料,又加馅太麻烦了,我想把这些原料,一起加进去,不要一个一个加,怎么办?我们给这个模具加个功能,就是能接受所有原料一起加进去然后自动把他们区分开来放进各自的小孔,槽里的功能。相当于代码里面第13行的函数,现在我们加原料时只要把,色素,香料,馅混在一起给第13行那个函数就行了。我们称这个函数为:构造函数。也就是接收原料并把他们分配给模具不同部分的这个一个装置!现在知道,我们设计一个模具出来,要靠这模具做成产品,就要往这模具里加原料,让模具生产出产品。我们最初给模具加原料时,是把所有原料一次性给模具的接受装置,由那个接受装置去往模具里面分配原料。所以这个接受装置是必须的,对应程序中的构造函数。大家可以对比着从程序的角度去把整个流程想一遍。
刚才我们说了月饼的模具,都知道,月饼模具本身我们是不能吃的,只有实例化一个月饼后,我们能吃那月饼。
有时,我们想设计一个模具,既能享用此模具产生的东西,也能享用这个模具本身。那不是很好吗?对!上面我说了做铁杯子的模具,都知道,铁杯子的模具是做铁杯子的,但是,设想一下,这个杯子模具本身,就长的和杯子一样的,把铁水倒进去,能出来被子杯子。杯子是盛水的,那么这个模具一样能盛水滴!这种本身就能为我们使用的模具,我们称为静态模具。对应程序里的静态类。这个类不用生产出一个对象,类本身就能为我们所用,叫做:静态类。
忘了告诉你们刚才那个杯子模具啊,是没把的,做出来的都是统一不带把的杯子!(杯子的把知道什么意思吗?就是手柄的意思)那么现在我们要把那个杯子模具改造一下让它带把,其他的东西不动,模具上的花纹啊,高啊,直径啊等等都不动,仅仅加个把。模具拿来,我们改啊改啊,终于有把了。现在这个我们叫做带把的杯子模具。倒点铁水进去,冷却后,哎,出来个带把的杯子了。现在这个带把的杯子模具和前面讲的不带把的杯子的模具有什么差别呢?其实那个不带把的杯子模具啊算是这个带把的老子。也就是这个带把的模具是继承于那个不带把的模具滴,这个带把的和不带把的比,其实什么都一样,仅仅是在把这个方面做了点改造。但是这也是一个新的模具了啊,毕竟和不带把的模具不一样鸟~~这就叫做,模具的继承啊!在程序中,就是类的继承啊,先把一个类拿来再说,拿来后,我们改动一写地方,这样就成为新的类了,这个改动后的类是继承于被改动的那个类。其实有时,我们不改动也可以的啊(看上去没改动),下节说。
现在有个管理上的问题啊,假如,有很多杯子模具,每个模具都继承于不带把的那个,都做了改造,有改高的,有改直径的.....这么多模具统称为杯子模具,但实际上细分是不一样的,容易拿混了啊,所以,我们搞个柜子,柜子有很多抽屉,把那些杯子模具都一一放在抽屉里,并在抽屉上贴个标签,“带把的”,“不带把的”,“小直径的”,“方口的”等等啊
另外搞个柜子,放月饼模具的。现在就容易区分各个模具了,也容易找了,例如:杯子柜子里面“带把的”抽屉,是哪个模具,我想大家都知道是什么东东了。就相当于程序里的:using System.xxx. 这样,两个模具起一个名字都没事,月饼模具叫A模具,我把带把的杯子模具也叫A模具,现在依然可以区分滴,月饼柜子里面的A,和杯子柜子里面的A,肯定不是一个东东。。。。有时,柜子里有很多小柜子,小柜子里面又有很多小小柜子,分的很细的。。。对应程序里的名称空间。
累死了,今天废话叫到这里吧,讲的没水平啊。。。
有错的地方,不好的地方欢迎大家指正!
后两节预告:
白话浅谈:类与对象(二)
介绍:堆内存,栈内存,对象的创建,匿名对象,静态变量,静态方法等
白话浅谈:类与对象(三)
介绍:总结对象的三个特性:封装,继承,多态以及类与对象的具体应用
===============
没人看,我就不再费神了!讲的也没深度!!!