再小的帆也能够远航💪
目录
1. 面向对象程序设计概述
面向对象程序设计(object-oriented programming OOP)是当今主流的程序设计范型。它取代了20世纪70年代的“结构化”或过程式编程技术。
1.1 什么是面向对象
面向对象程序设计方法是尽可能模拟人类的思维方式,使得软件的开发方法与过程尽可能接近人类认识世界、解决现实问题的方法和过程,也即使得描述问题的问题空间与问题的解决方案空间在结构上尽可能一致,把客观世界中的实体抽象为问题域中的对象。
1.2 面向对象与面向过程
面向对象与面向过程是两种截然不同的思维方式
面向过程
侧重于亲力亲为,在程序设计中将问题步骤化,然后一个一个逐个去解决。总结起来就是八个字自顶向下 逐步细化。
面向对象
则表现为“找人办事”,找一些可以解决问题的对象来处理问题,只要对象能够满足要求,就不必关心其功能到底是如何实现的。总结起来就是两个字偷懒。
举一个现实生活中洗衣服的例子:
面向过程
相当于你亲自洗,按部就班地把衣服脱下来,放入盆中,加入洗衣液,使劲揉搓,然后漂洗,然后晾晒。以达到把衣服洗干净的目的。
面向对象
则是“找人办事”,比如你可以找你的女盆友帮你洗,什么?你没有女朋友?那好吧,那就找一台洗衣机帮忙,你只需要把衣服脱下来扔进洗衣机,剩下的就交给它了。只要它能达到把衣服洗干净的目的,那你就不必关心洗衣机的具体实现原理,只要知道怎么用就可以了。
除此之外还有很多例子,比如你饿了要吃饭,面向过程就是你自己买菜做饭然后吃完洗碗。而面向对象就像是你直接找了个餐馆,一切交给厨师,你只负责吃就行了。毕竟不管是面向对象还是面向过程,你的主要目的就是吃饱饭而已。
1.3 面向对象三大特征
- 封装
所谓封装
就是一种信息隐藏的技术,就是把属性进行私有化,简单点来说就是把对象的行为和属性看做是一个密不可分的整体,或者就是指把不需要把外界知道的信息进行隐藏,使得代码模块化。比如刚刚提到的洗衣机,它就是一种封装,将洗衣功能的实现隐藏于机身内部,外界无需知道它的功能是如何实现的,只需要知道使用它就可以将衣服洗干净就行了。 - 继承
继承
是面向对象的重要特征,如果一个类想要扩展另一个类的功能,就可以使用继承来实现,子类继承父类,那么子类就有了父类的一些属性和行为。继承也是一种共性抽取,Dog类和Cat类都有例如“颜色”,“品种”,“体重”等属性,都有“进食”,“睡觉”,“嬉戏”等行为。这些共性的属性和行为就可以向上抽取,定义在Animal类当中,这样只要Dog类和Cat类继承了Animal类,就无需再各自定义这些共性的内容,转而通过继承的方式,获取共性内容。 - 多态
所谓多态
就是对一个实例的相同方法在不同的情况下有不同表现形式。多态机制使得不同内部结构的对象可以共享相同的外部接口。这意味着,虽然不同类的内部操作不同,但是可以通过一个公共类,他们可以通过相同的方法给与调用。例如上文中所说的Dog类继承了Animal类,那么就可以把Dog类的对象当作Animal来使用。多态还可以体现在方法的重载上(后文叙述)。
2. 类与对象
类(class)
是对象的抽象描述,对象
是类的具体化实例。
可以把类看作构造对象的蓝图或者模版,比如生产手机之前,需要画手机的图纸,图纸中标识了手机应该有的尺寸,颜色,材质等必要信息。然后根据设计图纸就可以生产出一部部手机。这里的手机图纸就相当于类,而生产出的一部部手机就可以看成对象,手机图纸是手机的抽象描