天天看点

ActionScript 3.0 不完全学习笔记系列 之 4 (ActionScript 中的面向对象编程)

            ActionScript3.0 OOP支持是可选的,这为程序员提供了很大的灵活性,使他们可以为各种领域何不同复杂程度的项目选择最佳的方法,对于小小项目,随用过程化编程就能满足需要,但对于大项目,应用OOP原则可以使代码更易于理解、维护、和扩展。

一、面向对象的编程基础知识。 

      1、面向对象的编程基础知识

                 OOP是一种组织程序代码的方法,它将代码划分为对象,即包含信息和功能的单个元素。

      2、常见的面型对象的编程任务。

                面向对象的编程包含两个部分,一部分就是设计,另一个部分就是构建函数,OOP中一下常见任务:

  • 定义类
  • 创建属性、方法、以及get和set存取器
  • 控制对类、属性、方法、和存取器的访问
  • 创建静态属性和方法
  • 创建与枚举类似的结构
  • 定义和使用接口
  • 处理继承(包括覆盖类的元素)

        3、重要的概念和术语

  • 属性:为类元素(属性或方法)分配的特征。属性通常用于定义程序的其他部分中的代码能否访问属性或方法。
  • 类:某种类型的对象的结构和行为定义。
  • 类层次结构。多个相关的类的结构。指定类与类中的功能继承。
  • 构造函数:可以在类中定义的特殊方法,当创建类的实例的时候就调用那个方法,不用写返回类型。
  • 数据类型:特定变量可以存储的信息类型。通常“数据类型”表示与“类”相同的内容。
  • 点运算符:“.”用于指定定某个名称引用对象的子元素(属性或方法)。
  • 枚举:一组相关常量数值,为方便起见,而将其作为一个类的属性组合在一齐。
  • 继承:允许一个类定义包含另一个类定义的所有功能。
  • 实例:程序中创建的实际对象
  • 命名空间:实质上是一个自定义属性,可以更精确地控制代码对其他代码的访问。(父包.子包.具体类名)

二、类

        类是对象的抽象表示形式,用来存储有关对象可保存的数据类型及对象可以表现的行为信息。

        1、类定义

         正确的类定义语法重要求class关键字后跟类名,类体要放在大括号({})内,且放在类名后面。在AS3中,引入package语句,包名称必须包含在声明中,而不是包含在类声明中。

         2、类属性

           as3中有四个属性来修改类定义

  • dynamic      允许在运行时向实例添加属性。   动态类的关键字
  • final             不得由其它类扩展
  • internal       对当前包内的引用可见
  • 公共 public   对所有位置的引用可见。

并不包含internal 和public两个属性,因为这两个属性在类定义中有意义,但不可以应用于类本身。

       3、类体

       类体放在大括号内,用于定义类的变量、常量和方法。还可以在类体中定义命名空间。还允许包括语句,如果语句。如果语句在类体中但在方法定义之外,这些语句在遇到类定义并且创建了相关的类对象是执行一次。

      4、类属性(property)的属性(attribute)

AS3中提供了可以与类的任何属性(property)一起使用的一组属性(attribute)

  • internal                   对同一包中的引用可见。
  • private                    对统一类中的引用可见。
  • protercted              对统一类及派生来中的引用可见。
  • public                     对所有位置的引用可见。
  • static                      指定某一属性属于该类,而不属于该类的实例。
  • UserDefinedNamespace             用于定义的自定义命名空间

三、变量

用var或const关键字声明的变量。var关键字声明的变量可以多次更改其变量值,const关键字声明的变量称为“常量”,只能赋值一次。

1、静态变量。

用static关键字,和var或const语句共同声明的。静态变量附加到类而不是实例。只能通过类本身来引用,不能通过类实例访问静态变量。声明常量的同时初始化使用。static和const关键字声明的变量,只能在创建时同时赋值。

2、实例变量。

实例变量包括使用var和const关键字,但未使用static关键声明的属性。实例变量附加到类实例,并不是整个类,对于存储特定的实例的值是很有用的!不能覆盖子类只能够通过getter和setter方法。可以时间类似于覆盖变量的功能。

四、方法

方法是类定义中的函数。不能将方法与附加方法的实例分开使用。

1、构造函数方法。

与在其中定义的函数的类共享统一名称的函数。只要使用new关键字创建类实例,就会执行构造函数方法中包括的所有代码。构造函数方法只能是公共方法。不能对关照函数方法使用用户定义的命名空间。构造函数可以使用super()语句显式地调用其直接超类的构造函数。如果决定在统一构造函数中使用super()和super,务必先调用super(),构造函数不能有返回值。所以不必定义任何返回值!

2、静态方法

静态方法也是类方法。使用static关键字声明的方法,静态方法附加到类而不是类的实例。只能通过类访问静态方法。二不能通过类实例访问。换句话说,就是如果方法提供的功能对类实例的值没有直接的影响,该方法应是静态方法。因为静态方法不能绑定到某个具体的实例,所有不能在静态方法中使用关键字this或super。

3、实例方法

实例方法是不使用是static关键字声明的方法。实例方法是附加到类实例而不是整个类。在实例方法中,静态变量和实例变量都在作用域中,这表示使用一个简单的标识符可以引用一同一类定义的变量。

继续阅读