Zurück   Flashforum > Flash > ActionScript > ActionScript 3

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 04-01-2012, 06:23   #1 (permalink)
Neuer User
 
Registriert seit: Jan 2009
Beiträge: 12
as3 und vererbung

guten morgen @all und ein frohes neues jahr.

seit wochen habe ich mich jetzt mit as3 beschäfftigt. ich habe vor ein kleines privates projekt zu schreiben. bisher bin ich ganz gut voran gekommen. aber irgendwie komme ich mit der oop und vererbung von as3 noch nicht zurecht.

in meiner main timeline importiere ich eine klasse wakeup.
diese initialisiere ich über new.

in meiner klasse wakeup importiere ich eine weitere klasse obj sie erbt von wakeup.

jetzt möchte ich auf die variablen von wakeup zugreifen.

aber genau da scheitert es. google und co habe bis jetzt nicht wirklich helfen können.

code in der main timeline:
Code:
import starting.wakeup;
var cmd = new wakeup();
cmd.init();
code von der klasse wakeup:
Code:
package  starting{
     import flash.display.MovieClip;
     import starting.obj;

     public class wakeup extends MovieClip{
         protected var app:Object = new Object;

         public function init(){
            starting.obj.build();

            //restlicher code
         }
     }
}
jetzt der code von der klasse obj:
Code:
package  starting{
	import starting.wakeup;
	
	public class obj extends starting.wakeup{
		public static function build() {
			//hier habe ich alles versucht um auf die variable von wakeup.app zu kommen. entweder erhalte ich fehlermeldungen oder undefined oder null.
		}

	}
	
}
ich hoffe das ich mit meinem problem nicht all zu sehr die gemüter der wissenden strapaziere. vielleicht ist es ein banales problem. aber ich danke für jede antwort die mir weiter hilft.
sodiac ist offline   Mit Zitat antworten
Alt 04-01-2012, 08:01   #2 (permalink)
Neuer User
 
Registriert seit: Jan 2009
Beiträge: 12
as3 und vererbung gelöst

Adobe ActionScript 3.0 * Methoden
sodiac ist offline   Mit Zitat antworten
Alt 04-01-2012, 08:59   #3 (permalink)
Flasher
 
Registriert seit: Aug 2010
Ort: Stuttgart
Beiträge: 360
Und wenn du damit durch bist: Coding Conventions.

Außerdem: Wenn du kannst, dann lass die Finger von der Timeline. Wenn du unbedingt mit Flash arbeiten willst, dann kannst du auch einen Dokumentenklasse angeben und in der den Code reinwerfen, denn du jetzt auf dem ersten Frame hast. Ist sauberer, übersichtlicher und... naja, machs einfach! Was NOCH BESSER wäre: Flash gar nicht mehr für Programmiergeschichten nehmen, sondern eine richtige Entwicklungsumgebung, wie FlashDevelop (Windows) oder FDT (Mac). Damit entwickelt es sich angenehmer und übersichtlicher.

Zu deinem eigentlichen Problem: Bei der Nutzung von Klassen in der Definition einer Funktion werden prinzipiell keine Package-Pfade angegeben. Diesen Pfad brauchst du NUR für die import-Anweisung. Auch nicht später bei Variablen oder so.

In deiner build-Funktion brauchst du "app" auch nicht über "Wakeup.app" aufrufen, sondern nur direkt über ihren Bezeichner!

Du sagst weiterhin, dass du eine Fehlermeldung bekommst. Es ist immer unheimlich hilfreich, wenn du die Fehlermeldung auch hier postest, dann kann man dir meistens direkt sagen, wo der Hund begraben liegt. Der Link von sodiac sollte allerdings ultra hilfreich sein

Liebe Grüße!
__________________
Erwähne NIEWIEDER das Wort "Klickdummy"!
Ouroborus23 ist gerade online   Mit Zitat antworten
Alt 04-01-2012, 09:12   #4 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.141
Das Problem ist, dass die Variable protected ist, sie muss public sein um darauf zugreifen zu können. Aber auch das macht die Sache im ersten Augenblick nicht einfacher, da du eine Instanz der Klasse wakeup brauchst, um auf die Variable zugreifen zu können.
Omega Psi ist offline   Mit Zitat antworten
Alt 04-01-2012, 10:06   #5 (permalink)
Flasher
 
Registriert seit: Aug 2010
Ort: Stuttgart
Beiträge: 360
Zitat:
Zitat von Omega Psi Beitrag anzeigen
Das Problem ist, dass die Variable protected ist, sie muss public sein um darauf zugreifen zu können.
Und noch einen Schritt weitergedacht: Lass die Variable protected und schreiben eine getter/setter-Funktion dafür.
__________________
Erwähne NIEWIEDER das Wort "Klickdummy"!
Ouroborus23 ist gerade online   Mit Zitat antworten
Alt 04-01-2012, 10:29   #6 (permalink)
Neuer User
 
