面向过程和面向对象思想的区别

108 阅读2分钟

面向过程和面向对象思想的区别

面向过程

程序 = 算法 + 语法;
算法:强调步骤,一步接一步
面向过程的缺陷:
    1.随着问题规模的增加,代码逐渐难以控制
    2.代码的复用性较差  只有函数可以复用
​
    五子棋                  围棋
    a.绘制棋盘
    b.黑棋落子
    c.判断输赢
    d.白棋落子
    e.判断输赢   

面向对象

程序 = 对象 + 对象 + ... + 对象;
对象:万物皆为对象好处:
    1.随着问题规模的增加,添加新的类型就可以了
        棋子
        棋盘
        规则
​
        悔棋
    2.复用性大大提高
        五子棋                    围棋
        棋子                      棋子
        棋盘                      棋盘
        规则                      新规则
面向对象的三大特性:
    封装:将若干函数和属性封装成一个整体
    继承:将已有的类的属性和方法拿过来使用
    多态:不同对象调用相同的函数执行不同的功能效果

类与对象

抽象:对事物加以描述的过程
描述的过程中有大量的名字和动词
    名字:姓名 身高 体重  学号   --->属性
    动词:唱 跳 rap 篮球        --->行为
类:拥有相同属性和行为的对象的集合(模板)
对象:类的实例化 (强调真实存在,唯一性)

ES5创建类

ES5中用函数来代替类的概念
这个函数也称为构造函数
类的定义
    function Student(id,name,score){
        this.id = id;
        this.name = name;
        this.score = score;
​
        this.singing = function(){
            console.log(this.name + "唱");
        }
​
        this.dancing = function(){
            console.log(this.name + "跳");
        }
    }
对象的创建
    let s = new Student(1,"老王",100);
​
对象的使用
    console.log(s.id);
    console.log(s.name);
    console.log(s.score);  
    s.singing();
    s.dancing();
​
    let s1 = new Student(2,"小王",99);
    console.log(s1.id);
    console.log(s1.name);
    console.log(s1.score);
​
    s1.singing();
    s1.dancing();
​
this:
    1.出现在事件体中,代表触发事件的元素本身
    2.出现在普通方法中(除了事件体和构造方法),代表调用该方法的对象
    3.出现在构造方法中的this,代表new出来的对象
​
普通函数和构造函数的区别
    1.构造方法必须和new连用
    2.构造方法习惯上函数名首字母大写
    3.构造函数体内不能有返回值(因为默认返回的是new出来空间的地址)

ES6创建类

class 类名{
    类体
    constructor(){
        属性的添加
    }
    方法的添加
}
​
    class Student{
        //构造方法:只构造属性
        constructor(id,name,score){
            this.id = id;
            this.name = name;
            this.score = score;
        }
​
        singing(){
            console.log(this.name + "唱");
        }
​
        dancing(){
            console.log(this.name + "跳");
        }
    }
    let s = new Student(1,"老王",100);
    console.log(s.id,s.name,s.score);
    s.singing();
    s.dancing();

类与类的关系

类和类的关系:组合
一个类的成员属性是另一个类的对象