很想自己写一点东西,可是谁让咱是初学者了,写不出来挺自卑,可是又想想谁还不是从初学者一步一步走过来的呢(呵呵,典型啊Q精神),听人家说面向对象很重要,这几天看了很多文章,感觉这篇文章还不错,可还是没理解透,希望过路的高手给俺指点迷津,谢谢了先。
谈到面向对象,其实应该没什么好说的了。弹指十多年,这个东西已经不是什么新鲜概念而是事实上的开发标准了。不过对于大多数初学者,甚至是不在少数的一些 Coder 来讲 OO 还是一个概念而没有成为一种思想。 那么究竟怎么理解 OO 呢?
首先你得搞明白
比如,我们从早上起床开始:
我们能叫上名字的各种实体就是对象,而我们接触到的就是这些对象的实例(
因为我们接触到的各个对象实例有很大的不同,才有这五彩缤纷的世界。要是一眼望过去全是一模一样的“对象”,我会疯掉,相信你也会。所以我们会根据不同的实例来细分这些对象:
是不是清楚多了?那么我们是怎么区分这些对象呢?天上有一个太阳一个月亮,我们从小就知道它们是不同的,甚至不需要理由。为什么?因为它们的外观形态活动规律都有极大的区别,这个就是它们各自独有的特征了。这些特征有些是可以用数值来描述的,例如肩高超过 38 厘米的属于大型犬(我们某些衙门一刀切政策的特征),这些是对象具有的状态;有些是根据其动作来判断的,例如会叫的狗不咬人(千万别信!),这些是对象具有的行为。我们区分所有的对象都是靠它们具有的状态和行为来识别,比如你看见一个对象,它有5吨重,3米高,四条粗腿,一条长鼻子,两只大白牙,即使你从没见过你也应该知道它是什么,因为它具有的这些特征我们至少从书本上见过。再比如我现在敲这段文字的时候,腿上一阵奇痒,不用看我就知道屋子里至少有一只蚊子而且还是位蚊子小姐,因为我已经知道在这种情况下只有母蚊子才具有“叮”这种行为。
新的问题又来了。比如我们这个小区有不少养宠物的,每天傍晚狗跳猫蹿的煞是热闹。看上去狗都是狗猫都是猫,可是每只狗都有不同每只猫也都相异。原因是它们主要的状态和行为虽然都完全相同,却又都有各自独有的特性。所以我们还得继续细分,这就有了类(
我知道吉娃娃是狗,雪纳瑞也是狗,只不过两者看上去的差异实在是巨大。但它们都有犬类的主要属性和方法(别以为吉娃娃就不咬人,你试试看?呵呵),因此它们都属于犬科动物(Class Canine)。而且我还知道犬科动物属于哺乳动物(Class Mammalia),哺乳动物属于动物(Class Zoology),动物属于生物(Class Biology);生物呢?我不知道了(对不起中学生物老师了,呵呵),就直接归类到对象吧。OK,整理一下:
Object——Biology——Zoology——Mammalia——Canine——Schnauzer
|——Chihuahua
耶?很面熟吧。对了,忽略掉 Object 再把其他分支加上去就是生物分类树了。我不是生物学家但我知道一个生物学家要研究犬科动物他决定不会试图去找一只 Canine,因为压根儿就没有这种东东,他只能去研究Schnauzer、Chihuahua或者其他什么能找到的狗狗,因为我们只能接触到
好了,到这里你应该有点想法了吧。等等,最重要的
而我费了这么多口舌为什么还没有讲到什么是类?因为类这个东西本来就是抽象的,是
接下来我们看看这些术语在软件开发中的定义:
对象具有状态,一个对象用数据值来描述它的状态。——对象既然是实体,当然会有状态,比如说我现在的状态是:清醒,还有饿(先去找找有什么吃的吧)
对象还有行为,用于改变对象的状态。——对象要么是活的,可以自己改变状态,比如我困了就会去睡,睡觉的时候状态就改变了(睡着了就不饿了~~55~居然没找到能填肚子的);要么是死的,可以被活的对象改变状态,比如要是我现在找到一包泡面,我担保它很快改变它的状态。
对象实现了数据和操作的结合,使数据和操作封装于对象的统一体中。——我想着这篇文字,动手把它敲出来,动手得我自己来(我要是有秘书的话...那至少也得动嘴吧),知识也是我自己的(如果不是那就成盗版了)。
类具有
类具有
类具有
不得不提到
对象之间进行通信的结构叫做消息。在对象的方法中,当一个消息发送给某个对象时,消息包含接收对象去执行某种操作的信息。发送一条消息至少要包括说明接受消息的对象名、发送给该对象的消息名(即对象名、方法名)。——想想你打电话或发邮件的过程,我们研究对象和类最终的目的是为了传递消息。对我们来说,世上没有无意义的状态和行为,所有这些我们都理解为对对象认知的消息。
搞清楚了对象和类。我们再来看看 OO 的特征:
1.
每个对象都有自身唯一的标识,通过这种标识,可找到相应的对象。在对象的整个生命期中,它的标识都不改变,不同的对象不能有相同的标识。——你是你我就是我,到死都不会变成另一个人。整容?有本事你把 DNA 也整整。
2.
分类性是指将具有一致的数据结构(属性)和行为(方法)的对象抽象成类。一个类就是这样一种抽象,它反映了与应用有关的重要性质,而忽略其他一些无关内容。
3.
继承性是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并加入若干新的内容。——这个是OO 的重点了!想当年 Pre-VB6 的时代,因为伟大的 VB 居然不支持继承让多少 VB Developer 抬不起头来,现如今伟大的 .NET 终于可以让他们重振雄风了,呵呵。
继承性是面向对象程序设计语言不同于其它语言的最重要的特点,是其他语言所没有的。
在类层次中,子类只继承一个父类的数据结构和方法,则称为单重继承。——比如...单细胞动物?非生物专业不敢乱讲。
在类层次中,子类继承了多个父类的数据结构和方法,则称为多重继承。——这个多了,最典型恐怕是骡子了。
在软件开发中,类的继承性使所建立的软件具有开放性、可扩充性,这是信息组织与分类的行之有效的方法,它简化了对象、类的创建工作量,增加了代码的
4.
多态性使指相同的操作或函数、过程可作用于多种类型的对象上并获得不同的结果。不同的对象,收到同一消息可以产生不同的结果,这种现象称为多态性。——同一品种的狗不同的训练方法可以让它们在“咬”的时候有不同的“咬”法。
多态性允许每个对象以适合自身的方式去响应共同的消息。
多态性增强了软件的灵活性和可重用性。
写到这儿天色已微明,肚子也在咕咕叫(卖早点的还不出来啊),其他的留待下回分解吧,呵呵。最后再来看看起床的过程:
这样是不是就清楚了?
![](https://img2024.cnblogs.com/blog/35695/202406/35695-20240614120651454-1867031816.jpg)