Neu in ActionScript 3: Sealed Classes

Hier nun der zweite Teil der “Neu in ActionScript 3″-Reihe… diesmal geht es um versiegelte Klassen (Sealed Classes).

Während es in ActionScript 2 noch möglich war für Objekte zur Laufzeit neue Methoden und Eigenschaften zu deklarieren geht dies in ActionScript 3 nun nicht mehr. Was bedeutet das? Ganz einfach:

ActionScript 2!

class User
{
    var username;
}
var user : User = new User();
user.email = "dynamic@class.com";

Der oben stehende Code wäre in AS2 problemlos ausführbar, d.h. obwohl die Klasse MyClass gar keine Eigenschaft myNewVar besitzt können wir sie dynamisch erzeugen und mit einem Wert versehen. Meinem Verständnis von Objektorientierung hat das immer irgendwie wiedersprochen, da ein Objekt nicht mehr eine genaue Instanz der Klasse ist sondern nur deren Member besitzt sonst aber auch alles andere beinhalten kann (ohne div. Vererbungsstrukturen). Das bedeutet auch das zwei Objekte derselben Klasse nicht zwangsläufig die selbe Struktur beinhalten und das kann in größeren Anwendung schnell für Chaos sorgen.

Der ein oder andere wird dieses Konzept auch von Javascript kennen. In Actionscript 3 ist es nun aber so das ein solches Konstrukt direkt zu einem Compiler-Fehler führen würde, wie wir es z.B. auch in Java oder auch PHP erwarten würden.

Das Schlüsselwort dynamic
Wer trotzdem mit dynamischen Klassen arbeiten möchte, bzw. diese Funktionalität bei der Migration alter Projekte dringend benötigt kann mittels dem Schlüsselwort dynamic genau das erreichen:

ActionScript 3

dynamic class User
{
    var username:String;
}
var user : User = new User();
user.email = "dynamic@class.com";

Wenn möglich sollte auf den Einsatz komplett verzichtet werden, gerade bei umfangreichen Projekten. Falls es aber trotzdem mal nötig sein sollte empfiehlt es sich auch die Klasse als final zu deklarieren damit durch eine Vererbung nicht noch mehr “Unordnung” entsteht.

Für mich war diese Änderung sehr wichtig und vor allem auch notwendig… was vielleicht auch daran liegt das ich sowieso kein Freund von dynamischen Klassen bin.
Der nächste Beitrag zu diesem Thema wird wahrscheinlich die neuen und verbesserten Namespaces behandeln, wo auch kurz nochmal auf ein AS2 Problem im Bezug auf dynamische Klassen zum tragen kommt. Bis dann…

Andere Beiträge der Reihe:


Danke für das Lesen dieses Eintrags. Du kannst nun einen Kommentar abgeben (0) oder einen Trackback hinterlassen.



Kommentar hinterlassen