Tworzenie własnych klas

Proces tworzenia klas przeznaczonych do użytku we własnych projektach może wydawać się żmudny. Jednak w istocie najtrudniejszym etapem tworzenia klasy jest jej zaprojektowanie — czyli wybór jej metod, właściwości i zdarzeń.

Strategie projektowania klas

Projektowanie zorientowane obiektowo jest złożonym zagadnieniem; dziedzina ta stanowi przedmiot pracy zawodowej i badań naukowych. Możliwe jest jednak wskazanie kilku rekomendacji, które znacznie ułatwią zmierzenie się z tym zagadnieniem.

  1. Zastanów się, jaką rolę w aplikacji odgrywają instancje tej klasy. Z reguły obiekty pełnią jedną z trzech ról:

    • Obiekty wartości: te obiekty pełnią głównie rolę kontenerów danych. Mogą zawierać kilka właściwości i niewielką liczbę metod (lub zero metod). Zwykle reprezentują one w kodzie wyraziście zdefiniowane elementy. Na przykład: aplikacja odtwarzacza muzyki może zawierać klasę Song, która będzie reprezentować pojedynczy rzeczywisty utwór; a także klasę Playlist, która będzie reprezentować grupę utworów.

    • Obiekty wyświetlane: są to obiekty widoczne na ekranie. Należą do nich na przykład elementy interfejsu użytkownika, takie jak listy rozwijane, wskaźniki stanu, elementy graficzne, np. postacie w grze wideo, itd.

    • Obiekty struktury aplikacji: pełnią rozmaite role pomocnicze w strukturze logiki i przetwarzania aplikacji. Na przykład: można utworzyć obiekt, który będzie wykonywał określone obliczenia w ramach symulacji biologicznej. Możliwe jest utworzenie obiektu, który będzie odpowiedzialny za synchronizowanie wartości między pokrętłem, a polem odczytu głośności w aplikacji odtwarzacza muzyki. Inny obiekt może zarządzać regułami w grze wideo. Możliwe jest również utworzenie klasy, która będzie ładowała zapisany obraz do aplikacji przeznaczonej do rysowania.

  2. Należy określić konkretne funkcje, jakie będzie pełniła klasa. Różne funkcje realizowane przez klasę często kodowane są w postaci metod tej klasy.

  3. Jeśli klasa ma pełnić rolę obiektu wartości, zdecyduj, jakie dane mają zawierać instancje tej klasy. Te dane prawdopodobnie znajdą odzwierciedlenie w postaci właściwości.

  4. Ponieważ klasa projektowana jest pod kątem konkretnego projektu, powinna realizować funkcje potrzebne w danej aplikacji. Należy udzielić odpowiedzi na następujące pytania:

    • Jakie elementy informacji są przechowywane, rejestrowane i modyfikowane w aplikacji? Udzielenie odpowiedzi na to pytanie ułatwi określenie wymaganych obiektów wartości i właściwości.

    • Jakie operacje wykonuje aplikacja? Na przykład: co dzieje się po załadowaniu aplikacji, po kliknięciu konkretnego przycisku, po uruchomieniu filmu itp. Tak zidentyfikowane operacje mogą stać się metodami. Mogą być również właściwościami, jeśli „operacje” obejmują zmiany wartości.

    • Jakie są informacje wymagane do wykonania poszczególnych operacji? Te informacje staną się później parametrami metod.

    • O jakich zmianach zachodzących w klasie aplikacja musi „wiedzieć” na różnych etapach wykonywania? Tak zidentyfikowane zmiany staną się później zdarzeniami.

  5. Czy istnieje obiekt podobny do obiektu wymaganego, ale różni się od niego tym, że nie zawiera dodatkowych funkcji, które użytkownik chce dodać? Należy rozważyć utworzenie podklasy. ( Podklasa to klasa, która wykorzystuje funkcje istniejącej klasy, a nie definiuje własnych funkcji). Na przykład: w celu utworzenia klasy, która jest obiektem ekranowym, można wykorzystać zachowanie istniejącego obiektu ekranowego jako podstawę nowej klasy. W takim przypadku obiekt ekranowy (taki jak MovieClip lub Sprite) będzie klasą bazową , a nowa klasa będzie rozszerzała istniejącą klasę.

Pisanie kodu klasy

Po zaprojektowaniu klasy — lub przynajmniej po zaplanowaniu, jakie informacje klasa będzie przechowywać oraz jakie operacje będzie wykonywać — napisanie składni klasy jest dosyć proste.

Oto minimalny zestaw czynności, jakie należy wykonać, aby utworzyć własną klasę w języku ActionScript:

  1. Otwórz dokument tekstowy w edytorze kodu ActionScript.

  2. Wpisz instrukcję class , aby zdefiniować nazwę klasy. Aby dodać instrukcję class , wprowadź słowa public class , a następnie nazwę klasy. Dodaj otwierające i zamykające nawiasy sześcienne, które będą zawierały treść klasy (definicje metody i właściwości). Na przykład:

    public class MyClass 
    { 
    }

    Słowo public oznacza, że klasa będzie dostępna z dowolnego miejsca kodu. Alternatywne warianty dostępności klasy opisano w sekcji Atrybuty przestrzeni nazw sterujące dostępem.

  3. Wpisz instrukcję package w celu wskazania nazwy pakietu, który zawiera klasę. Składnia jest następująca: słowo package , a za nim pełna nazwa pakietu, po której występują otwierające i zamykające nawiasy klamrowe otaczające blok instrukcji class ). Przykład: zmień kod z poprzedniego kroku na poniższy:

    package mypackage 
    { 
        public class MyClass 
        { 
        } 
    }
  4. W treści klasy zdefiniuj wszystkie jej właściwości, używając instrukcji var ; obowiązuje taka sama składnia, jak przy deklarowaniu zmiennych (z dodatkowym modyfikatorem public ). Na przykład: dodanie tych wierszy między otwierające i zamykające nawiasy klamrowe definicji klasy powoduje utworzenie właściwości o nazwach textProperty , numericProperty i dateProperty :

    public var textProperty:String = "some default value"; 
    public var numericProperty:Number = 17; 
    public var dateProperty:Date;
  5. Zdefiniuj wszystkie metody klas. Obowiązuje ta sama składnia, co przy definiowaniu funkcji. Na przykład:

    • Aby utworzyć metodę myMethod() , wprowadź:

      public function myMethod(param1:String, param2:Number):void 
      { 
          // do something with parameters 
      }
    • Aby utworzyć konstruktor (specjalną metodę wywoływaną w procesie tworzenia instancji klasy), utwórz metodę o nazwie identycznej z nazwą klasy:

      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); 
      }

      Jeśli do klasy nie zostanie dołączona metoda konstruktora, kompilator automatycznie utworzy pusty konstruktor dla klasy. (Innymi słowy: konstruktor bez parametrów i bez instrukcji).

    Istnieje kilka dodatkowych elementów klasy, które można zdefiniować. Te elementy są bardziej złożone.

    • Akcesory to elementy stojące w pół drogi między metodą a właściwością. W definicji klasy akcesor zapisany jest tak, jak metoda. Umożliwia zatem wykonywanie wielu operacji, a nie tylko odczytywanie lub przypisywanie wartości, tak jak w przypadku właściwości. Jednak po utworzeniu instancji klasy akcesor można traktować tak, jak właściwość — tj. odczytywać i przypisywać wartości, odwołując się tylko do jego nazwy.

    • Język ActionScript nie oferuje specjalnej składni służącej do definiowania zdarzeń. Zamiast tego należy zdefiniować zdarzenia w klasie za pomocą funkcji klasy EventDispatcher.