代码改变世界

AS3(6) --- 创建自己的类

2011-02-15 16:38  @影子@  阅读(276)  评论(0编辑  收藏  举报

 创建在项目中使用的类的过程可能令人望而生畏。但是,创建类的过程中更难的部分是设计类,即确定类中将要包含的方法、属性和事件。
  
  类设计策略
  面向对象的设计这一主题较为复杂;整个行业的人员都对此学科进行了大量的学术研究和专业实践。尽管如此,下面还是给出了几条建议以帮助您着手进行面向对象的编程。
  
  请考虑一下该类的实例将在应用程序中扮演的角色。通常,对象担任以下三种角色之一:
  
  值对象:这些对象主要用作数据的容器 — 也就是说,这些对象可能拥有若干个属性和很少的几个方法(有时没有方法)。值对象通常是明确定义的项目的代码表示,例如音乐播放器应用程序中的 Song 类(表示单个实际的歌曲)或 Playlist 类(表示概念上的一组歌曲)。
  
  显示对象:它们是实际显示在屏幕上的对象。例如,用户界面元素(如下拉列表或状态显示)和图形元素(如视频游戏中的角色)等等就是显示对象。
  
  应用程序结构:这些对象在应用程序执行的逻辑或处理方面扮演着广泛的支持角色。例如,在仿生学中执行某些计算的对象;在音乐播放器应用程序中负责刻度盘控件与音量显示之间的值同步的对象;管理视频游戏中的规则的对象;或者在绘画应用程序中加载保存的图片的对象。
  
  确定类所需的特定功能。不同类型的功能通常会成为类的方法。
  
  如果打算将类用作值对象,请确定实例将要包含的数据。这些项是很好的候选属性。
  
  由于类是专门为项目而设计的,因此最重要的是提供应用程序所需的功能。回答下列问题可能会对您很有帮助:
  
  应用程序将存储、跟踪和处理哪些信息?确定这些信息有助于您识别可能需要的值对象和属性。
  
  需要执行的哪些操作 — 例如,在应用程序首次加载时、在单击特定的按钮时、在影片停止播放时以及其它时候需要执行哪些操作?这些是很好的候选方法(如果“动作”仅涉及更改单个值,则是很好的候选属性)。
  
  对于任何给定的动作,要执行该动作,该类需要了解哪些信息?这些信息将成为方法的参数。
  
  随着应用程序开始工作,应用程序的其它部分需要了解类中的哪些内容将发生更改?这些是很好的候选事件。
  
  如果有一个现有的对象类似于您需要的对象,只是缺少您想要添加的一些额外功能,请考虑创建一个子类(在现有类的功能的基础之上构建的类,而不是定义该类自己的所有功能)。例如,如果您希望创建一个将作为屏幕上的可视对象的类,可将一个现有显示对象(如 Sprite 或 MovieClip)的行为用作该类的基础。在这种情况下,MovieClip(或 Sprite)是基类,而您的类是该类的扩展。有关创建子类的详细信息,请参阅继承。
  
  编写类的代码
  一旦制订了类的设计计划,或至少对该类需要跟踪哪些信息以及该类需要执行哪些动作有了一定了解后,编写类的实际语法就变得非常简单了。
  
  下面是创建自己的 ActionScript 类的最基本步骤:
  
  在特定于 ActionScript 的程序(如 Flex Builder 或 Flash)、通用编程工具(如 Dreamweaver)或者可用来处理纯文本文档的任何程序中打开一个新的文本文档。
  
  输入 class 语句定义类的名称。为此,输入单词 public class,然后输入类名,后跟一个左大括号和一个右大括号,两个括号之间将是类的内容(方法和属性定义)。例如:
  
  public class MyClass { }
  单词 public 表示可以从任何其它代码中访问该类。有关其它选项,请参阅访问控制命名空间属性。
  
  键入 package 语句以指示包含该类的包的名称。语法是单词 package,后跟完整的包名称,再跟左大括号和右大括号(括号之间将是 class 语句块)。例如,我们将上一步中的代码更改为:
  
  package mypackage { public class MyClass { } }
  在类体中使用 var 语句定义该类中的每个属性;语法与用于声明任何变量的语法相同(并增加了 public 修饰符)。例如,在类定义的左大括号与右大括号之间添加下列行将创建名为 textVariable、numericVariable 和 dateVariable 属性:
  
  public var textVariable:String = "some default value"; public var numericVariable:Number = 17; public var dateVariable:Date;
  使用与函数定义所用的相同语法来定义类中的每个方法。例如:
  
  要创建 myMethod() 方法,应输入:
  
  public function myMethod(param1:String, param2:Number):void { // do something with parameters }
  要创建一个构造函数(在创建类实例的过程中调用的特殊方法),应创建一个名称与类名称完全匹配的方法:
  
  public function MyClass() { // do stuff to set initial values for properties // and otherwise set up the object textVariable = "Hello there!"; dateVariable = new Date(2001, 5, 11); }
  如果没有在类中包括构造函数方法,则编译器将会在类中自动创建一个空构造函数(没有参数和语句)。
  
  您还可以定义其它几个类元素。这些元素更为复杂。
  
  “存取器”是方法与属性之间的一个特殊交点。在编写代码来定义类时,可以像编写方法一样来编写存取器,这样就可以执行多个动作(而不是像在定义属性时那样,只能读取值或赋值)。但是,在创建类的实例时,可将存取器视为属性 — 仅使用名称来读取值或赋值。有关详细信息,请参阅get 和 set 存取器方法
  
  ActionScript 中的事件不是使用特定语法来定义的。应使用 EventDispatcher 类的功能来定义类中的事件,以便跟踪事件侦听器并将事件通知给它们。有关在您自己的类中创建事件的详细信息,请参阅处理事件