Registriert seit: Jan 2009
Beiträge: 12
oh man und ich mach wie ein gaskranker mit flash herum.
FlashDevelop ist genau das was ich gesucht habe.

ja stimmt. die fehlermeldungen wären von vorteil gewesen.

da waren fehler meldungen wie:

1120 zugriff auf nicht definierte eigenschaft app

oder

TypeError: Error #1009: Der Zugriff auf eine Eigenschaft oder eine Methode eines null-Objektverweises ist nicht möglich.


@Ouroborus23
danke für den link.
sodiac ist offline   Mit Zitat antworten
Alt 04-01-2012, 10:56   #7 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 6.162
@sodiac:
Das ist schon eine ziemlich seltsame Konstruktion, die Du da zusammengezimmert hast. Und eine gefährliche noch dazu:

Wenn Du nun obj aus wakeup heraus instanziiert würdest (statt nur eine statische Methode aufzurufen) hättest Du eine formitable Endlosschleife gebaut:

Vererbung heißt ja nichts anderes als, das eine Klasse all das ist, was ihre Superklasse auch ist. Instanziert man nun die Klasse, instanziiert man automatisch auch alle ihre Superklassen. Und wenn eine der Superklassen im Konstruktor wiederum eine ihrer eigenen Unterklassen instanziiert, nimmt diese Instanziiererei gar keine Ende mehr...

Irgendwie hab ich das Gefühl, dass Dir noch nicht so ganz klar ist, wozu es überhaupt sowas wie Vererbung gibt und was in diesem Zusammenhang der Unterschied zwischen Klassen und ihren Instanzen ist?!
Vielleicht beschreibst Du uns mal, was Du ereichen möchtest:
  1. Wofür sind die beiden Klassen da?
  2. Warum muss Die eine bei der anderen erben?
  3. Wieso hat keine der Klassen einen Konstruktor?
  4. Auf static deklarierte Methoden hat Vererbung keinen Einfluss. Wieso verwendest Du sie hier?
  5. Was ist app und warum müssen beide Klassen darauf zugreifen?

P.S.: Auch wenn's Ouroborus23 schon erwähnt hat:
Zitat:
Zitat von Ouroborus23 Beitrag anzeigen
Und wenn du damit durch bist: Coding Conventions.
Klassennamen sollten aus Gründen der Leserlichkeit IMMER mit einem Großbuchstaben beginnen!
__________________
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!

Geändert von Martin Kraft (04-01-2012 um 10:57 Uhr)
Martin Kraft ist offline   Mit Zitat antworten
Alt 04-01-2012, 11:23   #8 (permalink)
Neuer User
 
Registriert seit: Jan 2009
Beiträge: 12
um ehrlich zu sein komme ich aus dem php bereich.
dort habe ich bereits objekt orientiert programmiert.

jetzt wollte ich als herausforderung in flash und as3 einsteigen.
ich lerne gerne neues dazu.

mir ist klar das die erbende klasse alle eigenschaften und methoden von der vererbenden klasse bzw von der elternklasse enthält.

ich bin es von php gewohnt das eine erbende klasse die informationen einer variable nutzen kann oder für den weiteren programmablauf ändern kann.

das ist auch so ziemlich mein vorhaben. ich möchte in einer basisklasse alle variablen deklarieren die ich brauche. diese möchte ich im weiteren programmablauf in den unterklassen nutzen und oder ändern können.

was as3 angeht bin ich offenkundig etwas unbeholfen. was man an meiner anwesenheit hier und frage mit sicherheit merkt.



das mit dem konstruktor leuchtet ein. das habe ich gleich mal ausgebessert.
sodiac ist offline   Mit Zitat antworten
Alt 04-01-2012, 11:50   #9 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 6.162
Zitat:
Zitat von sodiac Beitrag anzeigen
das ist auch so ziemlich mein vorhaben. ich möchte in einer basisklasse alle variablen deklarieren die ich brauche. diese möchte ich im weiteren programmablauf in den unterklassen nutzen und oder ändern können.
Da liegt dann wahrscheinlich auch Dein Denkfehler! Und der ist zunächst mal völlig unabhängig von der Vererbung:

Du musst zwischen Klassen und ihren Instanzen unterscheiden. Eine Klasse ist nur ein Bauplan mit dem man beliebig viele Instanzen bauen kann. Diese Instanzen sind dann aber autark. D.h. sie haben jeweils ihre eigenen Variablen und überschreiben sich nicht gegenseitig.

Da es also beliebig viele Instanzen einer Klasse geben kann, benötigt man eine Referenz (Variable) auf die Instanz, auf deren Variablen und Methoden man gerade zugreifen will.

Anders sieht das bei static deklarierten Variablen und Methoden aus. Diese gehören direkt zur Klasse, können aus jeder Instanz angesprochen werden, haben aber selbst keinen Zugriff auf die Instanzvariablen (wie auch - da es 0-x Instanzen geben kann wäre der ja nicht eindeutig).

Wenn Du also etwas über Klassen, Instanzen und Vererbung lernen möchtest, würde ich Dir empfehlen, erst mal auf static zu verzichten, bis Du richtig mit den Instanzen klarkommst:

