[转]Understanding of Objects-Oriented, Classes, Instances
From:http://hi.baidu.com/vrhero/blog/item/1936f319a1420d7adab4bda6.html 这篇文章是为初学者写的,如果您是高手,路过就不用进门了。欢迎转载,有劳您注明来源。 谈到面向对象,其实应该没什么好说的了。弹指十多年,这个东西已经不是什么新鲜概念而是事实上的开发标准了。不过对于大多数初学者,甚至是不在少数的一些 Coder 来讲 OO 还是一个概念而没有成为一种思想。 那么究竟怎么理解 OO 呢? 首先你得搞明白Object的含义。所谓对象,在 Developer 眼里万物皆为对象。 比如,我们从早上起床开始: 睁开眼(Object)看见天(Object)亮了,那是因为有光(Object),抬头(Object)望望窗(Object)外,太阳(Object)出来了... 我们能叫上名字的各种实体就是对象,而我们接触到的就是这些对象的实例(Instance)。所以面向对象首先就是面向我们能接触到的各个实例。但这样就有问题了,我要这样说:早上起床睁开对象看见对象亮了,那是因为有对象,抬对象望望对象外,对象出来了...不但我自己糊涂你还得骂我神经病,呵呵。 因为我们接触到的各个对象实例有很大的不同,才有这五彩缤纷的世界。要是一眼望过去全是一模一样的“对象”,我会疯掉,相信你也会。所以我们会根据不同的实例来细分这些对象: 睁开眼(Object:Eye)看见天(Object:Sky)亮了,那是光(Object:Light),抬头(Object:Head)望望窗(Object:Window)外,太阳(Object:Sun)出来了... 是不是清楚多了?那么我们是怎么区分这些对象呢?天上有一个太阳一个月亮,我们从小就知道它们是不同的,甚至不需要理由。为什么?因为它们的外观形态活动规律都有极大的区别,这个就是它们各自独有的特征了。这些特征有些是可以用数值来描述的,例如肩高超过 38 厘米的属于大型犬(我们某些衙门一刀切政策的特征),这些是对象具有的状态;有些是根据其动作来判断的,例如会叫的狗不咬人(千万别信!),这些是对象具有的行为。我们区分所有的对象都是靠它们具有的状态和行为来识别,比如你看见一个对象,它有5吨重,3米高,四条粗腿,一条长鼻子,两只大白牙,即使你从没见过你也应该知道它是什么,因为它具有的这些特征我们至少从书本上见过。再比如我现在敲这段文字的时候,腿上一阵奇痒,不用看我就知道屋子里至少有一只蚊子而且还是位蚊子小姐,因为我已经知道在这种情况下只有母蚊子才具有“叮”这种行为。 新的问题又来了。比如我们这个小区有不少养宠物的,每天傍晚狗跳猫蹿的煞是热闹。看上去狗都是狗猫都是猫,可是每只狗都有不同每只猫也都相异。原因是它们主要的状态和行为虽然都完全相同,却又都有各自独有的特性。所以我们还得继续细分,这就有了类(Class)。类的状态称为属性(Property),而行为就是方法(Method)了。 我知道吉娃娃是狗,雪纳瑞也是狗,只不过两者看上去的差异实在是巨大。但它们都有犬类的主要属性和方法(别以为吉娃娃就不咬人,你试试看?呵呵),因此它们都属于犬科动物(Class Canine)。而且我还知道犬科动物属于哺乳动物(Class Mammalia),哺乳动物属于动物(Class Zoology),动物属于生物(Class Biology);生物呢?我不知道了(对不起中学生物老师了,呵呵),就直接归类到对象吧。OK,整理一下: Object——Biology——Zoology——Mammalia——Canine——Schnauzer 耶?很面熟吧。对了,忽略掉 Object 再把其他分支加上去就是生物分类树了。我不是生物学家但我知道一个生物学家要研究犬科动物他决定不会试图去找一只 Canine,因为压根儿就没有这种东东,他只能去研究Schnauzer、Chihuahua或者其他什么能找到的狗狗,因为我们只能接触到Instance! 好了,到这里你应该有点想法了吧。等等,最重要的类还没怎么说呢!初学者一接触 OO,通常就是被类搞得有点迷糊,很多教材上来就是一句“要理解面向对象首先要理解类!”,然后抓住 Class 一通猛灌,你酒量大点还行,否则难免被灌到晕菜。 而我费了这么多口舌为什么还没有讲到什么是类?因为类这个东西本来就是抽象的,是对象具有的属性和方法的集合,你搞清楚了对象、实例、属性、方法,我就不信以你的智慧还不知道什么是类。 接下来我们看看这些术语在软件开发中的定义: 对象(Object)——对象是人们要进行研究的任何事物,从最简单的整数到复杂的飞机等均可看作对象,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件。——专业的解释是不是很艰涩? 类(Class)——具有相同或相似性质的对象的抽象就是类。因此,对象的抽象是类,类的具体化就是对象,也可以说类的实例是对象。——有点拗口吧,你要是上来就看这个不去管 Object,不晕才怪。 不得不提到消息(Message) 搞清楚了对象和类。我们再来看看 OO 的特征: 1.对象唯一性 2.分类性 3.继承性 继承性是面向对象程序设计语言不同于其它语言的最重要的特点,是其他语言所没有的。 在类层次中,子类只继承一个父类的数据结构和方法,则称为单重继承。——比如...单细胞动物?非生物专业不敢乱讲。 4.多态性 写到这儿天色已微明,肚子也在咕咕叫(卖早点的还不出来啊),其他的留待下回分解吧,呵呵。最后再来看看起床的过程: 睁开(Eye.Open)眼(Object:Eye)看见(Event:I.See)天(Object:Sky)亮(Sky.Dawn)了,那是光(Object:Light),抬(Head.Up)头(Object:Head)望望(I.Look)窗(Object:Window)外,太阳(Object:Sun)出来(Sun.Sunup)了... 这样是不是就清楚了 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |