Das Objekt.
personA = new Object();
Da ist es, personA ist ein Objekt! Lassen Sie uns nochmal auffrischen, was man mit einem Objekt tun kann. - Sie können zum Beispiel Eigenschaften (Properties) hinzufügen, wie zum Beispiel:
|
personA.name
= "Anna"; Das heisst: - personA hat einen Namen, er ist "Anna" Simple genug. Hier ein weiterer Weg, wie man das ganze schreiben könnte: personA = { name:"Anna", alter:31 } Die geschwungenen Klammern { und } sind ein schneller und einfacher Weg, wie man ein Objekt definieren kann. Hier ist ein weiteres Objekt: personB = new Object(); personB.name
= "Bob"; Und auch hier bedeutet dies dasselbe wie: personB = { name:"Bob", alter:25, hobby:"trinken" } |
Actionscript
ignoriert in der Regel die Leerzeichen. Das heisst man könnte personA
auch genausogut so definieren: personA =
o = { x:x, y:y, z:{a:a, b:b} } Bitte beachten Sie die geschwungenen Klammern, Kommas, Doppelpunkte und der fehlende Strichpunkt am Schluss. |
![]() |
So, das war einfach, nun haben wir also zwei Objekte: personA und personB. Beide haben zwei Eigenschaften, "name" und "alter". personB hat zudem noch eine weitere Eigenschaft "hobby". Lesen Sie dieses Beispiel nocheinmal durch, falls Ihnen noch irgendetwas unklar ist, da der nächste Satz ein sehr wichtiger sein wird!
Irgendwo gibt es noch ein drittes Objekt, eines welches auch zwei Eigenschaften hat, nämlich personA und personB. Dies gibt uns den ersten Hinweis auf OOP bei der Arbeit. Alles ist innerhalb eines Objekts!
Wenn Sie nun mit den Augen rollen, warten Sie! - Wir haben noch eine alternative Metapher. Stellen Sie sich vor, jemand zieht um. Hierfür gibt es zwei Ansätze. Einer ist, ein Auto rückwärts zum Eingang des Gebäudes zu parken, vorzugsweise eines mit Sonnendach, um anschliessend alle Schränke, Regale usw. leerzuräumen und ins Fahrzeug einzuräumen. Noch Platz für den Fahrer machen, und los gehts! - Das ist der einfachste und schnellste Weg umzuziehen, und es funktioniert besser als man denkt. Wie auch immer, der "normale" Weg umzuziehen ist, alles in Kartons einzupacken und die Kartons entsprechend ihrem Inhalt zu Beschriften (wenn vielleicht auch ein wenig kryptisch). Dies resultiert in tausende von Entscheidungen pro Stunde. - Übrigens ein sehr guter Test für eine Ehe, wenn Sie jemals danach suchen.
Bob und Anna ziehen um. Lassen Sie uns ihnen beim Einpacken helfen. Objekte sind wie Kartons, glücklicherweise werden Sie jedoch nicht unseren Rücken zum Schmerzen bringen. Es ist ein relativ wenig bekanntes Faktum, aber im Vergleich ziehen Amerikaner am allerhäufigsten um (OK, ausgenommen tibetanische Nomaden vielleicht.). Drei von fünf Amerikanern ziehen alle fünf Jahre um. Das resultiert in Millionen und Abermillionen Umzügen. Weitere Forschungen haben herausgestellt, dass bei jedem dieser Umzüge ein Karton mit der Beschriftung "Wichtige Dinge" existiert. Nachdem soviele Amerikaner dermassen Wert auf ihre "wichtigen Gegenstände" legen, lassen Sie uns mit diesem Karton beginnen:
wichtigeDinge = new
Object( );
wichtigeDinge.geld = 500;
wichtigeDinge.papiere = 96;
wichtigeDinge.annaPass = "er246vjl";
wichtigeDinge.bobPass = "kl554mkt";
Können Sie es sehen? Wir haben einige Dinge in den Karton getan. - Soweit,
so gut. Naja, vielleicht. Was passiert, wenn wir etwas in den Karton legen,
dass sich bereits selbst in einem Karton (Verpackung) befindet? - Zum Beispiel
ein Schmuckkästchen.
wichtigeDinge.schmuckKaestchen = 1;
| Das sieht richtig aus, aber Anna sucht ihre Halskette, ob sie sie wohl finden mag? - Wir haben eine Liste des Inhalts jeder Box, aber ihre Halskette ist nicht auf der Liste. Was wir wirklich machen sollten ist eine Liste der Dinge, die sich im Schmuckkästchen befindet, zB: | ![]() |
wichtigeDinge.schmuckKaestchen
= new Object( );
wichtigeDinge.schmuckKaestchen.halskette1 = "Perlen"; // fake
wichtigeDinge.schmuckKaestchen.halskette2 = "Diamant"; // fake
![]() |
Nun hat auch das Schmuckkästchen eine Liste ihres Inhaltes (natürlich behalten wir die Kommentare hierzu für uns). Es ist allerdings keine perfekte Lösung für Anna, weil die Liste des Schmuckkästchens im Kästchen selbst ist, also in einer verschlossenen Box. Sie muss immer noch die Box öffnen um ihre Halskette finden zu können. Glücklicherweise ist das genau die Art wie sich Objekte in Actionscript verhalten, also lassen wir die Kartons wie sie sind. Hoffentlich stört das Anna nicht. Und so schnell geht es, wir haben soeben ein Objekt in ein anderes Objekt gelegt. - Eine Box in eine andere! Nun ist es nicht mehr schwer einzusehen, dass es auch einen anderen Lösungsweg gibt. Angenommen sie benutzen zwei Fahrzeuge zum Umziehen, ein Auto und einen Lastwagen. Manche Kartons passen in das eine, manche in das andere Fahrzeug. Die "wichtigen Dinge" landen im Auto, wo der Schmuck gefunden werden kann unter auto.wichtigeDinge.schmuckKaestchen.halskette1. Das ist ziemlich dasselbe was passierte als wir personA und personB erstellt haben. - Wir erstellten sie an einem bestimmten Ort, und der ist immer innerhalb eines Objektes, wenn wir Dinge in Actionscript erstellen. In Anna's und Bob's Welt ist einfach die Welt, das Universum, etc. als ultimativer Super-Karton anzusehen. In Actionscript existiert er auch, das Objekt. |
So, Objekte innerhalb anderer Objekte scheint einfach zu sein, aber um das ganze wirklich zu verstehen müssen wir noch ein ganzes Stück tiefer graben. Mit diesem tieferen Verstehen ist jede Menge Power verbunden!
![]() |
Das Objekt - Teil 2
Lassen Sie uns alles noch einmal in Erinnerung rufen und versuchen wir nun ein Objekt in personA anzulegen:
personA.favoriten = new Object( );
Checken Sie Ihren Puls - wenn er wieder ruhiger wird, lesen Sie weiter. Wir haben soeben eine neue Eigenschaft zu personA hinzugefügt, und diesmal ist es wiederrum ein Objekt namens "favoriten" und nicht nur Text. Wir können den Favoriten auch Eigenschaften zuweisen, zum Beispiel:
personA.favoriten.site1
= "flashmxpro.com";
personA.favoriten.site2 = "web-games.at";
Das wiederrum
ist dasselbe wie:
personA.favoriten
= { site1:"flashmxpro.com", site2:"web-games.at" }
So können wir nun sagen:
personA
hat eine Eigenschaft namens "favoriten", diese Eigenschaft hat wiederrum
eine Eigenschaft site1 mit dem Wert "flashmxpro.com"
personA hat eine Eigenschaft namens "favoriten", diese Eigenschaft
hat wiederrum eine Eigenschaft site2 mit dem Wert "web-games.at"
Es mag konfus aussehen, aber es ist immer gut wieder zu Flash selbst zurückzukommen. Es war immer eines der konkretesten Beispiele für den Sinn von objektorientierten Strukturen. Wenn Sie einen Movieclip auf der Szene mit dem Instanznamen "personA" versehen, dann hat _root eine Eigenschaft namens personA. Wenn Sie innerhalb von personA wiederrum einen Movieclip mit dem Namen "favoriten" platzieren, können Sie sagen:
personA
hat eine Eigenschaft namens _x mit dem Wert 5.
personA hat einen Movieclip namens "favoriten", er hat eine Eigenschaft
namens _x mit dem Wert 100.
![]() |
Offensichtlich kann man sich Movieclips als Objekte vorstellen, und Dinge wie _x und _width als Eigenschaften (was sie in Wirklichkeit ja auch sind!) |
So, nun verstehen Sie wie man ein Objekt in ein anderes Objekt platziert. Sie wissen alles was es zu wissen gibt über Objektorientierte Programmierung. Ha ha, kleiner Scherz, aber nicht so sehr wie Sie denken. Was so wichtig zu verstehen ist, was ein Objekt innerhalb eines anderen Objektes impliziert. Sie haben wahrscheinlich all dies schon gewusst, aber es ist immer gut zusammenzufassen!
LEBENSDAUER VON OBJEKTEN
![]() |
Als erstes kann man festhalten, dass alle Objekte innerhalb (Childs) abhängig von jenem ausserlab (Parent) sind. Das wird Mutter/Kind (Parent/Child) Abhängigkeit genannt, allerdings wäre es vermutlich angebrachter in diesem Zusammenhang von Mutter/Baby-im-Bauch Abhängigkeit zu sprechen. Wenn die schwangere Mutter von einem Bus angefahren wird, trifft es auch das Kind. Wenn man das Parent-Objekt löscht, stirbt das Child-Objekt mit. Natürlich ist das Umgekehrte nicht wahr, wenn das Kind-Objekt gelöscht wird, ist die Mutter trotzdem noch da. - Nur das Baby ist weg. Anzumerken sei hier noch, dass jedes Child-Objekt lediglich ein Parent-Objekt haben kann, was für ein wenig Verwirrung sorgen kann. Babies haben immer nur eine Mutter, Objekte nur ein Parent. |
SICHTBARKEIT (SCOPE)
|
Eine zweite Konsequenz von verschachtelten Objekten ist deren "Sichtbarkeit". Sichtbarkeit bedeutet soviel wie "Kontext" im Sinne von "was kann man sehen bzw. was ist sichtbar von einem anderen Punkt aus". Um die Baby Metapher wiederzuverwenden, das Baby kann innerhalb der Mutter sehen, aber es kann nicht sehen was seine Mutter sieht. In ActionScript wird die Sichtbarkeit automatisch geregelt, der erste Platz an dem ActionScript nach einer Eigenschaft suchen wird ist im Objekt selbst. Die wichtige Eigenschaft von Kartons an der wir interessiert sind ist das Verhalten eines "Containers". Container können mit allerlei Dingen befüllt werden, andere Container inkludiert. Innerhalb eines Containers können Sie alle Dinge sehen, die sich in genau diesem befinden, jedoch nicht ausserhalb befindliche Dinge. Und obwohl Sie andere Container innerhalb Ihres Blickfeldes sehen können, sehen Sie nicht den Inhalt dieser. Phuw, das wäre jetzt ein sehr guter Punkt für ein Beispiel, es ist überhaupt nicht kompliziert. Lassen Sie uns also noch ein weiteres personA-Objekt erstellen: |
![]() |
personA=
{
name : "Anna",
favoriten :
{
site1 : "flashmxpro.com",
test1 : function(){ trace (this.site1) }, test2 : function(){ trace (this.name
) } }, test3: function(){ trace (this.name ) }, test4: function(){ trace (this.site1)
}
};
personA.favoriten.test1(); // flash.compersonA.favs.test2(); // null (child
can't see parent)personA.test3(); // AnnpersonA.test4(); // null (parent can't
see child)
In diesem Beispiel bedeutet das "this" Stichwort den "Container der diese Funktion aufgerufen hat", welcher derselbe Container ist in den Sie versuchen hineinzusehen. Es ist zum jetzigen Zeitpunkt noch nicht notwendig zu verstehen, wie das ganze funktioniert, aber es ist wichtig zu verstehen was die Eigenschaft "test" zurückliefert:
test1:
Die Eigenschaft namens "site1" innerhalb dieses Containers (personA.favoriten)
die den Wert "flashmxpro.com" hat.
test2: Die Eigenschaft namens "name" innerhalb dieses Containers (personA.favoriten). Es gibt sie nicht in personA.favoriten
test3: Die Eigenschaft namens "name" innerhalb dieses Containers (personA) welche den Wert "Anna" hat.
test4:
Die Eigenschaft namens "site1" innerhalb dieses Containers (personA).
Es gibt sie nicht in personA
in this container (personA).
Was passiert, wenn wir test 4 ändern:
test4:
function(){return this.favoriten.site1;} // Beachten Sie '.favoriten.'
Nunja, glücklicherweise funktioniert es. Was gibt es zurück?
test4:
Die Eigenschaft namens "site1" innerhalb des Containers "favoriten"
welcher sich innerhalb dieses Containers befindet.
// ? Versuchen Sie den Wert herauszufinden mit dem neuen test 4 code
NAMESPACE
![]() |
Dieses Thema wurde im letzten Beispiel ziemlich weitläufig behandelt, aber es ist Wert speziell untersucht zu werden, weil es eine grossartige Möglichkeit darstellt, Ihr Programm zu organisieren. In Wirklichkeit ist es dasselbe Prinzip wie Menschen in der wirklichen Welt auf natürliche Weise Dinge organisieren. Denken Sie an Ihre Adresse. Es ist höchstwahrscheinlich etwas wie Name, Hausnummer, Strasse, Stadt, Land. Das Postsystem basiert darauf um Sie zu finden. Programme waren häufig als Bündel von Namen geschrieben, als sie allerdings grösser und grösser wuchsen (vergleichbar mit der Grösse einer kleinen Stadt) wurde das System unpraktisch. Ein besseres System wurde notwendig, um die Komplexität zu organisieren. Eine der Hauptvorteile des Objekt-Orientierten Programmierens ist, dass es Komplexität organisiert. Alles hat eine "Adresse". Ausgehend von dieser Adresse können Sie bestimmte Dinge sehen. |
In der OOP ist es nicht notwendig, globale Variablen (Eigenschaften die von überall aus sichtbar sind) zu benutzen, und das aus gutem Grund. - Sie benutzen jetzt objekt-orientierte Techniken weil Sie die Dinge organisieren wollen. Das Postsystem würde nicht korrekt funktionsfähig sein, wenn eine Person nur ihren Namen als Adresse benutzt, und sehr ähnlich ist es auch mit Programmen.
Der Schlüssel der Objekt-orientierung: Es ist sehr wichtig darüber nachzudenken, wo Sie Dinge innerhalb eines Programms anordnen. Wie eine bestimmte Aufgabe im Detail gelöst wird ist meist viel unwesentlicher als der Ort, an dem sie gelöst wird. Vergleichen Sie die Wichtigkeit von Ort und Technik für ein Pärchen das Sex in einem Fastfood Restaurant hat. So ungefähr verhält es sich ...
![]() |
Wahrscheinlich ist allen von Ihnen das sehr geläufig: Ansprechen von Movieclips funktioniert genau nach diesem Schema: Nehmen Sie den Movieclip und benennen Sie ihn personA, legen Sie einen weiteren Movieclip hinein namens "favoriten". Nun können Sie auf der Zeitleiste von personA this._x aufrufen, und es wird personA's _x Koordinate liefern. Wenn Sie hingegen sagen "this.favoriten._x" entspricht dies personA.favoriten's _x Koordinate. Wenn Sie eine Eigenschaft this.name = "Bob" erstellen, wird der Wert nicht innerhalb des favoriten-Movieclips ansprechbar sein (ohne _parent zu verwenden). Der Grund ist einfach: Movieclips verhalten sich wie Objekte. |
Hat-Relationen (Has-a-relation):
OK, das war leicht genug. Sie können Objekte erstellen, Objekte haben Eigenschaften (welche oft als Members, Properties oder Attribute bezeichnet werden), und diese Eigenschaften haben jeweils einen Namen und einen Wert. Wie wir feststellen konnten, können Eigenschaften auch wiederrum Objekte sein, welche wiederrum Eigenschaften haben können, usw. Diese Art von Relation nennt man Hat-Relation. Wahrscheinlich werden Sie in der objekt-orientierten Terminology viele lange Worte wie z.B. "Polymorphismus" und "Kapselung" kennenlernen, daneben gibt es auch viele kurze Worte wie zB. "hat-ein" oder, "ist ein" oder "this" ... Glücklicherweise sind diese Konzepte jedoch einfacher zu verstehen als sie klingen.
Eine hat-Relation ist gegeben, wenn ein Objekt ein anderes Objekt enthält. Zum Beispiel hat ein Auto einen Tank. Es hat ein Lenkrad. Es hat einen Motor. Soweit so gut, es kann jedoch auch trickreich werden, zB. ein Auto ist ein Fahrzeug, ein Auto ist eine Maschine, etc. Diese beiden Konzepte spielen eine zentrale Rolle in der Objekt-orientierung.