Autor |
Nachricht |
Popkultur
Threadersteller
Dabei seit: 08.05.2006
Ort: bei Stuttgart
Alter: -
Geschlecht:
|
Verfasst Do 06.11.2008 02:39
Titel AS3: Kommunikation zwischen Instanzen |
|
|
Hallo,
Meine Frage bezieht sich zwar auf Actionscript 3, aber lässt sich auch generell übertragen und als grundlegende Fragestellung ansehen in der OOP, die ich das erste mal exzessiv einsetze.
Ich programmiere eine kleine Simulation einer Wiese, habe also eine Wetter-Instanz, eine Boden-Instanz und mehrere hundert Grashalm-Instanzen. Alle haben gewisse Eigenschaften, die sich auch gegenseitig beeinflussen sollen. Außerdem gibt es eine Kontrollfeld-Instanz, die einige dieser Eigenschaften verändern soll und einige Anzeigen soll.
Hierarchisch gesehen sind die Grashalm-Instanzen alle Brüder, und auch Brüder der Wetter und Boden-Instanz. Eltern-Instanz ist die Simulation.
Nun stosse ich ständig auf die Frage, wie die Bruder-Instanzen untereinander die Daten austauschen sollten. Ich kann nicht innerhalb der Grashalm-Instanz einen Zugriff auf wetter.temperatur oder boden.feuchtigkeit machen. Das ginge theoretisch über parent, ist aber recht dreckig. gekapselt wäre es ohnehin nicht. auch Methoden der Bruder-Instanzen kann ich so ja nicht aufrufen.
Also irgendwo habe ich noch einen ganz grundlegenden Denkfehler was objektorientierte Programmierung angeht. Wer sieht ihn? Wie kann der Grashalm auf die Bodenfeuchte zugreifen, um dann langsamer oder schneller zu wachsen? Wie liest das Kontrollfeld die Eigenschaften aller anderen aus um diese anzuzeigen?
|
|
|
|
|
SURE612
Dabei seit: 02.12.2005
Ort: Bärlin / CB
Alter: -
Geschlecht:
|
Verfasst Do 06.11.2008 03:55
Titel Re: AS3: Kommunikation zwischen Instanzen |
|
|
Kreativist hat geschrieben: | Zugriff auf wetter.temperatur oder boden.feuchtigkeit |
so sollte es eigentlich gehen
hast du die eigenschaften auch auf public gesetzt?
|
|
|
|
|
Anzeige
|
|
|
Popkultur
Threadersteller
Dabei seit: 08.05.2006
Ort: bei Stuttgart
Alter: -
Geschlecht:
|
Verfasst Do 06.11.2008 04:01
Titel
|
|
|
Ja, natürlich, es hat wirklich damit zu tun, dass es sich um "Geschwister"-Instanzen handelt. Instanz Simulation sagt: New boden, New wetter. Instanz boden versucht es mit wetter.temperatur aber scheitert.
Inzwischen bin ich dazu übergegangen, den Methoden von wetter und boden jeweils die Referenz auf die Schwester-Instanz zu übergeben. Also: public function boden.returnFeuchte(w:Wetter); und Aufruf per boden.returnFeuchte(wetter)
|
|
|
|
|
SURE612
Dabei seit: 02.12.2005
Ort: Bärlin / CB
Alter: -
Geschlecht:
|
Verfasst Do 06.11.2008 04:07
Titel
|
|
|
dieses bruder und schwester kenne ich nicht aus der oo-programmierung
zeig doch mal code
|
|
|
|
|
phihochzwei
Moderator
Dabei seit: 08.06.2006
Ort: Mülheim an der Ruhr
Alter: 46
Geschlecht:
|
Verfasst Do 06.11.2008 07:18
Titel
|
|
|
du musst deinem Halm bei seine "geburt" schon sagen, wer wer ist. ist ja bei dir genauso. wenn du im krankenhaus zu welt kommst, weiss du ja auch nicht, wer wer ist.
|
|
|
|
|
bacon
Dabei seit: 24.10.2007
Ort: -
Alter: -
Geschlecht: -
|
|
|
|
|
Popkultur
Threadersteller
Dabei seit: 08.05.2006
Ort: bei Stuttgart
Alter: -
Geschlecht:
|
Verfasst Do 06.11.2008 14:44
Titel
|
|
|
@FlamingArt: Das ist schon klar, jeder Halm hat seinen eigenen Array-Eintrag und ne id. Das ist aber nicht das Problem.
Events helfen hier auch nicht, da ich die Daten bei jedem Tick (Frame) aktualisieren muss. Das Event tritt also quasi immer ein.
|
|
|
|
|
bacon
Dabei seit: 24.10.2007
Ort: -
Alter: -
Geschlecht: -
|
Verfasst Do 06.11.2008 21:07
Titel
|
|
|
Ich glaub du siehst den Wald vor lauter Gräsern nicht. Das mit der Kapselung haste ja schon raus, aber warum nicht einfach entspr. Getter und Setter verwenden?
Base: getBoden()->instance of Boden getWetter()->instance of Wetter getGrashalme() ->collection of Grashalm
U.s.w., fertisch.
Vlt noch eine Anmerkung zum Design: Dass alle Grashalme Geschwister sind, ist kann zwar wortwörtlich richtig sein, aber nicht unbedingt durchsetzbar. Das hieße, dass jeder Grashalm Referenzen auf jeden anderen Grashalm besitzt, was ein wenig unübersichtlich zu pflegen wär (im Falle von addGrashalm() etc). Boden und Wetter sind mitnichten Geschwister von Grashalm. Im Weitesten Sinne ist Boden Elter von Grashalm: Warum also nicht den Boden als Elter von Grashalm nehmen? :
Boden: getGrashalme() -> collection of Grashalm
getGrashalme() ist dann ne Proxymethode für Base:getGrashalme(), implementiert also nix sondern ruft bspw. getBoden()->getGrashalme() auf.
Wetter dümpelt einfach nur so rum und beeinflusst Boden sowie Grashalm. Und hier sind Events vielleicht doch ganz Sinnvoll: Event regen, Event trockenheit, Event Sturm blahblah. Diese Events haben dann Einfluss auf Boden und Grashalme.
|
|
|
|
|
|
|
|
Ähnliche Themen |
instanzen verändern
2 Photoshop Instanzen
[Flash 5]Instanzen scrollen
[Flash] Farbe der Instanzen ändern
Frage bzgl. Instanzen ansprechen
mehrere jquery instanzen (productslide) auf einer seite
|
|