Zurück   Flashforum > Flash > ActionScript > Softwarearchitektur und Entwurfsmuster

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 26-10-2008, 12:20   #1 (permalink)
wau
 
Benutzerbild von Circushund
 
Registriert seit: Jan 2006
Ort: Hamburch
Beiträge: 404
Static Properties

Hi,

Habe eine Klasse, die als Model fungieren soll und wo ich einige Getter/Setter als stastic deklariere was etwas so aussieht:

PHP-Code:

private static _rotations:Array;
..
               public static function 
set rotations(value:Array):void{
            
trace("Astro ::set rotations"
            
_rotations value;
        } 
        
        public static function 
get rotations():Array{    
            
trace("Astro ::get rotations")  
            return 
_rotations;
        }
.. 

nun möchte ich, das diese Klasse sozusagen als Datenschrank dient, dh. das ich von jeder anderen Klasse aus diese Properties änder+lesen kann.
a la:
PHP-Code:
Astro.rotations = [1,2,3,..] 
Das funktioniert auch soweit gut, doch "merkt" sich die Klasse die geänderten Werte(bzw. Properties) nicht?

Müsste ich hier evtl. mit dem Singletone-Pattern arbeiten?
__________________
Say no to Internet Explorer 6!

Geändert von Circushund (26-10-2008 um 12:22 Uhr)
Circushund ist offline   Mit Zitat antworten
Alt 26-10-2008, 12:33   #2 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Bremen
Beiträge: 13.382
Oder lautet die Frage, dass Änderungen ignoriert werden?
Omega Psi ist offline   Mit Zitat antworten
Alt 26-10-2008, 12:38   #3 (permalink)
wau
 
Benutzerbild von Circushund
 
Registriert seit: Jan 2006
Ort: Hamburch
Beiträge: 404
Hi omega,

jaklar, Änderungen weren ignoriert, nur warum? Warum speichert die Klasse nur die Initalwerte und ignoriert Veränderungen? Insofern sind doch Getter/Setter hinfällig? Prinzip Datenschrank??


gruß
Don
__________________
Say no to Internet Explorer 6!
Circushund ist offline   Mit Zitat antworten
Alt 26-10-2008, 12:41   #4 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Bremen
Beiträge: 13.382
2 Dinge:
  1. Hast du mal getestet, ob die Werte wirklich nicht setzt werden, oder ob nur die View nicht aktualisiert wird.
  2. Wieso static?
Omega Psi ist offline   Mit Zitat antworten
Alt 26-10-2008, 13:17   #5 (permalink)
wau
 
Benutzerbild von Circushund
 
Registriert seit: Jan 2006
Ort: Hamburch
Beiträge: 404
bei mir im "cookbook" steht:

" .. However, there are cases in wich u want the property or method to be assoziated with the class itself rather than with instance of the class. That means that no matter how many instances of the class there may be, there is just one property or method. Such properties and methods are called static properties and methods ..."

..der View sieht bei mir so aus, das ich 3 Klassen hab, die Jeweils mit einem Symbol in der Biblio gelinkt sind.

Die Symbole sind 3 Zeiger die man um eine Scheibe rotiern kann und so das Datum daran einstellen kann.


Wenn ich nun den Jahres-Zeiger nehme, setzt er das Jahr:
Code:
Astro.year = XY
Wenn ich nun den Monats-Zeiger setze, setzt er den Monat:
Code:
Astro.month = XY
..doch ups, das "gesetzte" Jahr wurde nicht behalten?

ich dachte, das Static in diesem Fall das Beste ist, dh. das ich nicht mit instancen arbeite, da dort ja die Properties für jede Instanz separat gesetzt werden?
__________________
Say no to Internet Explorer 6!
Circushund ist offline   Mit Zitat antworten
Alt 26-10-2008, 13:36   #6 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Bremen
Beiträge: 13.382
Ich denke, da liegt bei dir irgendwo ein Fehler oder ein Misverständnis vor:
Code:
    package{    public class MyClass    {        public static var name:String = "";    }}
Code:
    MyClass.name = "Fred";trace(MyClass.name);MyClass.name = "Hans";trace(MyClass.name);
Omega Psi ist offline   Mit Zitat antworten
Alt 26-10-2008, 15:11   #7 (permalink)
wau
 
Benutzerbild von Circushund
 
Registriert seit: Jan 2006
Ort: Hamburch
Beiträge: 404
hmm,

im Grunde funktioniert das so wie du es schreibst (siehe Anlage), hab mal ein kleines Projekt gemkacht, nur irgendwie funktioniert das Gleiche Konzept nicht mit meiner Klasse (Astro)?? Irgendwo scheint da noch ein Fehler zu sein?


Hast du noch eine Idee?
Ok ich dank schonmal im Voraus
Angehängte Dateien
Dateityp: zip Static.zip (1,2 KB, 4x aufgerufen)
__________________
Say no to Internet Explorer 6!
Circushund ist offline   Mit Zitat antworten
Alt 01-11-2008, 10:14   #8 (permalink)
dreizeiler
 
Benutzerbild von mojave
 
Registriert seit: Sep 2004
Ort: Berlin
Beiträge: 1.401
die get und set methoden sind völlig überflüssig.
deklariere einfach die variable:

public static var rotations:Array;


und versuche es dann nochmal Astro.rotations = new Array(1,2,3);
mojave ist offline   Mit Zitat antworten
Alt 01-11-2008, 10:18   #9 (permalink)
Flashworker
 
Benutzerbild von sebastian
 
Registriert seit: Nov 2001
Ort: Wiesbaden
Beiträge: 10.935
Zitat:
Zitat von mojave Beitrag anzeigen
die get und set methoden sind völlig überflüssig.
deklariere einfach die variable:

public static var rotations:Array;


und versuche es dann nochmal Astro.rotations = new Array(1,2,3);
Nein. Eigenschaften nicht public machen, weil du die Kontrolle darüber verlierst.

Ist schon besser so.

Singleton ist prinzipiell schon besser. Jedoch hat das mit deinem Problem erstmal nichts zu tun.
Warum Eigenschaften verloren gehen, verstehe ich nicht. Liegt an was anderem.

Manipulierst du das Array nachdem du es speicherst? Ansonsten geh mal hin und mach:
Code:
    _rotations = value.concat();
(Schon hätten wir den Grund warum man Getter/Setter nutzen sollte.)

PS: Besser auch [1,2,3] statt new Array(1,2,3)

Geändert von sebastian (01-11-2008 um 10:21 Uhr)
sebastian ist offline   Mit Zitat antworten
Alt 01-11-2008, 11:26   #10 (permalink)
wau
 
Benutzerbild von Circushund
 
Registriert seit: Jan 2006
Ort: Hamburch
Beiträge: 404
jo danke euch, ich hab das Problem leider immer noch nicht lösen können..

ich schick einfach mal zwei Klassen undzwar:

1. Die Astro-Klasse, wo die Daten verarbeitet werden(soll als Model dienen)
2. Eine Klasse, die mit einem Symbol in der Biblio(Flash) verbunden ist.

Könnt ja mal reinschauen, evtl. fällt euch ja was auf, was den Fehler verursacht!
Die wichtigsten Variablen sind:

Astro.day
Astro.month
Astro.year

Vielleicht nochmal den Ablauf, wie der Fehler entsteht:

1) Ich starte das Projekt, ist ein AIR-Project
2) Ich nehme einen der drei Zeiger (zB. den Tag-Zeiger) und verstelle den Tag +1
3) Die Planten drehen sich dementsprechend
4) Nun nehme ich den Monats-Zeiger und verstelle die Monate +1
5) Die Planetne verstellen sich, doch anstatt sich den Tag aus 2) gemerkt zu haben, nimmt er denn default-Wert??

