Zurück   Flashforum > Flash > ActionScript > ActionScript 3

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 14-01-2012, 22:29   #1 (permalink)
Neuer User
 
Registriert seit: Jan 2012
Beiträge: 15
Objektorientierung Basics - Zugriff auf andere Objekteigenschaften

Liebe Flasher,

aktuell macht mir die objektorientierte Denkweise einige Probleme. Folgende Frage habe ich mir dabei immer wieder gestellt:
Wie kann ich auf Eigenschaften/Methoden eines Objektes aus einem anderen Objekt aus zugreifen?
Die verschiedenen SichtbarkeitsZustände sind mir mittlerweile klar, das eigentliche zugreifen bereitet mir dabei jedoch noch Probleme.
Ich hab in der Klasse user beispielsweise eine public var isActivated welche entweder 0 oder 1 sein kann. In einer anderen Klasse wird eine public function checkIfUserIsActivated zur Verfügung gestellt, die überprüft ob ein Benutzer freigeschalten wurde. Wie kann nun in dieser Funktion auf öffentliche Eigenschaften eines anderen Objektes zugegriffen werden?
Ich könnte es auch als Parameter an die Funktion übergeben, aber mir geht es um die öffentliche Funktionen und Variablen eines Objektes und wie darauf zugegriffen werden kann.

Eventuell ist das obige Beispiel nicht das Beste, aber ich hoffe ihr versteht, was ich meine.
Falls mein aktuelles Denkmuster in Bezug auf öffentliche Variablen und Funktionen völlig falsch ist, dürft ihr dies natürlich auch direkt rauspfeffern - vielen lieben Dank.

Geändert von Lilos (14-01-2012 um 22:30 Uhr)
Lilos ist offline   Mit Zitat antworten
Alt 15-01-2012, 00:12   #2 (permalink)
Neuer User
 
Registriert seit: Jan 2005
Beiträge: 20
Kurz gesagt: Die Objekte müssen in irgendeiner Art von Beziehung zueinander stehen.

Die Beziehungen zwischen Objekten sind aber von den Beziehungen zwischen Klassen zu unterscheiden. Klassen sind die Baupläne/Blaupausen/DNA, Objekte (auch Instanzen genannt) die konkrete Ausführung des Bauplans, d.h. das tatsächliche Haus/Auto/Lebewesen. Wie viel hast du denn schon in etwa von dem Thema gehört? Das Thema ist ja doch recht umfangreich.
Wikipedia-Artikel, die dir vielleicht weiterhelfen könnten:
kurze Einführung in die Objektorientierung und eine allgemeine Herangehensweise, um Beziehungen zwischen Klassen zu veranschaulichen: Klassendiagramm
Don Jonny ist offline   Mit Zitat antworten
Alt 15-01-2012, 10:07   #3 (permalink)
+ Zimt & Zucker
 
Registriert seit: Mar 2006
Ort: hinterm Mond gleich links
Beiträge: 2.040
Um mit einem Objekt zu interagieren benötigst du eine Referenz zu/auf dieses Objekt.

Das hat eigentlich gar nichts mit Objektorientierung zu tun, denn verallgemeinert lässt sich sagen: ohne eine Variable zu kennen, kann ich sie nicht direkt ändern.

PHP-Code:
var a:int 0;
a++; //ich muss "a" kennen, um es zu ändern - logisch 
Der Unterschied zu einem Objekt ist einfach nur der, das es eben ein ganzer Haufen von Variablen in einer ist. Deshalb musst du über die Punktsyntax auf die gewünschte Eigenschaft zugreifen.

PHP-Code:
deinUserObjekt.isActivated 
Um an diese Referenz zu kommen, gibt es viele Wege.
Geht es um eine Nutzerverwaltung, würden vermutlich viele User Objekte (Klassennamen bitte immer groß schreiben!) in einem Array liegen.
Andernfalls könnte einer Funktion das gesamte User Objekt übergeben werden oder wie du schon vorgeschlagen hast, nur der Wert der Eigenschaft.

Für eine solche "ja oder nein" Eigneschaft, solltest du den typ Boolean verwenden.
__________________
anbei Grüße vom milchreis: Viva la [Silb]
"Selbst wenn uns nur noch der Zynismus treibt, wir werden trotzdem einfach immer weiter gehen!"

[Von null auf Flash in einem Klick.] <<< klick
milchreis ist offline   Mit Zitat antworten
Alt 15-01-2012, 10:31   #4 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 6.162
Zur Ergänzung hier noch ein paar ausführlichere Erläuterungen, mit denen ich in anderen Threads versucht habe, den Unterschied und die Aufgaben von Klassen und Instanzen zu illustrieren:
__________________
Viele Grüße // Martin

Martin Kraft // Interaktionsdesign

Hilfreiche Websites:
// Hilfe zur Adobe Flash Plattform
// ActionScript 2 Referenz
// ActionScript 3 Referenz
// ActionScript 3 Arbeitshandbuch
// weitere Flash Ressourcen

Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da!
Martin Kraft ist offline   Mit Zitat antworten
Alt 16-01-2012, 08:53   #5 (permalink)
Neuer User
 
Registriert seit: Jan 2012
Beiträge: 15
Vielen Dank für eure Antworten. Da werde ich mich mal die Tage durchforsten
Was mir gerade noch über den Weg gelaufen ist:
Wenn ich ein KlickEvent eines Objektes in einem anderen Objekt weiterverarbeiten möchte, muss ich dann ein komplettes Objekt an meine andere Funktion übergeben, um dort einen EventListener dranzuhängen?
Ich hab' also ein Objekt mit einer Funktion, welche auf den Klick auf ein andere Objekt hören soll.
Das ist gerade sehr theoretisch aber ihr habt bestimmt ganz viele tolle Ideen, wie man dies lösen könnte - vielen Dank.
Lilos ist offline   Mit Zitat antworten
Alt 16-01-2012, 09:19   #6 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 6.162
Zitat:
Zitat von Lilos Beitrag anzeigen
Wenn ich ein KlickEvent eines Objektes in einem anderen Objekt weiterverarbeiten möchte, muss ich dann ein komplettes Objekt an meine andere Funktion übergeben, um dort einen EventListener dranzuhängen?
Wenn Du in einer Instanz einen Event.CLICK-Listener auf eine andere Instanz registieren willst, brauchst Du dort natürlich auch eine Referenz auf eben diese Instanz (anders funktioniert's nicht).

Welcher »anderen Funktion« Du dabei warum welches Objekt übergeben willst, versteh ich nicht Poste mal ein Code-Beispiel!

Grundsätzlich ist es einer Funktion aber vollkommen egal, ob Du ihr eine »komplettes Objekt« oder nur eine String-Variable übergibst. Es wird nämlich eh »nur« eine Referenz übergeben und nicht das Objekt kopiert...
__________________
Viele Grüße // Martin

Martin Kraft // Interaktionsdesign

Hilfreiche Websites:
// Hilfe zur Adobe Flash Plattform
// ActionScript 2 Referenz
// ActionScript 3 Referenz
// ActionScript 3 Arbeitshandbuch
// weitere Flash Ressourcen

Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da!
Martin Kraft ist offline   Mit Zitat antworten
Alt 16-01-2012, 09:27   #7 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
Zitat:
Zitat von Lilos Beitrag anzeigen
.. muss ich dann ein komplettes Objekt an meine andere Funktion übergeben ..
sowas sollte man möglichst vermeiden. es besteht die gefahr, dass zwischenzeitlich das original gelöscht wird. diese referenz jedoch verhindert, dass das gelöschte objekt auch aus dem speicher entfernt werden kann.

am beispiel button:
a) der button selbst hat funktionen wie rollover, rollout. dafür hat er selbst listener und programme die diese funktionen ausführen.
b) im menü z.b. entscheidet sich, welcher der vielen buttons angeklickt ist. also gibt es hier einen listener und eine funktion dafür. das menü kennt den button.
c) irgendwo soll jemand etwas ausführen, auf grund eines buttonsklicks. dieses jemand kennt aber weder den button noch das menü. jetzt gibts mehrere möglichkeiten:
c.1) der button oder das menü versendet ein event, das kann man so einrichten, das dein jemand das auch empfängt.
c.2) oder z.b. eine info wird in das model geschrieben. wenn es dann an's updaten geht, dann gelangt diese info in's view.
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (16-01-2012 um 09:30 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 16-01-2012, 18:46   #8 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.139
Zitat:
Zitat von Lilos Beitrag anzeigen
Vielen Dank für eure Antworten. Da werde ich mich mal die Tage durchforsten
Was mir gerade noch über den Weg gelaufen ist:
Wenn ich ein KlickEvent eines Objektes in einem anderen Objekt weiterverarbeiten möchte, muss ich dann ein komplettes Objekt an meine andere Funktion übergeben, um dort einen EventListener dranzuhängen?
Ich hab' also ein Objekt mit einer Funktion, welche auf den Klick auf ein andere Objekt hören soll.
Das ist gerade sehr theoretisch aber ihr habt bestimmt ganz viele tolle Ideen, wie man dies lösen könnte - vielen Dank.
Die Problematik ist folgende: deine Anwendung besitzt einen Zustand, den du modifizieren möchtest.
Beispiel: es gibt eine Klasse Person, die eine Eigenscft name hat. Die Instanz wird irgendwo erzeugt und eine View bekommt eine Referenz auf diese und zeigt beispielsweise durch ein TextInput Feld den Namen an.

Nun schreibst du etwas in das TextFeld, um die Eigenschaft neu zu setzen. Da du in der View nicht die Eigenschaft neu setzen möchtest, da es bei größeren Projekten so zu Problemen in der Übersichtlichkeit kommen kann (und noch ganz anderen: siehe Separation of concerns), sollte das ein Controller übernehmen. Der View muss also also dem Controller alle nötigen Informationen mitgeben, die er braucht für die Modifikation. Das wird, sofern der Controller die Person nicht kennt, nicht nur der neue Name sein, sondern auch eine Referenz auf die Person, um den neuen Namen zu setzen.

Diese Informationen gibst du am besten in einem Custom-Event mit (das von Event erbt). So bekommt der Controller alle Informationen die er braucht und die View und der Controller kennen immer nur die Person, die sie kennen müssen. Das ist das Problem, dass Seib ansprach. Auch wenn das ein Problem ist, dass man tatsächlich durch MVC sehr elegant in den Griff kriegen kann.

Der Vorteil dieses Vorgehens: View und Controller können schnell von Daten gereinigt werden, da es nur wenige Angriffspunkte gibt. Ausserdem ist es ein einfaches Rezept um Strukturen aufzubauen (das nun schon seit einigen Jahrzehnten bestand hat).
Omega Psi ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Probleme mit Objektorientierung Paratron ActionScript 3 14 13-03-2011 23:53
Erkennen das ein andere Tab / Fenster des Browsers schon zugriff hat Funkey PHP und MySQL 1 09-01-2011 21:37
MovieClip als Objekt einer und Zugriff auf andere Klassenelemente aus dem MC heraus DerRobertBerlin ActionScript 3 3 06-09-2010 10:00
Zugriff auf Movieclips und andere Komponentent innerhalb Komponenten citizen ActionScript 2 3 13-05-2010 23:20
[Galileo] - Praxisbuch Objektorientierung marc Bücher und Video-Trainings 0 05-04-2007 11:10


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:06 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele