1.1 什么是面向对象程序设计
1、面向过程程序设计
*核心是功能分解
*将数据结构和过程(函数)分离
2、面向对象程序设计
*重点在于数据结构
*第一,程序的设计一般由类的定义和类的使用两部分组成,在主程序中定义各对象并规
定它们之间传递消息的规律;第二,程序中的一切操作都是通过向对象发送消息来实现的,对象接
收到消息后,启动有关方法完成相应的操作。
1.2 对象和类
1、对象
对象是现实世界中的一个实体,其特性:
(1)每一个对象必须有一个名字以区别于其他的对象 。
(2)用属性(或状态)来描述它的某些特征。
(3)有一组操作,每一个操作决定对象的一种行为。
2、类和对象是抽象与具体的关系。
(1)类是对多个对象进行综合抽象的结果。
(2)对象是类的实例
3、类定义
类是创建对象的模板,它包含对创建对象的状态描述和对操作行为的说明。(类是一组具有
相同属性结构和操作行为的对象的抽象)
4、类只在编译时存在,不占用内存空间,不会在一个正在内存运行的程序中出现;而对象作为
类的实例在运行的程序中出现,并占有内存空间,是在运行时存在的实体。
5、属于同一个类中的对象具有相同的行为,但是有各自独立的状态。
*对象的状态是所有静态属性和这些属性的动态值的综合。
6、对象的交互
消息传递。
(1)消息:一个对象要求另外一个对象执行某个功能操作的规格说明,通过消息传递才能完
成对象之间的相互请求或相互协作。
(2)消息的三个性质:
*同一个对象可以接收不同形式的多个消息,做出不同相应。
*相同形式的消息可以传递给不同的对象,所做出的响应可以是不同的;
*消息的发送可以不考虑具体的接受者,对象可以响应消息,也可以不响应。
(3)消息的内容:
*消息的接受者
*请求的名字
*一个或多个参数
(4)类的确定划分
*确定一个事物是类
判断它是否有一个以上的实例。
判断类的实例中是否有绝对的不同点。
1.3 数据的抽象与封装
面向对象三大特征:封装、继承、多态
1、封装:清晰的边界、确定的接口、受保护的内部实现。
2、抽象
3、对象的特性
(1)封装性
(2)模块独立性(一个对象是一个独立存在的模块)
(3)动态连接性
(4)易维护性
1.3.1 继承性
子类共享基类中定义的属性和方法。
1、若类之间具有继承关系,则他们之间具有如下特性:
(1)类之间具有共享特征
(2)类间具有差别或新增部分
(3)类间具有层次结构
2、直接基类、间接基类
(1)继承的作用
*避免公用代码的重复开发,减少代码和数据冗余
*通过增强一致性来减少模块间接口和界面
(2)继承的分类
*从继承源上分:
**单继承
每个派生类直接继承了一个基类的特征。
**多继承
多个基类派生出一个派生类。
*从派生的内容上分
**取代继承
师傅和徒弟 在任何需要师傅的地方都可以由徒弟替代
**包含继承
科里狗和狗 任何一条科里狗都是狗
**受限继承
鸵鸟和鸟 鸵鸟不能继承鸟会飞的特征
**特化继承
运动员和人 运动员是一类特殊的人,比一般人更具有体育特长
3、继承与封装的关系
(1)继承与封装具有相似性(共享代码)
(2)继承提供的代码共享是静态的,封装提供的代码共享是动态的(类的多个实例在程序运
行的时候共享在类中说明的那段代码)
1.3.2 多态性
不同的对象收到相同的消息产生多种不同的行为方式。
1、两类多态性:
(1)编译时的多态性
类的重载(同一个类中)
(2)运行时的多态性
虚函数(子类与父类)
2、重载
同一个类中
(1)函数重载
(2)运算符重载
1.4 面向对象程序设计语言
1、应具备的特征:
(1)支持对象的概念
(2)要求对象属于类
(3)提供继承机制
2、高级语言四代:
(1)第一代语言的显著特征是对数学表达式有很强的运算处理能力。
(2)第二代语言的重点是如何有效的表达算法。
(3)第三代语言是引入了抽象数据类型的程序设计语言。
(4)第四代语言是面向对象程序设计语言。