一、面向对象程序设计的基本概念
1. 对象
在现实世界中,任何事物都是对象。它可以是有形的、具体存在的事物,如一名学生、一辆汽车。它也可以是无形的、抽象的事件,如一次演出、一场球赛。现实世界中的对象既有静态的属性(或称状态),又有动态的行为(或称操作、功能)。例如每个人都有姓名、年龄、身高等属性,都有吃饭、睡觉、写博客 等行为。
在面向对象程序设计中,对象是描述其属性的数据以及对这些数据施加的一组操作封装在一起构成的统一体。对象可以认为是数据+操作。对象所能完成的操作表示它的动态行为,通常也把操作称为方法。使用对象时只需要知道它向外界提供的接口形式而无需知道它内部的算法,一个对象就像一个黑盒子。由此可见,对象具有很高的安全性和可靠性。
2. 类
在现实世界中,类时一组具有相同属性和行为的对象的抽象。例如,张三,李四,王五等,虽然每个人的性格、爱好、职业等各不相同,但他们的基本属性是相似的,都具有相同的生理结构。于是把他们统称为“人”类。
类和对象的关系是抽象和具体的关系。例如,“学生”类是由很多个具体的学生抽象出来的一般概念。
在面向对象程序设计中国,类是具有相同的数据和相同的操作的一组对象的集合。
3. 消息
现实世界中的对象不是孤立存在的实体,它们之间存在着各种各样的联系。同样子面向对象程序设计中,对象之间也需要联系,称为对象的交互。消息具有这三个性质:(1)同一个对象可以接受不同形式的多个消息,做出不同的响应;(2)相同形式的消息可以传递给不同的对象,所做出的响应可以是不同的;(3)对消息的响应并不是必须的,对象可以响应也可以不响应。
4. 方法
对象所能实现的行为(操作)在程序设计方法中称为方法,在C++中方法是通过成员函数来实现的。方法包括界面和方法体。方法的界面给出了成员函数名和参数表;方法体就是函数体。消息和方法的关系是:对象根据收到的消息,调用相应的方法;有了方法对象才能响应相应的消息。
二、面向对象程序设计的基本特征
1. 抽象
抽象是对复杂世界的简单表示,抽象并不打算了解全部的信息,而是只强调感兴趣的信息,忽略与主题无关的信息。例如,在设计学生成绩管理系统时,只关心学生的姓名、学号、成绩等,而他们的身高、体重等可以忽略。However,在学生健康信息管理系统中,身高体重必须抽象出来,而成绩则可以忽略。
抽象包括数据抽象和代码抽象(或称行为抽象)。比如,对于共同的属性:
string name; //姓名
int ID; //工号
string department;//部门
对于共同行为:
input(); //数据录入函数
modify(); //数据修改函数
display(); //数据输出函数
2.封装
所谓封装具有两方面含义:一是将有关的数据和操作代码封装在一个对象中,各个对象相互独立、互不干扰;二是将对象中某些数据和操作代码对外隐蔽,即屏蔽掉内部细节,只留下少量接口与外界联系。
3.继承
顾名思义,你作为你父母的继承,那父母就是你所有属性和行为的基础,只不过有的你全盘继承,有的你会覆盖掉。
继承包括直接继承和间接继承,所谓的祖祖辈辈。继承还可以分为单继承和多继承,比如家族继承就是单继承,而像玩具车这种对象,既有继承玩具的特征,又有继承车的特征。
4. 多态
在现实世界中,如果你家门前停了辆别人的车,不出意外,你会要求别人挪开;而如果有块石头拦在你家门口,你也会要人挪开。同样的请求,由于作用的对象不同,操作方法就截然不同。当然对于“挪开”这个请求还有更多的行为与之对应。
(终于写完了,一个字一个字敲出来了T^T)