Vielleicht wird das Ganze ja an Hand eines Beispiels deutlicher:

Klasse:
ActionScript:
  1. package {
  2.    
  3.     public class Test {
  4.        
  5.         static public var classVar:String;
  6.        
  7.         public var instanceVar:String;
  8.        
  9.         public function Test( str:String ):void {
  10.             instanceVar = str;
  11.             classVar = str;
  12.         }
  13.        
  14.     }
  15.    
  16. }
Aufruf:
ActionScript:
  1. var test1:Test = new Test("ein Wert für die Instanz test1");
  2. var test2:Test = new Test("ein Wert für die Instanz test2");
  3.  
  4. trace(test1.instanceVar+" / "+test2.instanceVar+" / "+Test.classVar);
  5.  
  6. Test.classVar = "ein Wert für die Klasse Test";
  7.  
  8. trace(test1.instanceVar+" / "+test2.instanceVar+" / "+Test.classVar);
__________________
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 04-01-2012, 12:33   #10 (permalink)
Neuer User
 
Registriert seit: Jan 2009
Beiträge: 12
OK.
anhand des beispiels wird mir klar warum ich überhaupt so viele probleme habe.

Zitat:
Irgendwie hab ich das Gefühl, dass Dir noch nicht so ganz klar ist, wozu es überhaupt sowas wie Vererbung gibt und was in diesem Zusammenhang der Unterschied zwischen Klassen und ihren Instanzen ist?!
in diesem sinne gebe ich dir recht.

in vergleich gesehen zu dem wie ich es von php gewohnt bin. ist es zwar merkwürdig ungewohnt. aber bietet mehr sicherheit. würde ich jetzt, mit dem ersten eindruck den ich gewonnen habe, sagen.

danke. das ist eine basis auf der ich bauen kann.


da kann man doch fast auf extends verzichten?
sodiac ist offline   Mit Zitat antworten
Alt 04-01-2012, 12:37   #11 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 6.162
Zitat:
Zitat von sodiac Beitrag anzeigen
da kann man doch fast auf extends verzichten?
Vererbung brauchst Du nur, wenn wirklich etwas geerbt werden soll – also ein Objekt ein anderes plus X ist.

Mit dem Zugriffe auf die Variablen und Methoden anderer Instanzen hat Vererbung hingegen nichts zutun.
__________________
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 04-01-2012, 12:46   #12 (permalink)
Neuer User
 
Registriert seit: Jan 2009
Beiträge: 12
ja oder so.

seit wann beschäfftigst du dich mit as3?
sodiac ist offline   Mit Zitat antworten
Alt 05-01-2012, 04:59   #13 (permalink)
Neuer User
 
Registriert seit: Jan 2009
Beiträge: 12
mein fazit nach fast 24 stunden experimentieren mit as3.

ich habe mich verliebt.
anfangs habe ich as3 und seine syntax für kompliziert und umständlich gehalten.

jetzt jedoch, gerade durch die voran gegangenen beispiele, kann ich nur sagen das as3 richtig genial gemacht ist.

für einen eingefleischten phpler wie eine revulution.
sodiac ist offline   Mit Zitat antworten
Alt 05-01-2012, 12:39   #14 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 6.162
Zitat:
Zitat von sodiac Beitrag anzeigen
mein fazit nach fast 24 stunden experimentieren mit as3.

ich habe mich verliebt.
anfangs habe ich as3 und seine syntax für kompliziert und umständlich gehalten.

jetzt jedoch, gerade durch die voran gegangenen beispiele, kann ich nur sagen das as3 richtig genial gemacht ist.

für einen eingefleischten phpler wie eine revulution.
Gell
Schön, dass sich auch PHPler über soviel Stringenz und und eine konsequente API freuen können

Zitat:
Zitat von sodiac Beitrag anzeigen
seit wann beschäfftigst du dich mit as3?
Intensiv erst seit 3 Jahren - bin aber schon seit über 10 Jahren mit Flash unterwegs...
__________________
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 05-01-2012, 15:08   #15 (permalink)
Neuer User
 
Registriert seit: Jan 2009
Beiträge: 12
guten morgen.

bis gestern oder vielmehr seit heute morgen war ich noch darüber bestürzt wenn ich zu hören bekam php sei nichts weiter als spagetticode.

jetzt bin ich der selben meinung.

lange rede kurzer sinn.
ich werde mein hobby wechseln.


daher auch die nächste frage. hier
sodiac 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
AS3 Vererbung ... hedgehog ActionScript 3 1 19-06-2007 23:21
vererbung? DJ-Sonix Flash 8 3 06-01-2006 15:33
vererbung warrantmaster Softwarearchitektur und Entwurfsmuster 13 05-10-2003 22:21
Vererbung bluna ActionScript 1 6 03-04-2002 14:33
vererbung ebnf Softwarearchitektur und Entwurfsmuster 1 05-07-2001 22:59


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:11 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele