注意: 面向对象不是一种语法,而是一种思想,是一种编程模式
面向对象编程(OOP)是计算机科学中一个年代久远的编程范式。现在所知的一些OOP概念最开始出现于上个世纪50年代,可是直到1967年Simula及后来Smalltalk语言的出现,可辨识的OOP才应运而生。
概念
OOP的基础理念非常简单直观:对象 是一个逻辑相关的数据和功能的集合。它以人类对世界的自认理解为设计理念。好比一辆车,它有数据(品牌、型号、门数、VIN等等)和功能(加速、减速、刹车、移动、开门等等)。此外OOP使得编程人员能够以抽象(一辆车)和具体(某辆具体的车)的思维去思考事物。
面向对象(oop):把所有的需求看成一个对象,对对象进行描述分析 然后围绕这个对象编程过程
面向过程:按照需要一个步骤一个步骤的去完成,注重过程。
利用面向对象编程:
-
创建对象:字面量 let obj = {} 内置构造函数 let obj = new Object() 工程函数创建对相关
-
描述对象:(1)静态属性:这个对象有什么? (2)动态方法:这个对象能做什么?
-
使用对象:当需要这个对象的功能时 那么就调用该对象即可。
构造函数
//创建对象 let obj = {} //这个对象他有什么特征 obj.name = "王五"; obj.age = 24; obj.sex = "女"; obj.height=172; //这个对象会什么 obj.dancing = function(){ console.log(this.name + "去唱歌咯!");//王五去唱歌咯! } //使用对象 obj.dancing() obj.running = function(){ console.log(this.name + "去跑步咯!");//王五去跑步咯! } //使用对象 obj.running()
箭头函数
//创建对象
let obj = {}
//这个对象他有什么特征
obj.name = "王五";
obj.age = 24;
obj.sex = "女";
obj.height=172;
//这个对象会什么
obj.dancing = ()=>{
console.log(this.name + "去唱歌咯!");//去跑步咯!去唱歌咯!
}
//使用对象
obj.dancing()
obj.running = ()=>{
console.log(this.name + "去跑步咯!");//去跑步咯!去跑步咯!
}
//使用对象
obj.running()
OOP的基本词汇
类 指的是通用的东西(车)。
实例(或者对象实例) 指的是具体的东西(一辆具体的车)。
方法 指的是一个功能(加速、减速、刹车)。
跟类相关,但是不涉及特定实例的功能叫做类方法(比如:create new VIN,可能就是一个类方法:它不特指某辆具体的车,的确,我们并不希望某辆具体的车能够创建新的、合法的VIN)。
简单了解面向对象三大特征
- 封装
- 继承
- 多态
封装: 也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。
继承: 它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。
注意:继承会继承父类的实例属性和实例方法,并不会继承静态属性和静态方法,并且静态方法只能通过类名去调用。
多态: 多态性(polymorphisn)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。
三大特征优点
封装: 封装的优势在于定义只可以在类内部进行对属性的操作,外部无法对这些属性指手画脚,要想修改,也只能通过你定义的封装方法;
继承: 继承减少了代码的冗余,省略了很多重复代码,开发者可以从父类底层定义所有子类必须有的属性和方法,以达到耦合的目的;
多态: 多态实现了方法的个性化,不同的子类根据具体状况可以实现不同的方法,光有父类定义的方法不够灵活,遇见特殊状况就捉襟见肘了