day16 初识面向对象编程

1. 面向对象和面向过程的区别

  • 面向过程: 强调过程步骤
  • 面向对象: 强调对象

剖析:围棋程序

面向过程:

1.黑棋落子 2.绘制棋盘 3.判断输赢 4.白棋落子 5.绘制棋盘 6.判断输赢 7.黑棋落子

面向对象:

1.棋子 2.棋盘 3.规定

  • 对象(初步概念):你看到的,你想到的,无形的,有形的事物,都是对象。概括来说就是:万物皆为对象。

2. 类与对象的概念

类: 是具备雷同属性和行为的对象的汇合(模板)。

对象: 依据类的属性和行为创立的实例化。

类:定义了对象的属性和办法,通过类能够实例化多个该类的对象,每个对象的属性值不同,能够说类好比设计图纸,而对象好比依据图纸建设进去的多栋楼房。

举例:

类: 学生

对象: 小明 老王 大黄

思考:

类: 水果

对象 : 苹果 西瓜 芒果(对象得更具体,比方这个苹果,小明手里的苹果等)

面向对象:

面向对象的思维曾经不仅仅是编程思维,曾经扩大到设计、测试等各个方面;

面向对象指的是以对象为根本单位去剖析、设计以及实现零碎;

3. ES5 构造方法

<!DOCTYPE html><html>    <head>        <meta charset="utf-8" />        <title></title>    </head>    <body>            </body></html><script type="text/javascript">        // ES5定义类的办法    //通过函数来模仿类<->构造方法:只能和new关键词连用,创建对象    function Student(name,age,score){        // this代表new进去的对象自身        this.name = name;//this.name相当于给this增加自定义属性        this.age = age;        this.score = score;                    this.eat = function(){            console.log('eat()');        }        this.study = function(){            console.log('study()');        }        this.showValue = function(){        //在类的办法里如果想要应用类的其余办法或属性,须要加this前缀        //这个this代表调用该办法的对象自身            console.log(this.name,this.age,this.score);            this.eat();            this.study();        }    }        // new在堆上依照Student的模板开拓空间,返回该空间的地址;    // 与new连贯的函数,称为构造函数    let s1 = new Student('王国文',18,100);        console.log(s1.name);    s1.eat();    s1.showValue();    </script>

4. ES6 构造方法

类的定义:

class 类名{    类体;    //构造方法中通过this增加属性    //一般办法间接写,不要加this}
<!DOCTYPE html><html>    <head>        <meta charset="utf-8">        <title></title>    </head>    <body>    </body></html><script type="text/javascript">    class Student{        // 构造方法中通过this增加属性        constructor(name,age,score) {            this.name = name;            this.age = age;            this.score = score;        }        eat(){            console.log('eat()');        }        sleep(){            console.log('sleep()');        }        showValue(){            console.log(this.name, this.age,this.score);            this.eat();            this.sleep();        }    }    let s = new Student('王国文',18,100);    s.eat();    s.showValue();</script>

5. 类与类的关系

1)组合关系

在面向对象中,关联关系的代码表现形式为一个类的对象做为另一个类的属性类型存在。

即“有”的关系:”has-a”。

<!DOCTYPE html><html>    <head>        <meta charset="utf-8">        <title></title>    </head>    <body>    </body></html><script type="text/javascript">    class Birthday{        constructor(y,m,d) {            this.y = y;            this.m = m;            this.d = d;        }        showValue(){            console.log(this.y,this.m,this.d);        }    }    class Student{        constructor(name,score,bir){            this.name = name;            this.score = score;            this.bir = bir;        }        showValue(){            console.log(this.name,this.score);            this.bir.showValue();        }    }    let bir = new Birthday(2021,1,18);    let s = new Student('迪迦',100,bir);    console.log(s.bir.y, s.bir.m, s.bir.d);//2021 1 18    s.showValue();    </script>

2) 依赖关系

依赖关系(use-a): 指一个类A应用到了另一个类B;一个类的函数的参数,是另一个类的对象

依赖关系的个性:这种关系是具备必然性的、临时性的、十分弱的,然而类B的变动会影响到类A。

面向对象的编程思维

1.剖析问题, 找出该类有几个对象
2.依据对象形象出形象出对象的办法和属性,设计类
3.各个对象各司其职(按顺序调用各个对象)

有一辆小汽车行驶在一条公路上,计算这量小汽车以60KM/小时的速度,行驶1000KM须要多久。

<!DOCTYPE html><html>    <head>        <meta charset="utf-8">        <title></title>    </head>    <body>    </body></html><script type="text/javascript">    class Car{        constructor(speed) {            this.speed = speed;        }        //将Road类的某个对象传进来        time(r){            return r.len/this.speed;        }    }    class Road{        constructor(length) {            this.len = length;        }    }    let c = new Car(60);    let r = new Road(1000);        console.log(c.time(r));</script>