面向对象、面向过程编程的理解

概念理解

1. 面向过程编程
面向过程编程是一种以过程为中心的编程思想,分析解决问题的步骤,然后使用函数的方式把这些 步骤 一步一步的实现。
特点:数据和对数据的操作是分离的。

2. 面向对象编程
面向对象编程是将事务对象化,通过 对象通信 来解决问题。
特点:数据和对数据的操作是绑定在一起的。

2.1 es5 面向对象的编程实现方式:

function Person (name) {
	this.name = name;
	this.getName = function () { // 给对象添加方法,还可以通过原型来添加 (Person.prototype.getName = ...)
		console.log(this.name);
	}
	this.setName = function (name) {
		this.name = name;
	}
}
let person = new Person('zlq');
person.getName();

2.2 es6 提供了新的语法来实现面向对象编程(class),类的写法更加接近面向对象,只不过是语法糖的表达方式(是基于原型语法的语法糖):

class Person {
	// 类的构造函数实力化的时候执行,new 的时候
	constructor (name) {
		this.name = name;
	}
	getName() {
		console.log(name);
	}
	// ...
}

2.3 三大特征:
三大特征分别是:封装、继承、多态

2.3.1 封装
我们平时所用的方法和类都是封装,当我们在项目发展中,有一段代码被多处重复调用时,就可以把它封装成一个功能方法对外提供。

2.3.2 继承
继承在我们的项目中主要发生在子类继承父类中

class Father {
	constructor (name) {
		this.name = name;
	}
	// 实例方法,通过实例调用
	getName() {
		console.log(name);
	}
	// 静态方法不会被继承,通过类名来调用
	static test () {
		alert('我是静态方法');	
	}
}

class Son extends Father {
	constructor (name, age) {
		// super 必须有,实例化子类的时候把子类数据传递给父类,super中的参数是继承的父类实例化所需要的数据
		super(name);
		this.age = age;
	}
}

注意:继承只会拿到父类的实例属性和实例方法,并不会继承静态属性和静态方法,并且静态方法只能通过类名来调用。

2.3.3 多态
多态的具体表现在方法的重载和重写;
重载:是指不同的函数使用了相同的函数名,但函数的参数个数和类型不同,使用的时候根据参数来确定具体的调用的函数。
重写:也称为覆盖,是指在派生类中重新对类的虚函数重新实现。即函数名称和参数完全一样,只是函数的实现方法不同。

class Son extends Father {
	// 重写父类方法
	getName() {
		console.log('hhhh');
	}
}

2.3.4 特点:
(1)封装:把客观事务封装成抽象成的类,隐藏对属性和方法的实现细节,仅对外提供接口。
(2)继承:子类可以使用父类的所有功能,并对这些功能进行扩展。实现代码的复用
(3)多态:实现了方法的个性化,不同的子类根据具体状况可以实现不同的方法,光有父类定义的方法不够灵活,遇见特殊状况就捉襟见肘了。在调用是,通过指向基类的指针或引用来调用派生类中的虚拟函数来实现多态。

功能介绍:

封装可以隐藏实现细节,使得代码模块化;继承可以扩展已存在的类。它们的目的都是为了代码重用
多态则是为了实现另一个目的—接口重用
面向对象的代码更加支持重用,能降低软件开发和维护的成本,提高软件的质量。

问题:
掌握面向对象的困难之处在于思路的转换。我们通常习惯于考虑解决问题的方法,而不是考虑将问题抽象成对象再去解决它。

举例实现:
例:求长方形的周长和面积
面向过程的程序设计:

  1. 确定长方形的周长和面积的算法;
  2. 编写两个方法(函数)分别计算长方形的周长和面积;
  3. 两个方法均需要两个参数,分别是长方形的款与高。

面向对象的程序设计:

  1. 一个长方形可以看作是一个长方形对象;
  2. 一个长方形对象有两个状态(长和宽)和两个行为(求周长和求面积);
  3. 将所有长方形的共性抽取出来,设计一个长方形类;
  4. 通过长方形对象的行为,就可以求出某个具体的长方形对象的周长和面积。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值