课程总结
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)第四代语言是面向对象程序设计语言。
类和对象是程序员在学习计算机编程开发技术的时候需要重点掌握的编程基础概念,下面我们就一起来了解一下,面向对象编程需要掌握哪些基础知识。
1、类与对象
“类”和“对象”是面向对象编程中 基本的概念,从语言的角度来讲,“类”是用户自定义的具有一定行为的数据类型,“对象”则是“类”这种数据类型的变量。通俗的讲,“类”是具有相同或相似行为的事物的抽象,“对象”是“类”的实例,是是一组具有相关性的代码和数据的组合体,是有一定责任的实体。
类本身还可以进一步抽象为类型,类型是一种更高层次上的抽象,它只用来描述接口,比如抽象类和接口就是一种类型。当一个类型的接口包含另外一个类型的接口时,我们就可以说它是此类型的子类型。类型是用来标识特定接口的,如果一个对象接受某个接口定义的所有行为,那么我们就可以说该对象具有该类型。一个对象同时拥有多种类型。
2、面向对象编程的特性
面向对象编程有三个特性:封装,继承,多态。这三个特性从低级到高级描述了面向对象的特征。一种语言只有同时具备这三种特性才能被称为面向对象的语言。VB中也有类,它的类也支持封装和简单的继承,但是它不支持所有的继承语义和多态,因此VB只能被称为基于对象的语言。
封装是所有抽象数据类型(ADT)的特性,很多刚刚接触面向对象的人认为封装就是就是面向对象。将程序按照一定的逻辑分成多个互相协作的部分,并将对外界有用的稳定的部分暴露出来,而将会发生的改变隐藏起来,外界只能通过暴露的部分向这个对象发送操作请求从而享受对象提供的服务,而不必管对象内部是如何运行的,这就是封装。理解封装是理解面向对象的 一个步骤,40%的程序员对面向对象的理解仅停留在封装这个层次。
继承也称为派生,继承关系中,被继承的称为基类,从基类继承而得的被称为派生类或者子类。继承是保持对象差异性的同时共享对象相似性的复用。能够被继承的类总是含有并只含有它所抽象的那一类事务的共同特点。继承提供了实现复用,只要从一个类继承,我们就拥有了这个类的所有行为。理解继承是理解面向对象的 二个步骤,50%的程序员对面向对象的理解仅停留在继承这个层次。语义上的“继承”表示“是一种(is-a)”的关系。很多人体会到了继承在代码重用方面的优点,而忽视了继承的语义特征。于是很多滥用继承的情况就发生了,关于这一点我们将会在后边介绍。
多态是“允许用户将父对象设置成为一个或更多的它的子对象相等的技术,赋值后,基类对象就可以根据当前赋值给它的派生类对象的特性以不同的方式运作”(Charlie Calvert)。多态扩大了对象的适应性,改变了对象单一继承的关系。多态是行为的抽象,它使得同名方法可以有不同的响应方式,我们可以通过名字调用某一方法而无需知道哪种实现将被执行,甚至无需知道执行这个实现的对象类型。多态是面向对象编程的核心概念,只有理解了多态,才能明白什么是真正的面向对象,才能真正发挥面向对象的 大能力。不过可惜的是,只有极少数程序员能真正理解多态。