1.面向对象与面向过程

总结:
对于面向过程思想,我们扮演的是执行者,凡事都要靠自己完成。
对于面向对象思想,我们扮演的是指挥官,只要找到相应的对象,让它们帮我们做具体的事情即可。
面向过程思想的劣势,编写的代码都是一些变量和函数,随着程序功能的不断增加,变量和函数就会越来越多,此时容易遇到命名冲突的问题,由于各种功能的代码交织在一起,导致代码结构混乱,变得难以理解、维护和复用。
面向对象思想的优势,可以将同一类事物的操作代码封装成对象,将用到的变量和函数作为对象的属性和方法,然后通过对象去调用,这样可以使代码结构清晰、层次分明。
2.面向对象特征
封装:指的是隐藏内部的实现细节,只对外开放操作接口。
接口:就是对象的方法,无论对象的内部多么复杂,用户只需知道这些接口怎么使用即可。
举例:电脑是非常高精密的电子设备,其实现原理也非常复杂,而用户在使用时并不需要知道这些细节,只要操作键盘和鼠标就可以使用。
优势:无论一个对象内部的代码经过了多少次修改,只要不改变接口,就不会影响到使用这个对象时编写的代码。
继承:是指一个对象继承另一个对象的成员,从而在不改变另一个对象的前提下进行扩展。
举例1:动物与猫和狗的关系,人类的繁衍等。

举例2:String对象就是对所有字符串的抽象,所有字符串都具有toUpperCase()方法,用来将字符串转换为大写,这个方法其实就是继承自String对象。
优势:
可在保持接口兼容的前提下对功能进行扩展。
增强了代码的复用性,为程序的修改和补充提供便利。
多态:指的是同一个操作作用于不同的对象,会产生不同的执行结果。
理解:实际上JavaScript被设计成一种弱类型语言(即一个变量可以存储任意类型的数据),就是多态性的体现。
例如,数字、数组、函数都具有toString()方法,当使用不同的对象调用该方法时,执行结果不同。
提示:在面向对象中,多态性的实现往往离不开继承,这是因为当多个对象继承了同一个对象后,就获得了相同的方法,然后根据每个对象的不同来改变同名方法的执行结果。
提示:虽然面向对象有封装、继承、多态这些设计思想,但并不表示只要满足这些特征就可以设计出优秀的程序,开发人员还需要考虑如何合理的运用这些特征。
例1:在封装时,如何给外部调用者提供完整且最小的接口,使外部调用者可以顺利得到想要的功能,不需要研究其内部的细节。
例2:在进行继承和多态设计时,对于继承了同一个对象的多种不同的子对象,如何设计一套相同的方法进行操作。