Screen:
http://www.dwienand.de/Expo/ss.PNG
Angehängte Dateien
Dateityp: rar Astrouhr.rar (2,2 KB, 3x aufgerufen)
__________________
Say no to Internet Explorer 6!
Circushund ist offline   Mit Zitat antworten
Alt 01-11-2008, 15:10   #11 (permalink)
Neuer User
 
Benutzerbild von _crypto_
 
Registriert seit: Mar 2006
Beiträge: 1.573
Ehm ich erinner mich da grade dunkel an dies:

Get- und Set-Methoden im Zusammenhang mit Array ...
Da war irgendetwas Bugartiges...

Ich glaube das get funktioniert einwandfrei, aber das set war das problem.
Wenn ich mich nochmal dran erinner kann ich dir genaueres sagen.
__________________

Currently working on:

- --- ---

-----------------------------------------------------------------
ActionScript 3.0, C++, Java, Delphi
_crypto_ ist offline   Mit Zitat antworten
Alt 02-11-2008, 12:45   #12 (permalink)
Nagelneuer User
 
Benutzerbild von hazy fantazy
 
Registriert seit: Dec 2005
Beiträge: 923
An der Stelle wo du im Code den Kommentar hinzugefügt hast, dass sich zwar Astro.day verändert, aber Astro.month und Astro.year den Defaultwert anzeigen, kann ich nicht erkennen, wodurch sich month und year verändern sollten (Oder verändern sie sich und sollen es nicht?).
__________________
The fact that you've got "Replica" written on the side of your gun and the fact that I've got "Desert Eagle written on the side of mine ... :D
hazy fantazy ist offline   Mit Zitat antworten
Alt 02-11-2008, 13:34   #13 (permalink)
wau
 
