建立自己的類別

建立專案所需的類別看起來可能相當不容易。不過,建立類別時,比較困難的部分是設計類別的方法、屬性和事件。

設計類別的策略

物件導向設計是相當複雜的一項主題,而關於這項主題的學術研究和應用實務不勝枚舉。不過,下面幾個建議方法可幫助您入門。

  1. 考量這個類別的實體將在應用程式中扮演什麼角色。一般來說,物件的角色包括:

    • 值物件:這些物件主要用途是做為資料的容器。它們的可能有幾個屬性和方法 (或者有時候沒有任何方法)。它們一般是明確定義之項目的程式碼。例如,音樂播放程式可以包含 Song 類別,表示實際一首歌,另外有一個 Playlist 類別,表示概念上的歌曲匯總。

    • 顯示物件:這些是實際出現在畫面上的物件。例如下拉式清單或狀態報告等使用者介面元素,或像是電玩人物的圖形元素等。

    • 應用程式結構:這些物件在應用程式執行的邏輯或處理中扮演各種支援角色。例如,您可以建立一個物件,在模擬生物學中執行特定計算。您可以建立一個物件,負責同步音樂播放程式的刻度控制與音量輸出。另一個物件可以管理電玩中的規則。或者您可以建立一個類別,在繪圖應用程式中載入儲存的相片。

  2. 決定類別需要的特定功能。不同類型的功能通常會成為類別的方法。

  3. 如果類別要當做值物件使用,則需決定實體將包含哪些資料。這些項目可以當做屬性。

  4. 由於類別是特別為專案所設計,因此重點在於提供應用程式所需的功能。試著自行回答這些問題:

    • 應用程式將儲存、追蹤和操作哪些資訊?回答這個問題可以幫助您找出需要的任何值物件和屬性。

    • 應用程式會執行哪些動作?例如,應用程式第一次載入時、按下特定按鈕後、電影停止播放時,會發生什麼事?這些項目都可以當做方法。如果「動作」涉及變更個別的值,也可以是屬性。

    • 至於任何指定的動作,執行動作時需要什麼資訊?這些資訊就是方法的參數。

    • 隨著應用程式執行,哪些情況會使類別產生變化,而且要讓應用程式的其它部分知道?這些項目就可以當做事件。

  5. 現在是否有任何物件和您需要的物件類似,但缺少一些您想添加的額外功能?考慮建立一個子類別。(「子類別」是一種以現有類別的功能為基礎而建立的類別,不是定義它自己所有的功能。)例如,如需建立屬於螢幕視覺物件的類別,可以將現有的顯示物件當做是類別的基礎。在這種情況下,顯示物件 (例如 MovieClip 或 Sprite) 會是「基底類別」,而您的類別將延伸該類別。

撰寫類別的程式碼

當您對類別有了某種設計,或者至少對於它應該儲存的資訊以及要執行的動作有了一些構思之後,實際的類別撰寫語法就簡單容易多了。

下面是建立 ActionScript 類別的基本步驟:

  1. 使用您的 ActionScript 文字編輯器程式開啟新的純文字文件。

  2. 輸入 class 陳述式來定義類別的名稱。若要新增 class 陳述式,請輸入 public class 這兩個字,然後輸入類別的名稱。新增左、右方大括號來包含類別的內容 (方法和屬性定義)。例如:

    public class MyClass 
    { 
    }

    public 一字代表可以從任何其它程式碼存取類別。如需其它替代方式,請參閱存取控制命名空間特質。

  3. 輸入 package 陳述式,指示包含類別的套件名稱。語法是指 package 這個字,後面加上完整的套件名稱,接下來是 class 陳述式周圍的左、右大括號)。例如,將前一個步驟的程式碼變更成以下內容:

    package mypackage 
    { 
        public class MyClass 
        { 
        } 
    }
  4. 在類別主體內,使用 var 陳述式定義類別中的每個屬性。語法就跟宣告任何變數的語法一樣 (加上 public 修飾詞)。例如,在類別定義的左右大括號之間加入下面幾行,會建立名為 textProperty numericProperty 以及 dateProperty 的屬性:

    public var textProperty:String = "some default value"; 
    public var numericProperty:Number = 17; 
    public var dateProperty:Date;
  5. 使用定義函數的相同語法來定義類別中的每個方法。例如:

    • 若要建立 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); 
      }

      如果您未在類別中包括建構函式方法,編譯器會自動在類別中建立一個空白的建構函式。(也就是,不含參數而且沒有陳述式的建構函式。)

    您可以定義一些其他類別元素。這些元素更複雜一些。

    • 「存取子」是介於方法與屬性之間的特殊混合體。當您撰寫程式碼來定義類別時,可以將存取子寫成方法。您可以執行多個動作,而不是像定義屬性一樣只能讀取或指定值。但是,當您建立類別的實體時,會將存取子視為屬性,並使用名稱來讀取或指定值。

    • ActionScript 中的事件不是使用特定語法定義的。您反而應該使用 EventDispatcher 類別的功能,在您的類別中定義事件。