什么是面向对象?
面向对象是一种编程范式,它涉及到了软件开发的各个方面,如面向对象的分析、设计以及编程实现。面向对象的首要目标就是要搞清楚什么是对象?现实世界中的一切事物你都可以把它抽象成一个对象(把它当做是一个对象),然后再对它进行分析、设计、最后才是的编程实现。就比如一辆自行车,我们对一辆自行车分析,它是什么样的?它能干什么?就比如有一辆自行车是红色的、它的价格是300块钱,速度是每分钟一千米。这就是一个对象。我们再针对这个对象进行分析,它的颜色是红色的,价格300块,速度1000米/分钟,它的功能是骑行。显然,我们可以从这个对象出发进行联想设计,每一辆自行车都应该有它的颜色、价格以及速度,都能够骑行,我们就设计出了一个制造自行车的一个模板,根据这个模板去创造出很多不同的自行车。
什么是类?
类就是上面所提到的模板,它是对象的蓝图。
什么是属性?
属性是类的一个组成部分,用来表示对象的状态。如上面提到的例子,颜色、价格、速度都应该被设计成类的属性。
什么是方法?
方法也是类的一个组成部分,用来表示对象的行为。比如上面提到的例子,骑行应该被设计成类的一个方法。
什么是继承?
继承是面向对象的特性之一,以上面的例子为例,当我们想给自行车加点别的装饰或者功能的时候是直接在模板上增加,然后再去拿这个模板创造出对象吗?这样做也可以,但这是一个好的选择吗?其实还有更好的选择,我们可以在保留原来的模板的同时,再复制这个模板的内容根据我们的需求去进行修改,做出一个新的模板。这样既有了原来的模板,又有了新的模板。就比如说一个做老人机的一个厂家看到了广大年轻人的市场,就想着也去做智能机(假设智能机是老人机的一个升级),厂家就拿着老人机的模板进行升级,原来的老人机模板就不用了吗?如果不用了,那老人们怎么办呢?假设老人们也会用智能机,但是老人们却因为一些自己用不上并且也不需要的功能多花费了金额,这样真的好吗?如果说厂家又想拓展业务,要在智能机模板上修改,修改过后智能机模板又不用了吗?显然不是,只需要保留原来的模板,再在原来的模板上做点修改延伸即可。在继承的讨论上,我们都是从模板上来进行讨论的。也就是说,继承其实是类与类之间的一种关系。
什么是多态?
多态也是面向对象的特性之一。从继承中我们可以发现这样的问题,假设模板B、C、D都继承了模板A,它们创造出来的对象都可以完成某个行为,但是完成的状态是不一样的。比如人买票,小孩买票和学生买票、大人买票都继承了人买票的模板,但是小孩免费、学生半价、成人全价,这就是不同的状态。多态是同一事物表现出的多种形态。比如都是人,但有高矮胖瘦;都是工作,有人敲代码、有人做PPT。
什么是封装?
封装也是面向对象的特性之一。封装是一种保护屏障,隐藏对象属性和实现细节,仅提供公开接口。比如说,我们去手机店买手机,我们知道手机怎么用,但是不知道手机怎么做的。
什么是抽象?
抽象也被认为是面向对象的特性之一,是从众多事物中抽取出共同的,本质性的特征。比如我们对很多事物的定义都是一种抽象,都是把他们所共同具有的,最本质性的特征做一个归类。