Schreiben Sie gute OO-Code in Adobe Flash

Hier sind einige Tipps, wie Sie guten Code Objektorientierte (OO) in Adobe Flash zu schreiben, vor allem für diejenigen, die noch mit der Version MX darauf warten, bis CS3 gehen.

Organisieren Klassen Ordner

Zunächst macht die Organisation von Klassen die Arbeit wesentlich einfacher Code Wartung. Sie können auch eine echte Bibliothek, die Sie in anderen Projekten wiederverwenden können. Flash verwendet eine Klassifizierung in Bezug auf das Dateisystem und dann die Organisation in Ordnern wird auch auf den Import von Klassen widerspiegeln. Zum Beispiel, wenn wir erstellen die Reihenfolge der Ordner "mylibrary / graphics / plot" und legen unseren eigenen ActionScript-Klasse "PlotClass.as", wenn wir verwenden sollten, um die Klasse zu importieren:

1
grafica . plot . PlotClass ; . mylibrary Importe Grafiken Grundstück PlotClass..;

Wenn die Bibliothek (Ordner) "MyLibrary" ist nicht in Ihrem Film Ordner oder Projekt, mit dem Flash veröffentlichen Einstellungen, um den Pfad auswählen:

Einstellen percoroso Bibliotheken


Kapseln Sie den Code: mit den Eigenschaften

Haste ist immer "schlechter Ratgeber", so sollten Sie mehr Zeit damit verbringen, um die Früchte unserer Bemühungen ernten später. Bei der Entwicklung einer Klasse in ActionScript neigt dazu, "zeigen", um alle unsere eigene, selbst diejenigen, die tatsächlich verwendet werden, nur intern, um die Klasse.

1
2
3
4
class MyClass {
Number = 10 ; var mio_valore: Anzahl = 10;
function MyClass () {}
}

All das ist schlecht, weil es unseren Code Extrema instabil und anfällig für Fehler macht, auch wenn wir die Objekte in Frage verwenden. Die Regel erlaubt dell'incapsulmento statt Kontrolle der Einstellung Eigenschaften einer Klasse extrem rendondola stabiler.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class MyClass {
__mio_valore : Number = 10 ; __mio_valore private var: Anzahl = 10;
function MyClass () {}
get MioValore ( ) : Number { MioValore public function get (): Anzahl {
__mio_valore ) ; return (__mio_valore);
}
set MioValore ( v : Number ) { MioValore public function set (v: Anzahl ) {
/ / Pssst: Mit dem ternären Operator ... ;)
/ / __mio_valore = (V> 5 & & v <20) V:? __mio_valore;
v > 5 && v < 20 ) { if (v> 5 & & v <20) {
__mio_valore = v;
}
}
}

in modo tale che possa assumere solo i valori compresi tra 5 e 20. In diesem Beispiel wird die Eigenschaft MioValore , als man von außen sieht, wird durch die kontrollierte function set , so dass es nur auf Werte zwischen 5 und 20 nehmen. se preferite. Dies bedeutet, dass in unserer Klasse werden wir nur auf __mio_valore oder this.__mio_valore wenn Sie bevorzugen. Allerdings werden wir immer sicher sein, dass die "variable" __mio_valore wird zwischen 5 und 20, es sei denn wir selbst sind, innerhalb der Klasse, ändern Sie den Wert falsch.
, permette di creare proprietà in sola lettura, in sola scrittura o entrambe, il chè non è da poco. Auch die Nutzung der Immobilie oder die function get und set , können Sie read-only Eigenschaft zu erstellen, Schreib-, oder beides, das ist die zweite zu kurz.

Private und Public Use wenn Sie es brauchen

Die Methoden nur intern, um die Klasse verwendet werden, sollten nicht im Freien ausgesetzt werden. Vor allem, weil sie es nicht brauchen! Zweitens, weil in der Tat nicht Bestandteil des Interface-Objekt. Wenn Sie eine Version einer Klasse Release wird implizit bestätigt, dass die Methoden und Eigenschaften, die die Klasse macht (die Schnittstelle) in zukünftigen Versionen des Objekts erhalten bleibt. Offensichtlich das kann sich ändern wird ihre Umsetzung, ovvvero den zugrunde liegenden Code, aber nicht den Namen oder die Parameter unserer Methode oder Eigenschaft. Mit den Methoden private , jedoch werden diese nur sichtbar, aus dem Inneren des Objekts. Wir könnten sie nutzen und, wenn nötig, ändern Sie die ganze, ohne gegen die Grundregel der objektorientierten Programmierung.

