ObjectOrientedProgramming一.ppt_第1页
ObjectOrientedProgramming一.ppt_第2页
ObjectOrientedProgramming一.ppt_第3页
ObjectOrientedProgramming一.ppt_第4页
ObjectOrientedProgramming一.ppt_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

面向对象编程基础(上),面向对象编程基础(上),程序设计发展历史面向对象编程的基本概念面向对象编程的三大原则面向对象编程详细介绍,程序设计发展历史,程序设计方法的演进程序设计语言:机器语言汇编语言高级语言(面向过程序的高级语言面向对象的编程语言面向对象的可视化编程语言)。程序设计方法:程序设计的自然描述结构化程序设计(面向过程的程序设计方法)面向对象的程序设计方法面向对象的可视化编程方法。结枸化(面向过程)程序设计方法与面向对象程序设计方法的关系。,程序设计发展历史,面向过程程序设计的特点面向过程程序设计思想的核心:功能分解面向过程程序设计思想的主要特点:程序与数据相分离。即:程序=算法+数据结构面向过程程序设计思想的主要缺点:程序代码的可重用性差,维护代价高。,程序设计发展历史,面向对象程序设计的基本概念面向对象程序设计将数据及数据的操作(算法)当成一个整体。即:程序=(算法+数据结构)主要思想:面向对象程序设计,是把一些具有相同数据特性的实例抽象成为一个类,通过对类的定义和类的使用(即对象的使用)实现对实例的使用的面向对象程序设计是一种新的程序设计范型。特点:程序由类的定义及类的使用两部分组成,通常在主程序定义各对象并规定对象间传递消息的规律,程序设计发展历史,程序中的一切操作都是通过发送消息实现的,对象接收消息后,启动相应的消息完成相应的操作对象内、对象间采用消息传递机制;面向对象的程序设计最主要的优点:软件的可重用性面向对象的程序设计最重要的的概念:类与对象。,面向对象的基本概念,对象对象(Object)是状态(属性)和行为的结合体。对象是相关数据和方法的集合。对象是现实世界对象的抽象模型,使用数据和方法描述其在现实世界中的状态和行为特征,一般通过变量描述其状态,通过方法实现其行为。给定状态和行为,就确定一个对象,称为实例对象。与其相关的变量称为实例变量,相关的方法称为实例方法。,对象的两个要素,属性用于描述对象静态特性(结构特性)的一个数据项。如描述一个人可用姓名、性别、身份证号等属性。方法(也称服务)用于描述对象动态特性(行为特性)的一个操作系列。如每个人都具有工作、学习等行为特性。,对象的封装性,对象就是一组属性和相关的方法的集合。这是面向对象方法与结构化方法的重大区别之一。对象将数据和施加于数据上的操作打包成一个不可分割的最基本的模块,使得仅有该类的有限个方法才可以操纵、改变这些数据。,类,OOP总结对象的特征设计成类(class)。类定义了同类对象共有的变量和方法。可以生成一个有特定状态和方法的实例。面向对象编程主要就是设计类,采用自定义方式或继承方式设计一个类,然后使用它的实例对象完成具体的功能。,接口,接口(interface)可以看成是为两个不相关的类提供交流途径的工具。接口类似于协议,是一个包含方法定义和常量值的集合。Java不支持多继承,子类只能有一个父类。有时需要使用其他类的方法,但又能无法直接继承,可以使用接口技术。接口不需要建立继承关系,就可以使两个不相关的类进行交互。接口提取了类的某些共同点,声明一些能被多个类实现的方法但不给出方法体。接口由类的声明语句中的implements关键字引入。,抽象的定义,抽象是指对于一个过程或者一件物品的某些细节的有目的的隐藏,以便把其他方面、细节或者结构表达得更加清楚。,抽象的例子,各种多边形对象,类与对象的关系,类、对象、实体关系图,面向对象编程的三大原则,面向对象编程,必须遵循的三个原则是:封装、继承、多态。1.封装所谓“封装”,就是用一个框架把数据和代码组合在一起,形成一个对象。遵循面向对象数据抽象的要求,一般数据都被封装起来,也就是外部不能直接访问对象的数据,外部能见到的只有提供给外面访问的公共操作(也称接口,对象之间通信的渠道)。类是支持对象封装的基本工具,对象则是封装的基本单元。封装的对象之间进行通讯的一种机制叫做消息传递。消息是向对象发出的服务请求,是面向对象系统中对象之间交互的途径。消息包含要求接收对象去执行某些活动的信息,以及完成要求所需的其他信息(参数)。发送消息的对象不需要知道接收消息的对象如何对请求予以响应。接收者接收了消息,它就承担了执行指定动作的责任,作为消息的答复,接收者将执行某个方法,来满足所接收的请求。,面向对象编程的三大原则,2.继承继承是面向对象编程技术的一块基石,通过它可以创建分等级层次的类。例如,创建一个汽车的通用类,它定义了汽车的一般属性(如:车轮、方向盘、发动机、车门)和操作方法(如:前进、倒退、刹车、转弯等)。从这个已有的类可以通过继承的方法派生出新的子类,卡车、轿车、客车等,它们都是汽车类的更具体的类,每个具体的类还可增加自己一些特有的东西。,面向对象编程的三大原则,继承的例子,汽车类的派生,类的继承,面向对象编程的三大原则,继承是父类和子类之间共享数据和方法的机制,通常把父类称为基类,子类称为派生类。一个基类可以有任意数目的派生类,从基类派生出的类还可以被派生,一群通过继承相联系的类就构成了类的树型层次结构。如果一个类有两个或两个以上直接基类,这样的继承结构被称为多重继承或多继承。在现实世界中这种模型屡见不鲜,如:一些组合功能的产品像沙发床,它既有沙发的功能,又有床的功能,沙发床应允许同时继承沙发和床的特征。,面向对象编程的三大原则,多重继承的例子,多重继承示意,类的多重继承,面向对象编程的三大原则,尽管多继承从形式上看比较直观,但在实现上多继承可能引起继承操作或属性的冲突。当今的很多高级编程语言已不再支持多重继承,Java不支持多重继承,但它支持“接口”概念。接口使Java获得了多重继承的许多优点,且摒弃了相应的缺点;,面向对象编程的三大原则,菱形继承,面向对象编程的三大原则,3.多态性多态性就其字面上的意思是:多种形式或多种形态。在面向对象编程中,多态是指同一个消息或操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。在面向对象编程中,多态性有两种,一种是静态多态,一种是动态多态。当在同一个类中,直接调用一个对象的方法时候,系统在编译时,根据传递的参数个数、参数类型以及返回值的类型等信息决定实现何种操作,这就是所谓的静态绑定。当在一个有着继承关系的类层次结构中,间接调用一个对象的方法时候,也就是说,调用经过基类的操作,这种调用只有到系统运行时,才能根据实际情况决定实现何种操作,这就是所谓的动态绑定。,类的定义,类的定义基本的Java类定义格式是:类修饰符class类的成员变量的声明格式是:修饰符=初始值;例如,privateStringname=“Tom”;类的成员方法的声明格式是:修饰符(形式参数列表),创建对象,构造方法在多数情况下,初始化一个对象的最终步骤是去调用这个对象的构造方法。构造方法的功能是:当创建一个类的对象时,首先用new语句从堆区中分配该对象的内存空间,然后自动调用类的某一个构造方法,对该对象的内存空间进行初始化,为实例变量赋予合适的初始值。构造方法的语法规则:方法名必须与类名相同。不要声明返回类型。不能被static、final、synchronized、abstract和native修饰。,默认构造函数,Java语言规定,每个类都必须至少定义一个构造函数。若一个类没有定义构造方法,则编译程序提供一个构造方法。无参数的构造方法称为默认构造方法。编译程序自动提供的构造方法就是一个默认构造方法。格式如下:()super();/自动调用父类的默认构造方法若一个类中已定义构造方法(不论有无参数),编译程序将不再自动提供上述格式的默认构造方法了。因此,当给类定义构造方法时,建议同时定义一个无参构造方法,即默认构造方法,以避免前面所述的那种编译错误。,默认构造方法,例如下面的代码片段:,publicclassDog1/编译程序自动提供默认方法publicclassDog2/该类缺少默认构造方法。建议程序员自定义一个publicDog2(Strings)System.out.println(“自定义构造方法);publicclassDog3/自己定义了默认构造方法publicDog3()System.out.println(“自定义默认构造方法);,构造函数及重载,Java库里的String类,publicfinalclassStringimplementsSerializable,Comparable,CharSequenceprivatefinalcharvalue;privatefinalintoffset;privatefinalintcount;publicString()value=newchar0;offset=0;count=0;publicString(bytedata)this(data,0,data.length);publicString(bytedata,Stringencoding)throwsUnsupportedEncodingExceptionthis(data,0,data.length,encoding);,析构函数,一般来说,创建一个对象时需要用构造函数初始化数据,与此相对应释放一个对象时就用析构函数。所以析构函数是用于实现析构类实例所需操作的方法。JAVA因为有内存自动回收机制,所以不需要析构函数,C+则需要在析构函数里做相应的释放资源操作。析构函数没有参数,没有返回值。,this引用,this关键字,用于表示对象自身的引用值。当在类中使用实例变量x或实例方法f()时,本质上都是this.x或this.f()。在不混淆的情况下(如:没有名字隐藏),this.x可简写成x,this.f()可简写成f()。当类中有两个同名变量,一个属于类的成员变量,另一个属于某个特定的方法(方法中的局部变量),可使用this区分成员变量和局部变量。在类的static方法中,是不能使用this的。这是因为类方法是一直存在,随时可用的,而此时可能该类一个对象都没有创建,自然this也就不存在,this的示例,classPixelintx;inty;voidinit(intx,inty)this.x=x;this.y=y;publicstaticvoidmain(Stringargs)Pixelp=newPixel();p.init(4,3);,静态成员,static关键字静态变量和实例变量的区别如下:静态变量在内存中占用一份备份,运行时Java虚拟机只为静态变量分配一次内存,在加载类的过程中完成静态变量的内存空间分配。可以直接通过类名访问静态变量。对于实例变量,每创建一个实例,就会为实例变量分配一次内存。实例变量可以在内存中有多份备份,互不影响。同成员变量一样,成员方法分为静态方法和实例方法。用static修饰的方法是静态方法或类方法。访问静态方法不需要创建类的实例,可以通过类名来访问。若已创建了对象,也可通过对象引用来访问。,继承,在Java语言中,用extends关键字来声明一个类继承了另一个类,其语法格式是:classextends例如,下面的代码片段定义了一个子类son类,继承了父类farther类。classfartherpublicclasssonextendsfarther,继承的示例,publicclassTeacherprivateStringname;/教员姓名privateStringschool;/所在中心publicTeacher(StringmyName,StringmySchool)/初始化属性值publicvoidgiveLesson()/授课方法的具体实现publicvoidintroduction()/自我介绍方法的具体实现,publicclassJavaTeacher2extendsTeacherpublicJavaTeacher2(StringmyName,StringmySchool)super(myName,mySchool);publicvoidgiveLesson()System.out.println(启动Eclipse);super.giveLesson();,由于giveLesson()方法与父类的实现有所不同,因此重写了该方法,父类中的属性和方法可以被子类继承,继承的示例,子类的构造方法中,通过super关键字调用父类的构造方法,publicclassJavaTeacher2extendsTeacherPublicJavaTeacher2(StringmyName,StringmySchool)super(myName,mySchool);,方法重写后,通过super关键字调用父类的方法,publicclassJavaTeacher2extendsTeacherpublicvoidgiveLesson()System.out.println(启动Eclipse);super.giveLesson();,通过调用父类的构造方法,完成对属性值的初始化,访问修饰符,访问修饰符可访问性,方法重写与方法重载,方法重写(override)和方法重载(overload)具有以下相同点。都要求方法同名。都可以用于抽象方法和非抽象方法之间。方法重写和方法重载具有以下不同点。方法重写要求参数签名必须一致,而方法重载要求参数签名必须不一致。方法重写要求返回类型必须一致,而方法重载对此不做限制。方法重写只能用于子类从父类继承的实例方法,方法重载用于同一个类的所有方法(包括从父类中继承而来的方法)。方法重写对方法的访问权限和抛出的异常有特殊的要求,而方法重载在这方面没有任何限制。父类的一个方法只能被子类重写一次,而一个方法在所在的类中可以被重载多次。,方法重载,方法重载示例publicclassOverloadClass,publicintmax(intx,inty)returnx=y?x:y;,publicdoublemax(doublex,doubley)returnx=y?x:y;,publicintmax(intx,inty,intz)returnmax(max(x,y),z);,publicdoublemax(doublex,doubley,doublez)returnmax(max(x,y),z);,方法重写,publicclassShapeprotecteddoublewidth;protecteddoubleheight;publicShape()width=height=0.0;publicShape(doublew,doubleh)width=w;height=h;publicdoublegetArea()returnwidth*height;,classTriangleextendsShapepublicTriangle(doublew,doubleh)super(w,h);publicdoublegetArea()returnwidth*height/2;,classTrapeziaextendsShapeprivatedoublewidth2;publicTrapezia(doublew,doublew2,doubleh)super(w,h);width2=w2;publicdoublegetArea()return(width+width2)*height/2;,super关键字,若子类重写了父类中的方法或子类隐藏了父类中的数据成员,但又想访问父类的成员变量和方法,怎么办?解决的办法是使用super关键字。,抽象类,抽象类具有以下特性。含有抽象方法的类必须被声明为抽象类,抽象类必须被继承,抽象方法必须被实现。抽象类中不是所有的方法都是抽象方法,可以在抽象类中声明并实现方法。抽象类的子类必须实现父类的所有抽象方法后才能实例化,否则这个子类也成为一个抽象类。抽象类不能实例化。FileScannerHelp抽象类,publicabstractclassFileScannerHelp/*/publicabstractvoidinitialize();publicabstractvoidpreScan(Stringdir);publicabstractvoidpostScan(Stringdir);publicabstractvoiddoScanFile(Stringpath,Stringname);publicabstractvoidcleanup();,接口,接口的定义格式如下。publicinterfaceextends关键字interface用于定义接口,接口通常都定义为public类型。例如,定义一个接口:,publicinterfaceRunnerintid=1;/等价于publicstaticfinalintid=1;publicvoidstart();/等价于publicabstractvoidstart();publicvoidrun();publicvoidstop();,接口的示例,下面是一个PCI接口的示例。,publicinterfacePCIpublicvoidstart();publicvoidstop();,classSoundCardimplementsPCIpublicvoidstart()System.out.println(Dudu.);publicvoidstop()System.out.println(Soundstop!);,classNetworkCardimplementsPCIpublicvoidstart()System.out.println(S

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论