第1个回答 2007-11-15
最近我也在深入学习这个东西!
首先,我们看看什么是对象的概念,对象就是我们把现实中的任何一个实体看作一个对象,对它进行研究,这个很好理解。比如说一个人就是一个对象,一个汽车也是一个对象。
面向对象就是把这个对象当作一个整体去研究,这个对象它包括自己的属性和行为,比如说人的属性是:身高、体重、体积等等。而他的行为包括吃饭、走路、睡觉等等。接着,我们再归一下类,我们可以把一个人归到学生类或者老师类当中等等,这个也很好理解。那么这个学生类就是我们说的对象抽象出来的类,它包括对象的共有的属性。比如学生这个类都有学号、班级、指导老师等等。因为学生类是一个学生这个对象的抽象,那么他就不仅包括对象所具有的属性,我们前面说对象还包括行为,那么类也有行为,比如,学生类的行为就是抽象了的对象的行为:吃饭、睡觉、学习等等。这里,我们从一个对象讲到了抽象出来的类,那么我们再从类往回讲:假如说我们先定义了一个学生类(Class:Students),然后,我们再根据这个类定义一个具体的对象,比如一个具体的学生叫小胖(学号为:08032995),那么这个学生就具体到唯一的一个人了。也就是说,类是抽象的,而对象是具体的。
我们明白了,什么是对象,什么是类之后,我们再来看看面向对象有哪些特征:
(1)对象唯一性
我们刚才说了,当我们在定义一个对象的时候,我们就已经把它具体到了某个实体,那么,他就是唯一的啦!比如说我们刚才定义了一个小胖,那么她就是中国矿业大学中一个具体的学生,她是世界上唯一的,没有第二个她了。
(2)分类性
就是说,每一个具体的对象,都有它所属的一个类,根据这些对象所共有的属性和共有的行为它们可以归入到同一类当中,比如,学生这个类就是共有共同属性和行为的:都有学号、姓名、年龄、身高、体重等等这些属性和都有上课、读书、写作业等这些行为的人组成。
(3)继承性
说到继承性可能会觉得比较复杂,其实,很简单,继承性是对类而言的,比如“学生”这个类他可以说是继承了“人”这个类,“人”具有的属性和行为“学生”都具有,比如“人”都有身高、体重、姓名这些属性,而“学生”除了具有这些属性以外还有学号这个属性。再比如说“人”有吃饭、睡觉这些行为,而“学生”还具有听讲、读书、写作业等行为。也就是说当一个类继承另一个类是,这个类出了具有它继承的那个类的所有属性和行为之外,它还有自己的多余的属性和行为。这就是继承性,有了继承也就有了子类和父类的关系,子类就是“学生”,父类就是“人”,因为“学生”是从“人”中继承过来的。
(4)多态性
一般来说,多态性比较难以理解。
资料上说“多态性使指相同的操作或函数、过程可作用于多种类型的对象上并获得不同的结果。不同的对象,收到同一消息可以产生不同的结果,这种现象称为多态性。”然而,这里所说的“相同的操作或函数、过程”其实并不是完全的相同,比如在这段代码里:
#include <iostream.h>
int abs(int x) // 整数类型数据的绝对值函数
{ cout << "Using integer version of abs().\n";
return (x >= 0 ? x : -x);
}
double abs(double x) // 浮点类型数据的绝对值函数
{ cout << "Using floating-point version of abs().\n";
return (x >= 0.0 ? x : -x);
}
long abs(long x) // 长整数类型数据的绝对值函数
{ cout << "Using long integer version of abs().\n";
return (x >= 0 ? x : -x);
}
int main()
{ cout << abs(-5) << "\n"; // 调用abs()的整数版本----------------------------(1)
cout << abs(-5L) << "\n"; // 调用abs()的长整数版本---------------------(2)
cout << abs(3.14) << "\n"; // 调用abs()的浮点版本------------------------(3)
return 0;
}
这里定义了三个求绝对值得方法,比如他们同时收到了一个相同的消息:求绝对值,但是这个“相同的消息”又有不同,它们的参数不同。比如例子当中的(1)这一行,他给的参数是一个整数型,(2)是一个长整数型,(3)是一个浮点型。也就是说根据相同的消息,同样是求一个数值的绝对值,同样是求绝对值这个行为但是却调用了不同的函数,也就产生了不同的结果。打个比方:有一个学生类,它有读书这个行为,比如现在有俩个具体的学生,你给他们每人一本书,让他们读书,他们收的消息就是要求读书,但是,如果一个给他英语书,一个给他语文书,那么,它们读出来的内容肯定是不一样的。也就是上面说的,受到了相同的消息产生了不同的结果。
而在一种面向对象的语言中,所说的三个重要特点是封装性、继承性、多态性,这里的封装性,是指我们一个对象把它的属性和行为封装起来成为一个整体,外界看不到也不能随便拿来用,要想看到或拿到,必须通过这个对象本身调用。保证了一个对象数据的安全性。
这些就是我对面向对象的基本的理解。