创建自己的类
创建在项目中使用的类的过程可能令人望而生畏。但是,在创建类的过程中,更难的部分是设计类的方法、属性和事件。
类设计策略
面向对象的设计这一主题较为复杂;整个行业的人员都对此学科进行了大量的学术研究和专业实践。尽管如此,下面还是给出了几条建议以帮助您着手进行面向对象的编程。
请考虑一下该类的实例在应用程序中扮演的角色。通常,对象担任以下三种角色之一:
值对象:这些对象主要作为数据的容器,可能具有几个属性和为数不多的方法(有时甚至没有方法)。它们通常是明确定义的项目的代码表示。例如,音乐播放器应用程序可以包含一个表示一首实际歌曲的 Song 类和一个表示一组概念歌曲的 Playlist 类。
显示对象:它们是实际显示在屏幕上的对象。例如,用户界面元素(如下拉列表或状态显示)和图形元素(如视频游戏中的角色)等就是显示对象。
应用程序结构:这些对象在应用程序执行的逻辑或处理方面扮演着多种支持角色。例如,您可以在生物学模拟中安排某个对象执行特定的计算。您可以安排一个对象负责同步音乐播放器应用程序中拨号控件和音量显示之间的值。另一个对象可安排来管理视频游戏中的规则。或者,您还可以安排一个类在绘图应用程序中加载保存的图片。
确定类所需的特定功能。不同类型的功能经常会成为类的方法。
如果打算将类用作值对象,请确定实例包含的数据。这些项是很好的候选属性。
由于类是专门为项目而设计的,因此最重要的是提供应用程序所需的功能。尝试自己独立回答以下问题:
应用程序存储、跟踪和处理哪些信息?回答此问题可以帮助您识别所需的任何值对象和属性。
应用程序执行哪些动作组合?例如,应用程序第一次加载时、单击特定按钮时以及停止播放影片时会出现什么情况?这些是很好的候选方法。如果“动作”包含更改单独的值,这些也可以是属性。
对于任何给定的动作,执行该动作需要哪些信息?这些信息将成为方法的参数。
随着应用程序开始工作,应用程序的其它部分需要了解类中的哪些内容会发生更改?这些是很好的候选事件。
是不是现有对象类似于您需要的对象,但是缺少一些您希望添加的其它功能?请考虑创建子类。(子类是在现有类的功能的基础上构建的类,它不定义自己的全部功能。)例如,若要创建一个在屏幕上是可视对象的类,则使用现有显示对象的行为作为您的类的基础。在这种情况下,显示对象(如 MovieClip 或 Sprite)是基类,而您的类是该类的扩展。
编写类的代码
想明白类的设计,或者至少想明白它存储哪些信息、执行哪些动作后,实际编写类的语法非常简单。
下面是创建您自己的 ActionScript 类的最基本步骤:
在 ActionScript 文本编辑器程序中打开一个新的文本文档。
输入 class 语句来定义类的名称。要添加 class 语句,先输入单词 public class,然后输入类的名称。添加左大括号和右大括号,在其中包含类的内容(方法和属性定义)。例如:
public class MyClass
{
}
单词 public 表示可以从任何其它代码中访问该类。有关其它选项,请参阅访问控制命名空间属性。
键入 package 语句来指示包含您的类的包的名称。语法形式为:单词 package,后面依次是完整包名称和左大括号与右大括号,括号中内容为 class 语句块。例如,将上一步中的代码更改为以下形式:
package mypackage
{
public class MyClass
{
}
}
在类体中使用 var 语句定义该类中的每个属性;语法与用于声明变量的语法相同(增加了 public 修饰符)。例如,在类定义的左大括号与右大括号之间添加下列行将创建名为 textProperty、numericProperty 和 dateProperty 的属性:
public var textProperty:String = "some default value";
public var numericProperty:Number = 17;
public var dateProperty: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);
}
如果类中未包含构造函数方法,编译器会自动在您的类中创建一个空构造函数。(即不带任何参数和语句的构造函数。)
您可以定义更多类元素。这些元素相对复杂一些。