Erben

Die Vererbung (Vererbung), die die Eigenschaft eines Objekts voneinander abstammen und dann "erben" alle Eigenschaften des Objekts "Mutter", ist ein einzigartiges Werkzeug der objektorientierten Programmierung. Die Konstruktion von Hierarchien, erfordert jedoch viel Erfahrung, um nicht unnötigen Code Teilmengen, die einen riesigen Elefanten bald unüberschaubar zu machen. Oft sind die Klassen sind Motherboard (IUnknown) nach einer langen Analyse erstellt oder nachdem Sie festgestellt, dass einige "Redundanz" beim Erstellen Klassen.
Aber die Tatsache bleibt, dass es mit Vorsicht verwenden, können in wenigen Sekunden zu verlängern, werden alle Objekte einer Klasse filgi. ActionScript verwendet das Schlüsselwort extends , die Vererbung zwischen einer Klasse und einem anderen zu schaffen.

1
2
3
4
5
6
7
8
9
10
11
12
/ / File ClasseMadre.as
{Class ClasseMadre
ClasseMadre function () {}
Addiziona ( a : Number , b : Numer ) : Number { Fügt public function (a: Anzahl , b: Number): Anzahl {
a + b ) ; return (a + b);
}
}
/ / File Figlio.as
ClasseMadre Einfuhren;
ClasseMadre { {Class Son erstreckt ClasseMadre
Son function () {}
}

, ereditato appunto dalla classe madre ClasseMadre . In diesem Beispiel wird die Klasse Figlio der Methode automatisch Addiziona() , in der Tat von der übergeordneten Klasse geerbt ClasseMadre . Besonders nützlich ist die Möglichkeit, immer auf die übergeordnete Klasse mit dem Schlüsselwort beziehen super , so dass die überschreiben geerbte Methoden und Eigenschaften zu ermöglichen.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/ / File ClasseMadre.as
{Class ClasseMadre
ClasseMadre function () {}
Addiziona ( a : Number , b : Numer ) : Number { Fügt public function (a: Anzahl , b: Number): Anzahl {
a + b ) ; return (a + b);
}
}
/ / File Figlio.as
ClasseMadre Einfuhren;
ClasseMadre { {Class Son erstreckt ClasseMadre
Son function () {}
Addiziona ( a : Number , b : Numer , c : Number ) : Number { Fügt public function (a: Anzahl , b:, c: Anzahl ): Anzahl {
super . Addiziona ( a , b ) + c ) ; return (super. Adds (a, b) + c);
}
}

Dies ist meiner Meinung nach einer der vielen Schönheiten des Objekts Entwicklung!

Lösungen

Wenn die Klasse schreiben wir einen MovieClip verknüpft ist, effektiv macht sie eine Verlängerung erfordert, dass alle ActionScript-Objekt (MovieClip oder TextField) in der MovieClip Vater enthielt, am Anfang der Klasse verwiesen wird. Zum Beispiel, wenn wir einen MovieClip erweitern Sie enthält einen zweiten MovieClip secondo_mc nach Namen, wenn wir erklären, die Klasse muss einen Verweis auf diese MovieClip auf diese einfache Weise sind identifiziert:

1
2
3
4
5
6
7
8
9
MovieClip { class MyClass erstreckt MovieClip {
secondo_mc : MovieClip ; private var secondo_mc: MovieClip ;
function MyClass () {}
/ /
Refresh ( ) { public function refresh () {
/ / ActionScript scheitern würden, wenn wir nicht diese Variable / Zeiger auf den Anfang erklärt
secondo_mc . _x = 10 ; Diese secondo_mc _x = 10..;
}
}

Wenn die Objekte zu manipulieren bekannt ist gibt es kein Problem. Allerdings können Sie einen MovieClip Laufzeit zu erstellen und ist daher nicht zu erwarten, keine Zeile der ursprünglichen Erklärung haben. Zum Beispiel wird dieser Code nicht funktioniert:

1
2
3
4
5
6
7
8
9
MovieClip { class MyClass erstreckt MovieClip {
function MyClass () {}
/ /
CreaMovie ( ) { CreaMovie public function () {
, 100 ) ; createEmptyMovieClip ("secondo_mc", 100);
/ / ActionScript kennt nicht dieses Objekt
secondo_mc . _x = 10 ; Diese secondo_mc _x = 10..;
}
}

Dies ist ein sehr häufiger Fall, stellen Sie den folgenden Code:

1
2
3
4
5
6
7
8
9
MovieClip { class MyClass erstreckt MovieClip {
function MyClass () {}
/ /
CreaMovie ( ) { CreaMovie public function () {
var i = 0 ; i < 50 ; i ++ ) { for (var i = 0; i <50; i + +) {
+ i , i ) ; createEmptyMovieClip ("item" + i, i);
}
}
}

In diesem Fall, wie in anderen, ist es möglich, ein Objekt als Index eines Arrays, dh Zugang:

1
2
3
4
5
6
7
8
9
10
MovieClip { class MyClass erstreckt MovieClip {
function MyClass () {}
/ /
CreaMovie ( ) { CreaMovie public function () {
var i = 0 ; i < 50 ; i ++ ) { for (var i = 0; i <50; i + +) {
+ i , i ) ; createEmptyMovieClip ("item" + i, i);
"item" + i ] . _x = 10 ; diese ["item" + i] _x = 10.;
}
}
}

Dies ist eine Technik sehr nützlich in vielen Situationen.

Versioning

Eine letzte nützliche Sache Ich schlage vor, ist die Versionierung, das sicher auch eine Aufzeichnung der Änderungen zu halten. Wenn Sie mit einer Reihe von diesen Klassen zu tun neigen dazu, im Laufe der Zeit weiterentwickeln. Gute Faustregel ist daher, ein Programm zu machen (SCCS [Source Code Control System], CVS, Subversion für MacOS / Linux / Unix oder FileHamster unter Windows) pflegen können Versionierung von Dateien der verschiedenen Versionen, die wir stellen.
Neben der Arbeit an den Code zu kommentieren und die Versionen / Revisionen der Vorstand eine Variable innerhalb der Klasse (Style JavaScript), um zu "sprechen" die gleiche Objekt-Code:

1
2
3
4
class MyClass {
__release : String = "1.0" ; __release private var: String = "1,0";
function MyClass () {}
}

Einschlüsse und konstante

Sie können Code direkt in das Klassenzimmer gehören. Profit auf der organisatorischen Ebene, Typ:

1
2
3
MovieClip { class MyClass erstreckt MovieClip {
# Include "ClassVersion.as"
}

Wenn Sie den Mangel #define (! wirklich eine Schande, dass sie nicht unterstützt) von C, hier ist eine Lösung ziemlich decororsa:

1
2
3
4
5
6
7
8
ERROR_1 : String = "Errore tipo 1" ; public static var ERROR_1: String = "Fehler beim Typ-1";
/ / Oder - Code, der von Adobe
/ / Werte für Befehl-Typen für _cmdQueue
Number = 0 ; static var PLAY: Anzahl = 0;
Number = 1 ; static var LOAD: Anzahl = 1;
Number = 2 ; static var PAUSE: Anzahl = 2;
Number = 3 ; static var STOP: Anzahl = 3;
Number = 4 ; static var SEEK: Anzahl = 4;

One Response to "Write gute OO-Code in Adobe Flash"

  1. 3. September 2008 Actionscript 3.0 für Anfänger: Lektion # 2 | Undolog.com :

    [...] Öffentliche Eigenschaften, über die Kapselung der OO-Programmierung (siehe schreiben gute OO-Code in Adobe Flash). __player __stop und bezeichnen die aktiven Spieler und den Zustand der [...]

Hinterlasse einen Kommentar

XHTML TAG PERMIT: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> INSERTION CODE:
 <pre></pre> // blocco generico <code></code> // blocco generico [cc_actionscript][/cc_actionscript] // Actionscript [cc_actionscript3][/cc_actionscript3] // Actionscript 3 [cc_css][/cc_css] // CSS Style Sheet [cc_html][/cc_html] // HTML [cc_js][/cc_js] // Javascript [cc_objc][/cc_objc] // Objective-C [cc_php][/cc_objc] // PHP [cc_sql][/cc_sql] // SQL