Flashmx2004系列教程〈三〉ActionScript 2.0-针对OOP的关

9次阅读

下面我们将真正研究一下 AS2 的特性,在早期往往是在讨论 AS1 复杂的面向对象编程比实际工作更多一些,现在你将很快的看到,你不用花很多时间去争论怎么样做到最好的继承,将代码放置在哪和如何组织好你的代码库。

让我们先回顾一下 OOP 基础,OOP 的最基本单元是对象,它包含两部分:代码和数据。由于对象是一种以自己自足的形式出现,因此它的数据和代码(方法)不需要公开。就象一个黑盒子,对象负责以自身的方法去管理自身的数据,对象与对象之间通过传递信息通讯。这些信息以公用或公开的方式传递和接收。而内部的数据和方法并没有直接参与其中,这就是 OOP 的基本原理。

在 OOP 的设计中,比做是一张大图,要想到重点和要实现的目标,以及各个部分之间的联系。将这张大图分成小的单元,并且保证各自的自身独立性,那么整个项目就很容易完成。而这些小的单元在 OOP 中就被称为类。所有这些 AS2 都提供了很好的支持。

下面这些关键字与 OOP 有关:

class interface extends implements
public private static dynamic
import get set intrinsic

我们不在重复 mcromedia 的帮助文档中对每一关键字的描述,我们可以用实例来说明。注意关键字 intrinsic 是 mcromedia 内部使用的关键字。这里面没 package 也就包的关键字,但是它与类路径的工作方式是很重要的,就象是其它语言中的包一样,如 JAVA。

下面我们来看一下例子,在 AS1 中的类,将其改写为 AS2 的类。

// 构造函数 
_global.Parent = function(name) {this.init.apply(this, arguments);
};
// 类的属性
Parent.lastNames = new Array();
Parent.prototype.init = function(name) {
   this.lName = name;
   Parent.lastNames.push(name);
   this.id = Parent.lastNames.length-1;
   trace("Added'"+ Parent.lastNames[this.id] +"'at:"+ this.id);
};
Parent.prototype.getLastName = function() {return (this.lName);
};
Parent.prototype.setLastName = function(s) {
   this.lName = s;
   Parent.lastNames[this.id] = s;
};
Parent.prototype.getNames = function() {return (Parent.lastNames);
};
Parent.prototype.addProperty("lastName", Parent.prototype.getLastName, 
Parent.prototype.setLastName); Parent.prototype.addProperty("names", Parent.prototype.getNames, null);

上面的代码改写为 AS2 就向下面这样:

新的关键字被应用在如下的例子中:class, private, public, static, get, set

class Parent {
   private var lName:String = "";
   private var id:Number;
   private static var lastNames:Array = new Array();
   // 构造函数
   public function Parent(name:String) {init.apply(this, arguments);
   }
   private function init(name:String):Void {
      lName = name;
      lastNames.push(name);
      id = lastNames.length-1;
      trace("Added'"+ lastNames[id] +"'at:" + id);
   }
   public function get lastName():String {return lName;}
   public function set lastName(s:String):Void {
      lName = s;
      lastNames[id] = s;
   }
   public function get names():Array {return lastNames;}
}

通过上面的 AS1 和 AS2 执行同一个类。我们可以看出二者非常的相似,主要的不同以 AS2 为例:

1。以外部文件的形式存在如.as,同时注意类的名称要与外部文件名称相同。

2。AS2 区分大小写,在 AS2 中 object 和 Object 是不同的。

3。类的方法定义在类的内部。

4。类的内部不在允许有内部类出现。

5。关键字如 public,private,static 等写在类方法或属性的前面。

6。数据类型写在方法或属性名称的后面如:name:string;

7. 创建 get|set 方法更容易使用如下方法:[modifier] function get|set functionName(argument[:type,…])[:type] {}

正文完