当前位置: 爱符号 - 所有分类 - 资源共享 - 软件 - 编程开发 - [编程思想]面向对象,你如何理解?
[编程思想]面向对象,你如何理解? [BianChengSiXiang]MianXiangDuiXiang,NiRuHeLiJie?
符号空间 发表于:2012-12-13 10:53:39 阅读(12342)
关键词:面向对象 面向对象 编程思想 编程思想 多态 多态
摘要:定义:面向的一切都是对象。最大的特性:求同存异。

以前有人来面试的时候,我都会这样问:

    问:知道面向对象吗?

    答:知道。

    问:什么是面向对象?

    答:面向的一切‘皆’为对象。

    问:数字‘1’‘2’是对象吗?

    答:不是。

    问:那是什么呢?

    答:常量。。。


当我听到‘皆’为对象的时候,就知道这个人是背书背出来的,因为‘皆’字说出来比较绕口,只有书上才会这样写。

一个人讲述自己的理解时,经常用的是‘都’,‘全部’,而不是‘皆’这种文雅的字眼。


那么什么是面向对象呢?

面向对象的定义很简单:面向的一切都是对象。

有人会问,那还不是一样是这个定义。

是的,确实是这个定义,但有多少人理解就难说了。


那么我们知道定义之后,就要来证实了。

数字1是不是对象?

我们先看数字1是什么类型,在大多数语言里面,数字一般是  int 类型(有的为int32、integer),那么我们是不是可以这样去说,

数字1 是int类型的实例?那么这样的话,数字1就是一个对象了。

懂点的人知道,int是结构类型,但是不管怎么说,它是一种类型,是实实在在的东西。

所以不要经常当常量用就忘记它的本义了。


那么总结一句话:我们认为它存在的东西,就是对象。


所以‘人类’是对象吗?

很明显这不是对象,它是一个‘类’,用来描述某一事物的特征的。

但是‘小明’就是一个对象,他是一个人,是‘人类’的一个实例,他是存在的。


当你明白‘面向对象’的定义后,后面的事情就变得容易了,因为‘抽象’其实并不神秘,是那些技术人员故弄玄虚,弄得大家满头云雾,其实用白话来讲述多好,

非要以为有多高的学问一样,弄得很专业的样子。其实越是想专业就是不专业的表现。


面向对象,还有一个最大的特性:求同存异。

相同的都被封装,变成接口、抽象类等,而不同的都变成后期的继承、实现、重写,这样多态就应运而生。


还是用一个例子来说明吧。

现实生活中,水杯大家都用过吧,但是你发现没有,它可以装牛奶,可以装开水,可以装果汁。那有没有想过这是为什么呢?

其实对于水杯来说,厂家只对它做了一个功能:装液体。没错,只要是液体它都可以装进去,有的人说那装硫酸到塑料杯里面可以吗?

当然可以,只是你可能要换一个新的杯子了。

我们不去讨论装进去后会怎么样,因为我们这里讲的是杯子,对装这个功能没有多大的要求,只要是液体就可以。

所以再来看:开水是液体、牛奶是液体、果汁是液体,所以结果就是它们是同一类的东西。

在这里“多态”就出现了,多态就是不管你们将来用什么形态,我只对一些基础的形态有要求。

就如这个例子中,只对‘液体’这种形态有要求,至于你最终是水还是牛奶,没有任何的限制。


有的人会说,那我装固体也可以啊(重载),那是另外一回事,我们这里只讲装水的情况。

所以把原本是牛奶、开水、果汁这3种不同的东西,用‘求同存异’的原则,都归纳为液体,而不同的就是各自的特性,比如牛奶是什么颜色,什么成份。

而液体的不同形态,却很好的说明了多态的应用,也就是不管你是什么样的,只要满足这样的基本条件就可以。

其实可以看看安检门就知道了,不管是老人还是小孩,只要是人就可以,如果弄头大象过去就不行,因为这不是人。


面向对象扇大门从此向你打开。


而继承、接口、抽象类,实现、重写、虚方法、抽象方法,这些都不是很重要的,我会找个时候再说它们如何去理解与应用。


这只是我个人的理解,时间有限,写得也不一定多好,有什么问题欢迎回复。


声明:以上内容仅代表作者观点,不代表爱符号赞成此内容或立场