配色: 字号:
类和对象
2013-03-17 | 阅:  转:  |  分享 
  
面向对象是一种编程的方式..

就如同你思考问题的方式一样,是一种规则,方法..

好比C语言的面向过程一样,它的着中点在于问题解决的过程,先干什么,接着干什么,最后干什么..比较明显的过程式,汇编更是面向对象编程的鼻祖..所以,它们很适合编写,像操作系统,嵌入式等这些与硬件亲近,且基本上不需要对程序进行较大修改的程序,用过程式就比较高效了.

而面向对象呢,它就不同于面向过程了,它的着重点在于,怎样表示程序中的对象,这样的程序很适合编写一些像游戏,ERP,等等这样的应用性软件.



举个例子..要写一段程序模拟大自然创造世界的程序:

如果,是过程式的编写方式,首先,创造宇宙,然后从宇宙的某个点开始,创造星系,将全部星系创造完毕,星系创造完毕,又从某个星系,开始创造该星系所有的子星系,完成后创造该星系中的其他子星系,将所有星系中的所有子星系全部创建完成之后,就开始在从整个宇宙中的某个星系中的子星系的某个星球开始,建立完整的生态体系,用地球做比喻,首先,建立细菌系,然后将细菌系分裂成动物,植物系列,动物系列,进行几何式分裂,形成几亿种生命形态..依次为宇宙中的每个星球建立生态体系,完毕之后,宇宙的过程式创造就完毕了..这种方式有个明显的不足的地方就是,当你在整个宇宙,创造完毕之后要加入一个新的星系,那对与程序员来说那将是灾难性的,而且,可扩展性极差..

再看看面向对象:

首先为宇宙中的基本对象建模,宇宙这个结构中半包含的成员

class宇宙

{

class大星系;

class宇宙真空空间;

public:

//宇宙能进行的动作

宇宙();

宇宙(宇宙&a);//复制宇宙..

voidoperator=(宇宙&a);//复制宇宙.

~宇宙();//自动销毁宇宙..

void增加星系(unsignedint新增星系编号);

void销毁星系(unsignedint已有星系编号);

...

...

...//等等操作

};

class银河系:public大星系

{

};

class太阳系:public银河系

{

class地球;

class火星;

...

};

class地球

{

class动物;

class植物;

class地球的状态;

};

class地球的状态

{

class陆地;

class海洋;

...

};

class陆地

{

class亚洲;

class欧洲;

...

}

class亚洲

{

class中国;

class印度;

class蒙古;

...

};

class中国

{

class省区[31];

}

class省区

{

class市区;

...

};

class市区;

{

string省名;

int人口;

double面积;

...

}

将宇宙中所有这些对象建模之后,只需生成一个宇宙对象,咋们的宇宙不就生成了..而且你要加入新的星系,或者毁灭某个星系不就轻而易举,或者要在宇宙某个地方复制个地球,那还会有什么难呢?

但并不是说面向对象的编程方式就能完全没有过程式编程,那是不可能,好比,你把车子的所有部分造好了,你不组装起来,它又怎么可能开得起来呢,其实C语言中同样有面向对象,struct就是C语言的对象组织方式,只不过再C++中它得到了飞升..

这两种编程的方式也没有谁强谁弱的说法,如果,用Java去编写操作系统,无异于用诸葛亮去单条吕布..反之,用汇编去编写网络游戏,无异与让张飞去考取状元,术业有专攻..

















类是对象的软件抽象,是创建对象的模板。例如,如果一个人被看作一个对象的话,则人这个物种就可以被看作一个类。类定义描述了包括数据和功能在内的结构,对象由其创建。一个类表示一组相似的对象。对象是类的实例。



为什么需要类,想象这样一个情况,假如我们要编写一个Flash游戏,里面要有一些能自主活动的小人,这些小人都有相同的体貌特征和活动能力,那么,若我们要为每个小人编写程序的话,则工作量毫无疑问是巨大和重复的。在这种情况下,我们就应该创建一个“小人”类,以后每当需要一个新的小人时就从“小人”类生成一个小人即可。















类实际上是对某种类型的对象定义变量和方法的原型。它表示对现实生活中一类具有共同特征的事物的抽象,是面向对象编程的基础。

类是对某个对象的定义。它包含有关对象动作方式的信息,包括它的名称、方法、属性和事件。实际上它本身并不是对象,因为它不存在于内存中。当引用类的代码运行时,类的一个新的实例,即对象,就在内存中创建了。虽然只有一个类,但能从这个类在内存中创建多个相同类型的对象。

可以把类看作“理论上”的对象,也就是说,它为对象提供蓝图,但在内存中并不存在。从这个蓝图可以创建任何数量的对象。从类创建的所有对象都有相同的成员:属性、方法和事件。但是,每个对象都象一个独立的实体一样动作。例如,一个对象的属性可以设置成与同类型的其他对象不同的值。
献花(0)
+1
(本文系暖风醉伊人首藏)