Benutzerbild von Circushund
 
Registriert seit: Jan 2006
Ort: Hamburch
Beiträge: 404
Zitat:
..wodurch sich month und year verändern sollten
sie sollten sich verändern, undzwar dadurch, das ich eben die Zeiger bewege.
Ich hab ja 3 Zeiger die jeweil mit einem Symbol in der Biblio verbunden sind.
Nehme ich den Jahreszeiger soll sich nur die Jahre verändern,
nehme ich den Monats-Zeiger, sollen sich die Monate verändern usw.
Respektive steht in meinem Code auch nur die Variable die Verändert wird:

für den Jahreszeiger:
PHP-Code:
...        
private function 
onMouseUpHand(event:MouseEvent):void{
            
trace("HandYear ::onMouseUpHand");
            
stage.removeEventListener(MouseEvent.MOUSE_MOVE,onMoveMouse)
        
            [
B]Astro.year this._year[/B]
            
Astro.load();
                        
            
Astro.currentRotations(Astro.instant);    
            
ani.rotations Astro.calcDiff();
            
ani.dispatchEvent( new Event("rotatePointers"));
            
Astro.save();
            
            
        }
... 
für den Monatszeiger:
PHP-Code:
...        
private function 
onMouseUpHand(event:MouseEvent):void{
            
trace("HandMonth ::onMouseUpHand");
            
stage.removeEventListener(MouseEvent.MOUSE_MOVE,onMoveMouse)
        
            [
B]Astro.month this._month[/B]
            
Astro.load();
                        
            
Astro.currentRotations(Astro.instant);    
            
ani.rotations Astro.calcDiff();
            
ani.dispatchEvent( new Event("rotatePointers"));
            
Astro.save();
            
            
        }
... 
für den Tages-Zeiger:
PHP-Code:
...        
private function 
onMouseUpHand(event:MouseEvent):void{
            
trace("HandDay ::onMouseUpHand");
            
stage.removeEventListener(MouseEvent.MOUSE_MOVE,onMoveMouse)
        
            [
B]Astro.day this._day[/B]
            
Astro.load();
                        
            
Astro.currentRotations(Astro.instant);    
            
ani.rotations Astro.calcDiff();
            
ani.dispatchEvent( new Event("rotatePointers"));
            
Astro.save();
            
            
        }
... 
Aber an der zentralen Stelle, nemlich in meiner Astro-Klasse, werden diese Werte eben(obwohl ich sie veränder) nicht "behalten" sondern auf default gesetzt??
__________________
Say no to Internet Explorer 6!
Circushund 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



Alle Zeitangaben in WEZ +1. Es ist jetzt 01:36 Uhr.

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


Copyright ©1999 – 2014 Marc Thiele