5.1 认识对象
作者: liufeisheng
创建时间: 2024-04-18 01:52:29
5.1.1 面向对象和面向过程
面向过程
在日常工作和学习中,当我们去完成一项复杂的任务时,通常会罗列出要做的步骤,然后按步骤去解决问题,这实质上就是按照面向过程的思想去解决问题。在面向过程的程序设计中,一般使用函数来解决问题。
生活中体现这两大编程思想的例子很多,比如用洗衣机洗衣服,面向过程的设计思路就是分析洗衣服的步骤。
首先打开洗衣机的机盖,然后放入衣服,设定洗衣时间,最后启动洗衣机。不同步骤使用不同的函数实现即可。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
function open(){
document.write("打开洗衣机<br>");
}
function putIn(){
document.write("放入衣服<br>");
}
function setTime(){
document.write("设定时间<br>");
}
function start(){
document.write("启动洗衣机<br>");
}
function washClothes(){
open();
putIn();
setTime();
start();
}
washClothes();
</script>
</body>
</html>
定义4个函数,然后按照顺序调用,这就是采用面向过程的思想解决问题
我们扮演的是执行者,分析事情发生的过程都由自己来完成
我们用面向过程的思想去编程或解决问题时,首先要清楚详细的实现过程。过程清楚了,代码的实现就比较简单
面向对象
在面向对象的程序设计中,应尽可能地去模拟真实的现实世界,把构成问题的事物分解成各个对象,通过建立对象来描述某个事物在解决问题各个步骤中的行为。面向对象是一种更符合人类思维习惯的编程思想,它关注的是对象,使用对象间的关系来描述事物之间的联系。
面向对象不同于面向过程,它按照现实世界的逻辑关系处理问题,而非步骤。 - 要分析问题中存在的实体 - 要分析这些实体的属性和方法
如果用面向对象的思想来模拟洗衣服的过程,就需要换个思路来思考问题。面向对象的设计思路就是分析其中涉及的对象及其发出的动作,对象有洗衣机和衣服,洗衣机的动作有打开机盖、放入衣服、设定时间、启动洗衣机,衣服没有涉及具体的动作。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>面向对象</title>
</head>
<body>
<script>
function Washer(){
this.open = function(){
document.write("打开洗衣机<br>");
}
this.puIn =function(clothes){
document.write("放入衣服:"+clothes);
}
this.setTime =function(){
document.write("<br>设定时间<br>");
}
this.start = function(){
document.write("启动洗衣机<br>");
}
}
function Clothes(type){
this.type = type;
}
var dress = new Clothes("上衣");
var washer1 = new Washer();
washer1.open();
washer1.puIn("上衣");
washer1.setTime();
washer1.start();
</script>
</body>
</html>
5.1.2 对象的概念
-
类的概念
类是封装对象的属性和行为的载体,也就是说类(也称对象类)是具有相同属性和方法的一组对象的抽象描述。定义了类以后就可以使用类来创建对象。在JavaScript中通过类创建的对象称为对象实例,创建对象的过程就是类的实例化过程。类是一个抽象的概念,而对象是一个实例化的概念。
例如,鸟类封装了所有鸟的共同属性和应具有的行为,定义完鸟类以后,可以根据这个类抽象出一个实体对象,例如,使用鸟类创建一个实例对象大雁,那么大雁就是一个对象实例,一般称为对象。
-
对象的概念 在理解对象时,可以将对象划分为两个部分,即静态部分和动态部分,静态部分就是“不能动”的部分,称为“属性”。任何对象都具备属性,如一个人包括身高、体重、性别、年龄等属性。动态部分就是除了这些属性外的行为、动作,例如,人有哭泣、微笑、说话、行走等行为。我们就是通过观察对象的属性和行为来了解和描述对象的。
在计算机编程中,面向对象程序设计的思想就是要以对象来思考问题例如,使用面向对象的思想解决大雁从北方飞往南方的实际问题。
可以从这个问题中抽象出对象,这里抽象出来的对象是大雁。
识别这个对象的属性,对象具备的属性都是静态属性,如大雁有一对翅膀、黑色的羽毛等。
识别这个对象的动态行为,即大雁可以进行的动作,如飞行、觅食等。这些行为都是基于其属性而具有的动作。
实质上,所有的大雁都具有以上属性和行为,可以将这些属性和行为封装起来,描述大雁这类动物。
- 对象的属性和方法 (1)属性是指用来描述对象特征的一组数据,以变量的形式存在,也叫成员变量。
(2)方法是指用来描述对象的动作,表现为函数。
在JavaScript中,对象就是属性和方法的集合。方法是作为对象成员的函数,表明对象所具有的行为。而属性是作为对象成员的变量,表明对象的状态。通过访问或设置对象的属性,并且调用对象的方法,就可以对对象进行各种操作,实现某种功能。
- 面向对象的特征 (1)封装性
封装是指隐藏内部的实现细节,只对外开放操作接口。接口是对象的方法,无论对象的内部多么复杂,用户只需知道这些接口怎么使用即可。
(2)继承性
继承是指一个对象继承另一个对象,从而在不改变另一个对象的前提下进行扩展。
(3)多态性
多态是指在同一个操作作用域操作不同的对象,会产生不同的执行结果。在面向对象中,多态的实现离不开继承,这是因为当多个对象继承了同一个对象后,就获得了相同的方法,然后可以根据每个对象的需求来改变同名方法的执行结果。
5.1.3 JavaScript的对象框架
JavaScript是一种基于对象的语言,在面向对象上它不像Java那样要求严格,相对比较灵活。在大部分情况下,JavaScript的类和对象是可相互转换的概念.
在JavaScript中,通常包括两种对象,即自定义对象和预定义对象。自定义对象是根据需求自己创建的对象;预定义对象是JavaScript提供的已经定义好的对象,用户可以直接使用。
浏览器对象是浏览器提供的、可供JavaScript使用的对象,项目7将详细介绍的BOM,就是一个典型的浏览器对象模型。大部分浏览器可以根据系统当前的配置和所装载的页面自动地为JavaScript提供一些可使用的对象。本书前面经常使用到的Document对象就是浏览器对象的一种。项目6将介绍的DOM对象是文档对象模型,提供了大量的JavaScript内置对象。