Výuka Flash (20.)

Úvod

V dnešním dílu si ukážeme změny v ActionScriptu 2, které se vyskytly v nové verzi Macromedia Flash MX 2004. ActionScript 2 nyní obsahuje vylepšenou podporu OOP zejména tříd, rozhraní, dědičnosti a jiných OOP prvků. Nyní si postupně ukážeme jednotlivé změny v ActionScriptu2.


Strong Typing

V ActionScriptu 2 má nyní každá proměnná pevně stanovený datový typ (Strong Typing) jako je tomu například v ostatních jazycích. Pokud tedy vytvoříme proměnnou typu String a pokusíme se do ní uložit hodnotu typu Number, vyhodnotí kompilátor toto přiřazení jako chybu. Více na příkladě:


var Typ:String = "Peugeot";
Typ = 1;
trace(Typ);

Zobrazí chybové hlášení:


**Error** Scene=Scene 1, layer=Layer 1, frame=1:Line 2: Type mismatch in 
 assignment statement: found Number where String is required.
     Typ = 1;

Total ActionScript Errors: 1 	 Reported Errors: 1

Chybové hlášení nám oznamuje, že se pokoušíme do proměnné typu String přiřadit hodnotu typu Number. Správně by měl příklad vypadat takto:


var Typ:String = "Peugeot";
Typ = "Audi";
trace(Typ);

Jak si můžete všimnout, tak se nám při vytváření proměnných zobrazí kontextové menu, které nám pomůže s výběrem typu proměnné, funkce atd.

Nyní si ukážeme, jak deklarujeme funkce, jejich parametry a návratové hodnoty. Pro ukázku si vytvoříme funkci.


function Vypocitej(a:Number, b:Number):String {
	return a / b;
}

trace(Vypocitej(10, 2));

Funkce opět vrátí chybové hlášení:


**Error** Scene=Scene 1, layer=Layer 1, frame=1:Line 2: The expression returned must 
 match the function's return type.
     	return a / b;

Total ActionScript Errors: 1 	 Reported Errors: 1

Jako návratovou hodnotu jsme nastavili datový typ String, ovšem správně má být Number.


Třídy

Oproti starší verzi ActionScriptu musíme při vytváření tříd v ActionScriptu 2 dodržet určité postupy, bez kterých by třídy vytvářet nešlo. Jedná se především o:

Nyní si ukážeme jednoduchou třídu.


class cAuto {
	var Typ:String;
	function Info():String {
		return Typ;
	}
	
}
// Vytvoříme instanci třídy
var auto:cAuto = new cAuto();
auto.Typ = "Peugeot";

// Zobrazíme obsah proměnné
trace(auto.Info());

Nyní ovšem nastal okamžik, abychom definici naší třídy přesunuli do externího .as souboru. Vytvoříme tedy nový ActionScript .as soubor, který pojmenujeme stejně jako název námi vytvořené třídy (cAuto.cs) pomocí menu File -> New... -> ActionScript File.

Může se stát, že budeme chtít strukturu tříd trochu zorganizovat. Můžeme využít možnosti organizace do struktury podobné Jmenným prostorům - Namespaces podobné například z jazyků Java či C#. Tato organizace spočívá ve vytvoření adresářové struktury podle definovaného názvu. Pokud tedy vytvoříme třídu JosefNovak.Projekty.cAuto musíme ji uložit do adresářové struktury JosefNovak/Projekty/cAuto.as.

Flash také obsahuje nastavení, kterým můžeme ovlivnit umístění tříd. Ve výchozím nastavení Flash nejprve prohledá adresář Classes, který nalezneme v instalačním adresáři a poté ve složce se samotným projektem. Vlastní adresáře můžeme přidat nastavením pomocí Edit -> Preferences ->ActionScript -> ActionScript 2.0 Settings.

Nyní bude Flash vyhledávat v adresářové struktuře "C:\Tridy".

Abychom nemuseli vždy při vytváření instance vypisovat celou cestu například: "JosefNovak.Projekty.cAuto", můžeme využít klíčového slova import:


// Název třídy
import JosefNovak.Projekty.cAuto;

// nebo také pro import všech tříd
import JosefNovak.Projekty.*

// Vytvoříme instanci třídy
var auto:cAuto = new cAuto();
auto.Typ = "Peugeot";

// Zobrazíme obsah proměnné
trace(auto.Info());

Přístup k metodám a proměnným (Private, Public)

Pomocí modifikátorů Private a Public můžeme ovlivnit viditelnost metod a proměnných v třídách. V minulé verzi ActionScriptu byly všechny proměnné a funkce přístupné zvenčí (Public), nyní jejich viditelnost a práci s nimi můžeme ovlivnit pomocí těchto modifikátorů.

Modifikátorem Private nastavíme, že přístup k funkci nebo proměnné bude pouze uvnitř třídy. Modifikátorem Public nastavíme přístup odkudkoliv.


class cAuto {
	private var Typ:String;	
	function cAuto(typ:String) {
		Typ = typ;
	}
	
	public function Info():String {
		return Typ;
	}
}
// Vytvoříme instanci třídy
var auto:cAuto = new cAuto();
auto.Typ = "Peugeot";

// Zobrazíme obsah proměnné
trace(auto.Info());

Pokud bychom se tedy pokusili manipulovat s hodnotou proměnné Typ, zobrazil by kompilátor následující hlášení:


**Error** Scene=Scene 1, layer=Layer 1, frame=1:Line 3: The member is private and 
 cannot be accessed.
     auto.Typ = "Peugeot";

Total ActionScript Errors: 1 	 Reported Errors: 1

Správně by to tedy mělo vypadat následovně:


// Vytvoříme instanci třídy
var auto:cAuto = new cAuto("Peugeot");

// Zobrazíme obsah proměnné
trace(auto.Info());

Statické metody a proměnné

Statické metody a proměnné jsou takové, které můžeme zavolat bez vytvoření instance objektu. Pro nastavení použijeme modifikátor static.


class cAuto {
	static function Info():String {
		return "Typ auta";
	}
}

// Zavoláme metodu
trace(cAuto.Info());

Vlastnosti

Opět jako v jiných objektově orientovaných jazycích přichází ActionScript 2 vlastnostmi. Vlastnosti oddělují a zpřehledňují celkové uspořádání tříd. Při získávání a nastavování hodnot využíváme tzv. Getter a Setter metody.

Getter metoda nepřebírá žádný parametr a umožňuje získat hodnotu interní proměnné.


function get Typ():<< datový typ >> {
	return << název proměnné >>;
}

Setter metoda je opakem Getter metody a umožňuje nastavit hodnotu proměnných.


function set Typ(value:<< datový typ >>):Void {
	<< název proměnné >> = value;
}

Nyní si ukážeme vše pohromadě:


class cAuto {
	private var _typ:String;
		
	public function get Typ():String {
		return _typ;
	}
	
	public function set Typ(hodnota:String):Void{
		_typ = hodnota;
	}
}

// Vytvoříme instanci třídy
var auto:cAuto = new cAuto();

// Nastavíme hodnotu
auto.Typ = "Peugeot";

// Zobrazíme obsah proměnné
trace(auto.Typ);

Pozn.: klíčové slovo Void znamená, že funkce nevrací žádnou hodnotu.


Závěr


Pro tento díl to bude vše. V příštím díle budeme pokračovat v povídání v poznávání ActionScriptu 2 a novinkám ve Flashi MX 2004.

Petr Rympler