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.
-
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.
-
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.
-
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.
-
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.
-
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:
-
Otwórz dokument tekstowy w edytorze kodu ActionScript.
-
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
.
-
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
{
}
}
-
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;
-
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.
|
|
|