第6章 面向对象编程基础.docx_第1页
第6章 面向对象编程基础.docx_第2页
第6章 面向对象编程基础.docx_第3页
第6章 面向对象编程基础.docx_第4页
第6章 面向对象编程基础.docx_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

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

文档简介

面向对象编程基础面向对象的编程,其英文是“Object-Oriented Programming”,简写为OOP。它以对象为基本单元来进行代码划分,组织程序代码。ActionScript3.0是一个完全标准的面向对象编程语言。面向对象编程在Flash5已经开始支持,可惜语法不是业界传统的编程语言格式,在Flash5和Flash MX中编写面向对象的编程非常的不方便。ActionScript2.0在面向对象的编程上有很大的进步,但是由于其使用的并不完全符合标准,存在很多的问题。现在ActionScript3.0的推出基本解决了ActionScript2.0中存在的问题,并有了很多的改进,而且相对于其它的OOP语言,其更简单易学。1面向对象编程技术概述面向对象编程中最重要也最难以理解的概念就是“对象”。对象,指的是具有某种特定功能的程序代码。对象(Object)具体可以指一件事、一个实体、一个名词,一个具有自己的特定标识的东西。比如汽车、人、房子、桌子、植物、支票、雨衣等等都是对象。对象就是一种客观存在,可能有时你觉得虚无飘渺,但是却的的确确存在着。任何一个对象都有其属性。以人为例,人有身高、体重、性别、血型、年龄等等,这些都反映了人作为一个社会存在所共有的特性。把这些特性反映到编程语言中,这些特性就是属性,用来反映某一个对象的共有特点。2类对象是抽象的概念,要想把抽象的对象变为具体可用的实例,则必须使用类。使用类来存储对象可保存的数据类型,及对象可表现的行为信息。要在应用程序开发中使用对象,就必须要准备好一个类,这个过程就好像制作好一个元件并把它放在库中一样,随时可以拿出来使用。本节从类的基本概念着手,逐步介绍类的定义方法和类的使用方法。1)类的概述类(Class)就是一群对象所共有的特性和行为。早在ActionScript1.0中,程序员使用原型(Prototype)扩展的方法,来创建继承或者将自定义的属性和方法添加到对象中来,这是类在Flash中的初步应用。在ActionScript 2.0中,通过使用class和extends 等关键字,正式添加了对类的支持。ActionScript 3.0不但继续支持ActionScript 2.0中引入的关键字,而且还添加了一些新功能,如通过protected和internal属性增强了访问控制,通过final和override关键字增强了对继承的控制。下面来简单了解一下ActionScript3.0中类(Class)的构成。具体的类结构及实现方法,请参见6.2.2节的内容。包块和类(Class)的名称。构造函数。属性:包括实例属性和静态属性。方法:包括实例方法和静态方法。2)创建自定义的类创建一个自定义类的操作步骤如下:(1)建立一个准备保存类文件的目录,即为一个包(package)。比如在计算机中有个目录“F:Test”。(2)启动Adobe Flash CS3,新建一个ActionScript文件,文件名为要创建的类的名字。比如要创建的类的名称为Sample,那么保存的文件名称也要为Sample。注意一定要保存在刚才建立的目录中。(3)在文件的开头写入package关键字和package包的路径。如:package Test,其中Test就是保存类文件的目录名称。(4)若需要引入其它的类,则需要在package后面的大括号后插入新行,使用import语句加入其它类的包路径和名称。比如import flash.geom.point。若不需要,则此步骤可以省略。(5)在新的一行写入class关键字和类的名字。如class Sample。(6)在class后面的大括号内写入对类定义的内容,包括构造函数,属性和方法。3)创建类的实例类是为了使用而创建的,要使用创建好的类,必须通过类的实例来访问。要创建类的实例,需要执行下面的步骤:(1)使用import关键字导入所需的类文件。其用法格式如下所示。import 类路径.类名称;(2)使用new关键字加上类的构造函数。其用法格式如下:var 类引用名称:类名称new 类名称构造函数();4)包块和类在ActionScript 3.0中,包路径是一个独立的模块,单独用一个包块来包含类,不再作为类定义的一部分。定义包块使用package关键字,其用法格式如下所示。package 包块路径/类体用法示例代码:package com.lzxt.display/类体5)包的导入在ActionScript 3.0中,要使用某一个类文件,就需要先导入这个类文件所在的包,也就是要先指明要使用的类所在的位置。通过情况下,包的导入有这样的三种情形:1明确知道要导入哪个包,直接导入单个的包例如说要创建一个绘制对象,那么只需导入Display包中的Shape包即可。代码如下所示。import flash.display.Shape;2不知道具体要导入的类,使用通配符导入整个包例如需要一个文本的控制类,但是并不知道该类的具体名称,那么就可以使用“*”通配符进行匹配,一次导入包内的所有类。具体使用代码如下所示。import flash.text.*3要使用同一包内的类文件,则无需导入如果现在有多个类位于计算机中的同一个目录下,则这些类在互相使用的时候,不需要导入,直接使用即可。6)构造函数构造函数是一个特殊的函数,其创建的目的是为了在创建对象的同时初始化对象,即为对象中的变量赋初始值。在ActionScript 3.0编程中,创建的类可以定义构造函数,也可以不定义构造函数。如果没有在类中定义构造函数,那么编译时编译器会自动生成一个默认的构造函数,这个默认的构造函数为空。构造函数可以有参数,通过参数传递实现初始化对象操作。下面的示例列出两种常用的构造函数代码:/空构造函数public function Sample()/有参数的构造函数public function Sample(x:String)/初始化对象属性7)声明和访问类的属性在编程语言中,使用属性来指明对象的特征和对象所包含的数据信息以及信息的数据类型。在定义类的过程中,需要通过属性来实现对象特征的描述和对象信息数据类型的说明。比如在创建一个关于人的类的过程中,就需要说明人这一对象的“性别”特征,需要说明人的“年龄”这一数据的数据类型是一个数字等等。本节将介绍声明和访问类属性的方法。在ActionScript 3.0的类体中,一般在class语句之后声明属性。类的属性分两种情况:实例属性和静态属性。实例属性必须通过创建该类的实例才能访问,而静态属性则不需要创建类实例就能够访问。声明实例属性的语法格式如下所示。var 属性名称:属性类型;var 属性名称:属性类型=值;public var 属性名称:属性类型=值;8)声明和访问类的方法在编程语言中,使用方法来构建对象的行为,即用来表示对象可以完成的操作。在编程过程过程中,通过对象的方法,告诉对象可以做什么事情,怎么做。比如在创建一个关于人的类的过程中,就需要知道人能够干什么事情,这就是人这一对象的方法。比如人张口说话,举手等等行为,都需要通过方法来表示。在ActionScript 3.0中,声明类实例方法的格式和上面函数的格式类似,格式如下所示。function 方法名称(参数):返回类型/方法内容9)类的使用在ActionScript 3.0中,创建好的类一般有3种使用方法:作为文档类进行文档类绑定;作为库中元件的类进行绑定;作为外部类使用import关键字导入。下面结合实例具体的来说一下这3种用法。1文档类文档类是ActionScript 3.0的新特色,该特色是为实现代码与文档分离而设计的。 2与库文件绑定与fla文件库中的影片剪辑进行绑定,每个影片剪辑只能绑定一个类。3import导入类10)包外类在ActionScript 3.0中,一个类文件中可以定义多个类,但是包块内只能定义有一个类,此为主类。主类的名称一定要和类文件的名称相同,这个类是供外部使用的。在包块之外,还可以定义多个类,这些类的名称和类文件的名称不同,而且只能由当前类中的成员可以访问。这种类,有些资料称其为包外类,有些资料称其为助手类。在这里笔者使用包外类这一名称。3接口接口可以看作是一个对象之间相互联系的纽带,起一个桥梁的作用。通过接口中方法声明的集合,能够使互不相干的对象之间相互通信。接口和类存在着一些类似的地方,也由一定的区别。接口仅仅声明方法而不提供实现的方法,要实现方法,需要在该接口的类中声明和实现。接口方法的实现无任何属性,但在接口类的定义中,实现的方法必须为public。可通过extends语句由接口继承实现多个接口,也可以通过implements语句由类继承实现。接口是一个定义类方法组的数据类型,可作为类型注释。1)接口的定义定义接口的方法和定义类相似,不过需要使用interface关键字来实现。接口可以包含实例方法、静态方法、getter和setter方法。接口也需要保存为as文件,文件名必须和接口名保持一致,完全相同。定义接口的语法格式如下所示。package 包路径 访问控制 interface 接口名称 function 实例方法名(参数:参数类型):返回类型; static function 静态方法名(参数:参数类型):返回类型; function get 方法名():返回类型; function set 方法名(参数:参数类型):void;2)在类中实现接口接口只是负责定义一些方法,这些方法要实现,则必须使用接口类来完成。接口类要使用implements关键字来实现。一个类可以实现多个接口,多个接口之间使用“,”分开。同样一个接口可以由多个子类来继承。下面的示例代码继承上一节中的Iperson接口,并创建子类Man。代码如下所示。package /定义类Man,继承自接口IPersonpublic class Man implements IPerson /定义类方法walkpublic function walk():void trace(男人走路有力量!);/定义类方法saypublic function say():void trace(男人说话直截了当!);4继承继承(Inheritance)是面向对象技术的一个重要的概念,也是面向对象技术的一个显著特点。继承是指一个对象通过继承可以使用另一个对象的属性和方法。准确的说,继承的类具有被继承类的属性和方法。被继承的类,称为基类或者超类,也可以称为父类;继承出来的类,称为扩展类或者子类。1)继承的定义类的继承要使用extends关键字来实现。其语法格式如下所示。package class 子类名称 extends 父类名称 下面的示例创建一个新类Man,它继承自Person类,这样Man类就是子类,而Person类就是父类。用法示例代码如下:package class Man extends Person2)属性和方法的继承子类可以继承父类中的大部分的属性和方法,但是父类中使用“private”访问控制符定义的属性和方法不能被继承。下面的示例新建一个PC类作为父类,该类有两个实例属性name和age,有两个实例方法walk()和say()。代码如下所示。创建父类PC,代码如下所示。package com.lzxt/构建类public class PC /构建属性public var name:String=浪子啸天;public var age:int=30; /构建方法public function walk():void trace(人可以走路!);public function say():void trace(欢迎你来到as3世界);3)重写override通过继承父类,可以继承父类的属性和方法。但有些时候指需要使用父类中方法名称,而需改变其内容时,就需要利用重写来修改其方法内容。在ActionScript 3.0中,只能重写实例的方法,不能重写实例属性。还有父类中方法的访问控制符为final的方法也不能进行重写。下面在上节的子类Man中重写父类PC的方法walk(),代码如下所示。package com.lzxt/继承父类public class Man extends PC public override function walk():void trace(这是重写过的走路方法);5AS3.0命名空间在ActionScript3.0中引入了命名空间的概念,使用命名空间,可以控制标识符的可见性,可以管理各个属性和方法的可见性。不管命名空间是在的内部还是外部,都可以应用于代码。ActionScript 3.0中有4个访问控制符,分别为:public、private、internal和protected。这4个访问控制符就是一种命名空间,同样,也可以定义自己的命名空间。本节就来介绍一下自定义命名空间和应用命名空间的方法。1)命名空间的定义命名空间常见的情况有两种:一是将命名空间定义到一个度类的as文件中,该命名空间能够使不同的包进行访问;二是将命名空间定义在类体中,该命名空间仅在本类中进行访问。1将命名空间定义在一个独立的as文件中下面的示例定义一个lzxt命名空间,代码如下所示。package/定义命名空间 pu

温馨提示

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

评论

0/150

提交评论