面向对象编程的基本概念.ppt
《面向对象编程的基本概念.ppt》由会员分享,可在线阅读,更多相关《面向对象编程的基本概念.ppt(48页珍藏版)》请在三一办公上搜索。
1、第三章面向对象程序设计基本概念,面向对象的程序设计(OOP)已成为现代软件开发的必然选择。通过掌握面向对象的技术,能开发出复杂、高级的系统,这些系统是完整健全的,但又是可扩充的。OOP是建立在把对象作为基本实体看待的面向对象的模型上的,这种模型可以使对象之间能相互交互作用。面向对象程序设计在一个好的面向对象程序设计语言(OOPL)的支持下能得到最好的实现。Java就是一种优秀的OOPL,它提供了用来支持面向对象程序设计模型所需的一切条件。Java有自己完善的对象模型,并提供了一个庞大的Java类库,并有一套完整的面向对象解决方案和体系结构。本章介绍面向对象的概念和对象建模的方法,讲解Java对
2、象模型中的核心部分:类及类的成员。使读者学会如何用创建和使用Java对象。,2,3.1 对象,定义:一个对象就是变量和相关方法的封装,其中变量表明对象的状态,方法表明对象的行为。软件对象既可以模拟现实世界的对象,也可以表示抽象的概念,对象示意图,3,3.1 对象,封装:能把对别的对象来说并不重要的对象的实现细节隐蔽起来,在使用一个对象时,只需知道怎样引用它的方法而无须知道它的具体实现。封装的优点:模块化一个对象的源代码的编写和维护独立于其它对象的源代码。而且,对象在系统中很容易使用。信息隐蔽每个对象都有一个公共接口使得其它对象可以与其通讯。但对象能维护自己的私有信息和方法并能在任何时候改变它们
3、而不会影响使用它的其它对象。,3.1 对象(SmallTalk的特征),(1)所有东西都是对象。可将对象想象成一种新型变量;它保存着数据,但可要求它对自身进行操作。(2)程序是一大堆对象的组合;通过消息传递,各对象知道自己该做些什么。(3)每个对象都有自己的存储空间,可容纳其他对象。(4)每个对象都有一种类型。根据语法,每个对象都是某个“类”的一个“实例”。其中,“类”(Class)是“类型”(Type)的同义词。一个类最重要的特征就是“能将什么消息发给它?”(5)同一类所有对象都能接收相同的消息。,3.1 对象,理解对象使用对象对象之间的关系,面向对象程序设计中的对象与客观世界中的对象并不是
4、完全相同的概念,他们既有联系又有区别。所以深刻理解编程中的对象本质将有利于实践面向对象编程和开发。,3.1.1 理解对象,对象可以视为一组相关的操作代码和数据的组合 对象是类的实例 对象可以互相协作,共同完成任务 通过继承、组合或封装等方式可以产成新的对象 对象根据特定的意义和用途有不同的划分方法,3.1.2 使用对象:设计果园系统,一个面向对象的果园系统 假设我们要开发一个最简单的果园系统GardenSys。用面向对象的方法来分析,这个果园系统至少包括园丁和水果这两个对象。园丁的工作包括种植各种水果,水果的行为包括生长和收获,不同的水果还有不同的名称。园丁种植水果,园丁与水果存在关联关系。,
5、3.1.2 使用对象:对象的创建和销毁,对象是通过类创建的,对象是类的动态实例。每个对象都有生命期。一个对象按其生命期来分析,一般有三个阶段,出生、活动、死亡。而我们在编程中要做的对应为:创建(初始化)、运行、销毁。通常,当调用构造函数时,该函数返回一个新分配内存并初始化了的类的实例。Java构造函数是一种比较特殊的函数,它不能由用户来指定返回类型,只能返回所属类的类型;它也不能由用户来指定其它名称,只能使用与类名相同的名称。即便如此,我们仍然可以通过方法的重载(overload)来为一个类提供多个不同的构造函数。在Java中没有用于销毁和清理对象的析构函数,因为Java提供了垃圾回收(Gar
6、bage Collection,简称gc)机制负责释放对象所占用的内存空间及相关的其它资源。,3.1.2 使用对象:对象和对象变量,从语义上讲,对象是类的实例,类是创建对象的模板;从语言上讲,对象也是类这种数据类型的变量,对象在内存中占有空间。但是在具体使用中,对象与传统的变量,也就是Java中基本类型的变量有区别。对象是一种引用类型。对象由类创建,存储在堆中;而对象变量则是对象的引用,存储在栈中。在程序中我们通过对象变量,也就是对象的引用,来操纵对象。,引用类型的演示:MyClass a,b;/声明MyClass类型的变量a和b,MyClass是一个Java类 a=new MyClass()
7、;/变量a引用了MyClass类创建的对象实例 a.myvar=24;/给对象实例的字段myvar赋值 b=a;/变量b得到的是变量a的一个引用的副本,/结果使他们都引用了同一个对象实例。a.myvar=a.myvar+1;/改变对象字段的值 System.out.println(a.myvar);/此时显示a.myvar值为25 System.out.println(b.myvar);/此时显示b.myvar值也为25,3.1.3 对象之间的关系,对象之间的关系有:合成关系(“hasa”)继承关系(“isa”)依赖关系(“usea”),面向对象程序设计的高效关键在于它让每个对象负责执行一组相
8、关的任务。如果对象依赖于其他对象负责处理的任务,那么它就去访问负责这个任务的对象。这时第一个对象就请求第二个对象执行任务,即这个对象依赖于另一个对象。另外,一个对象不能直接操作另一个对象内部的数据,它也不应让其他对象直接访问自己的数据。所有的通信都应该通过方法调用来完成。通过对对象数据的封装,就可以使可重用性最大化,减少数据依赖,并且使调试时间最小化。当然,就像面向过程语言中的模块一样,不应该让一个对象负责过多的事情。创建完成少量任务、规模较小的对象会使设计和调试过程都变得较为简单,相反,创建数据复杂、函数众多的对象,则会使开发过程变得极为复杂。因此理解对象之间的关系可以帮助我们设计出可重用、
9、易维护的代码,降低耦合性,提高灵活性。,11,3.2 什么是消息,对象间相互作用和互相通讯是通过发送消息来实现的。当对象A让对象B执行它的某个方法时,对象A就要向对象B发送消息。,12,3.2 什么是消息,一个消息通常包括三部分:接受消息的对象 接受消息的对象应执行的方法 方法所需要的参数 消息模式的优点:利用对象的方法来表示对象的行为,收发消息能支持对象间所有可能的交互作用。收发消息的对象无须在同一个进程里,甚至无须在同一个机器里。,13,3.3 什么是类,定义:类是一类对象的抽象或原形,它定义了该类对象的共同的状态和方法 类和对象的区别:类:是一类对象的原形,是对该类对象的抽象。对象:是某
10、个类的一个实例,是客观存在并能够使用的。类的优点:有效地支持了软件重用。程序员使用一个类可以反复创建多个对象。,第三章面向对象程序设计的基本概念,3.3 类,例如:对于园丁所种植的香蕉、橘子、葡萄等不同的水果对象,它们有共同的名称属性,以及种植和收获的操作,因此可将它们划归为果园系统中的水果类。,3.3.1 什么是Java类,当用户编写自己的Java程序时,主要工作就是编写类。当程序运行时,已声明的类用来创建新对象。由类创建对象的过程称为实例化(instantiation),每个对象都是类的一个新实例(instance)。类是一种抽象数据类型,在Java中类也被当作一个数据类型来定义。类的语法
11、结构包括关键字class、跟在后面的类名称。如果其继承自某个基类,还需要使用extends关键字加基类名称。类通常不需要从头生成。相反,他们可以从其他的类派生而来,继承祖先类的可用类成员,包括:字段、方法等。即使是从头创建的新类也必须是继承自Object类,只不过我们可以合法省略extends Object而已。,class 类名 extends 基类/类的函数成员 构造函数1;构造函数2;.方法1;方法2;./类的数据成员 字段1;字段2;.,3.3.2 类成员,类成员包括数据成员和函数成员。数据成员是面向对象的术语,用于表示类中的数据变量,即Java中的字段(field)。函数成员也是面向
12、对象的术语,用于表示类中的操作。Java的函数成员包括方法和构造函数:方法是一些封装在类中的过程和函数,用于执行类的操作,完成类的任务。构造函数是一种特殊的方法,用于对象的创建和初始化。,3.3.3 类成员的可访问性,类成员包括数据成员和函数成员,类的每个成员都有一个称为可访问性的属性,用来保护类成员。Java有四种类成员的保护方式,分别为缺省的、public(公有的)、protected(保护的)、private(私有的)。为了使程序具有良好易读的风格,建议最好在撰写类代码时用不同的可访问性来组织类成员,并将public成员作为对外公布的接口放在最前面,以便引起关注。,3.3.4 方法,方法
13、是在类中定义,用来实现对象操作的过程或者函数。方法是类的成员,并有自己的可访问性。Java程序中,方法的声明和方法的实现是分开的。方法与普通函数和过程不同,方法只应用于特定类及其祖先类的对象。另外,每一个方法都有一个隐含的参数,称为this,它引用作为方法调用主体的对象。调用一个方法的语法格式是:对象名.方法名(实际参数);实例字段和实例方法是属于某一具体实例对象的字段和方法,必须先创建这个实例对象,然后才能使用这些字段和方法。对于同一个类创建的不同的实例对象,其字段可以有不同的取值,以反映该对象的不同状态。除此之外,还有一种通过类就可以直接访问的静态字段和静态方法,这种静态的字段和方法用st
14、atic关键字标识,不需要创建实例就可以通过类直接访问。,19,3.4 什么是继承,定义:利用现有的类(supperclass)定义新的类(subclass),子类可以继承父类的属性和方法并可以增加新的属性和方法或重载父类的方法。对象的继承是一种在保持对象差异性的同时共享对象相似性的复用。它是源自类的泛化机制。这种抽象机制允许类之间共享代码,大大减少了代码长度并且使软件易于维护。对象通过继承,保证了实现部分紧内聚和松耦合的良好特性。,第三章面向对象程序设计的基本概念,3.4 什么是继承,第三章面向对象程序设计的基本概念,继承的优点:子类提供了基于父类公共部分的更具体的行为。利用继承子类可以重用
15、父类多次;可以定义一个称为抽象类的父类来定义一般行为。,21,3.4 什么是继承,交通工具,汽车,卡车,旅行车,小汽车,轿车,跑车,面包车,基类/祖先类,父类/子类/派生类,子类/派生类,第三章面向对象程序设计的基本概念,3.4.1 使用继承,基类与派生类Java中派生类通过extends关键字继承基类,并通过super关键字访问基类的构造函数和方法。Java中所有的类都继承了Object类的toString方法,我们可以重写并覆盖toString方法,使之带有对象的具体信息,以便我们跟踪和调试对象。继承关系形成了树状的类层次结构。继承产生的派生类不能直接访问其基类的private成员,但所有
16、其他基类成员通过继承成为派生类的成员后,保持它们原来的成员的可访问性,并可在派生类中使用。,面积=length width,周长=2(length+width),Square需要重写并覆盖基类的calcPerimeter方法来计算周长。周长=4 length,Square可以继承基类Rectangle的calcArea方法来计算面积,无须另写代码,图 42在这个UML类图中,Square继承了Rectangle,是Rectangle类的扩展,示例程序 41 Retangle类(Retangle.java)public class Retangle public Retangle(double
17、l,double w)length=l;width=w;public double calcPerimeter()return 2*(length+width);public double calcArea()return length*width;public String toString()return 长为+length+宽为+width+的长方形;protected double length;private double width;,示例程序 42 Square类(Square.java)public class Square extends Retangle public Sq
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 编程 基本概念
链接地址:https://www.31ppt.com/p-5674303.html