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

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 03-04-2009, 14:21   #1 (permalink)
Neuer User
 
Registriert seit: Feb 2004
Ort: Dresden
Beiträge: 105
Why we need a collection framework in ActionScript

Auf der Suche nach kompakten Datenstrukturen ist mir aufgefallen,
wie wenig das Thema "collections" bisher in ActionScript besetzt ist.
Ich bin mir nicht sicher, ob es daran liegt, dass wir zu wenig Know-
how aufbieten können oder ob wir collections tatsächlich einfach aus
bestimmten Gründen nicht brauchen.

Wie auch immer, es gibt eine ganze Reihe von Individuallösungen,
ausgerichtet auf verschiedene Bedürfnisse (Geschwindigkeit,
Architektur, Framework-Konformität). Man kann aussagen, dass wir
für dieses grundsätzliche Problem der clientseitigen Datenhaltung
stets das Rad neu erfinden.

Im Ergebnis meiner Beschäftigung mit dem Thema habe ich einen
Artikel veröffentlicht, welcher sich elementar mit der Definition von
collections befasst und die Rolle eines möglichen Frameworks
beleuchtet. Diesen Artikel möchte ich hier vorstellen und gleich-
zeitig eine Diskussion über die Rolle von collections und den Einsatz
eines entsprechenden Frameworks anregen.

Zum Text: http://sibirjak.com/blog/index.php/c...-actionscript/
kakenbok ist offline   Mit Zitat antworten
Alt 03-04-2009, 15:07   #2 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Bremen
Beiträge: 13.348
Java Collections portiert nach ActionScript 3
Omega Psi ist offline   Mit Zitat antworten
Alt 03-04-2009, 15:23   #3 (permalink)
Neuer User
 
Registriert seit: Feb 2004
Ort: Dresden
Beiträge: 105
[x] Der Link geht gerade nicht
[ ] Der Link geht gerade
[x] Du meinst, sowas gibt's schon und das Thema ist nicht relevant für dich?
kakenbok ist offline   Mit Zitat antworten
Alt 03-04-2009, 18:32   #4 (permalink)
zimmer 101
 
Benutzerbild von ricobeck
 
Registriert seit: Jul 2003
Ort: LE
Beiträge: 1.584
hm, ich finde (zumindest der teil, den ich benutze) tut ziemlich gut, was datenstrukturen so tun sollen:

http://lab.polygonal.de/ds/

erst kürzlich begegneten mir eben die in einem kommerziellen produkt.
__________________
Illogical comparison with NaN. Any comparison operation involving NaN will evaluate to false because NaN != NaN.
SimPholders - iPhone Simulator aufbohren
ricobeck ist offline   Mit Zitat antworten
Alt 03-04-2009, 18:57   #5 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Bremen
Beiträge: 13.348
Zitat:
Zitat von kakenbok Beitrag anzeigen
[x] Du meinst, sowas gibt's schon und das Thema ist nicht relevant für dich?
Das ist durchaus relevant für mich... aber so was gibt es halt schon.
Omega Psi ist offline   Mit Zitat antworten
Alt 03-04-2009, 21:15   #6 (permalink)
Nagelneuer User
 
Benutzerbild von hazy fantazy
 
Registriert seit: Dec 2005
Beiträge: 923
Ich will ja niemanden abhalten, aber ich kann mich nicht erinnern, dass ich jemals eine Art von Collection vermisst hätte. Die Gründe, die du angibst machen schon Sinn. Aber vielleicht nur für einige sehr spezielle Projekte, die sehr große Collections benutzen.

Du kannst ja spasseshalber mal eine paar Messungen für deine verschiedenen Collections machen. Deine Tabelle gibt ja schon ganz gut vor, was du messen kannst. Dann kann man besser entscheiden, ob ein Framework Sinn macht oder nicht. Ich denke, dass die meisten Collections, die einem so begegnen, weit unter 100 Elemente enthalten.
__________________
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

Geändert von hazy fantazy (03-04-2009 um 21:19 Uhr)
hazy fantazy ist offline   Mit Zitat antworten
Alt 03-04-2009, 21:37   #7 (permalink)
~~~~~~~~~~~~
 
Benutzerbild von _geo_
 
Registriert seit: May 2002
Ort: AUSTRIA (OÖ)
Beiträge: 3.320
@hazy fantazy: Da muss ich dir jetzt wiedersprechen. Collections bzw. streng typisierte Datenhaltung macht immer Sinn. Besonders im Hinblick auf Erweiterungen bzw. Skalierbarkeit von Anwendungen.

Bei komplexen Anwendungen hat keiner Lust sich 100 mal zu überlegen "hm.. welchen index aus dem Array brauch ich da nochmal ..." und debuggen wird zum Horrorszenario. Bzw. erleichtert es auch die Kommunikation wenn man sagen kann: "Da hab ich nen DoubleLinkedList verwendet" weil dann kennt sich jeder aus, ähnlich wie bei Designpatterns.

lg
__________________
--- :P ---

Blog
Bei unerwünschten Nebenwirkungen zerreißen Sie die Packungsbeilage oder erschlagen ihren Arzt oder Apotheker

Geändert von _geo_ (03-04-2009 um 21:43 Uhr)
_geo_ ist offline   Mit Zitat antworten
Alt 04-04-2009, 01:48   #8 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Bremen
Beiträge: 13.348
Collections != (streng) typisiserte Datenhaltung... ganz im Gegenteil.
Omega Psi ist offline   Mit Zitat antworten
Alt 05-04-2009, 21:34   #9 (permalink)
~~~~~~~~~~~~
 
Benutzerbild von _geo_
 
Registriert seit: May 2002
Ort: AUSTRIA (OÖ)
Beiträge: 3.320
@Omega Psi: Mit "streng typisiert" war hier gemeint dass die Collection nur einen Datentyp annimmt (den man vorher frei wählen kann. Das hebt für mich aber nicht die Typisierung auf). Da dass in Flash bisweilen "nicht" (Vector) zu realisieren ist (Generics) fallen die AS3 Collections aber nicht in diese Kategorie, da hast du recht.

Es ging mir aber nicht um die "was_auch_immer Typisierung" sondern um die Argumente welche für den Einsatz von Collections sprechen.

lg
__________________
--- :P ---

Blog
Bei unerwünschten Nebenwirkungen zerreißen Sie die Packungsbeilage oder erschlagen ihren Arzt oder Apotheker

Geändert von _geo_ (05-04-2009 um 21:36 Uhr)
_geo_ ist offline   Mit Zitat antworten
Alt 06-04-2009, 12:49   #10 (permalink)
Neuer User
 
Registriert seit: Feb 2004
Ort: Dresden
Beiträge: 105
Zitat:
Zitat von Omega Psi Beitrag anzeigen
Das ist durchaus relevant für mich... aber so was gibt es halt schon.
Ich kannte die sympathische Seite leider noch nicht. Danke für den Link.
Ich habe das AS3-Collection-Framework in die Sammlung von bestehenden
Entwicklungen mit aufgenommen.

Tatsächlich spricht der Link aber eigentlich für eine weitere Framework-
Diskussion und weniger dagegen. Die Aussage zu Beginn des Threads ist
nicht, dass wir keine Implementierungen haben sondern dass wir uns auf
keine einigen, dass es keinen Wettbewerb gibt (und damit auch keine
Fortentwicklung) und dass das Thema Collections offensichtlich nur
ausgewählten Entwicklern zugänglich ist.

Anders verhält es sich mit etwa Tweening-Libraries oder MVC-Frameworks.
Hier ergibt eine Suche einige Kandidaten, wobei ziemlich schnell klar
wird, welche von denen etwas taugen.
In Java oder .NET sind die Collections gleich Teil der Sprache. Damit
sind sie auch gleich Thema in jedem Programmier-Anfängerkurs.

--

Man nehme zwei Entwickler, die jeweils eine Library erstellen. Jede
Library verwendet andere collections. Der Endanwender, der beide
Libraries nutzen möchte, muss sich nun mit zwei verschiedenen
Collection-Frameworks plagen. Man stelle sich vor, er würde selbst ein
drittes favorisieren und für seinen eigenen Code verwenden.
kakenbok ist offline   Mit Zitat antworten
Alt 06-04-2009, 13:14   #11 (permalink)
Neuer User
 
Registriert seit: Feb 2004
Ort: Dresden
Beiträge: 105
Zitat:
Zitat von ricobeck Beitrag anzeigen
hm, ich finde (zumindest der teil, den ich benutze) tut ziemlich gut, was datenstrukturen so tun sollen:

http://lab.polygonal.de/ds/

erst kürzlich begegneten mir eben die in einem kommerziellen produkt.
Ja das ist wohl die erste Adresse. Allerdings geht das weit über ein kompaktes
Collection-Framework hinaus. Z.B. braucht man vom normalen Anwender keine
Entscheidung über den zu verwendenden Suchalgorithmus erfragen/erwarten.

Es gibt hier auch ein paar nachteilige Aspekte, weswegen sich die Datenstrukturen
nicht als allgemeine Lösung anbieten (kaum Interfaces, Handling der LinkedLists,
Code-Duplizierung aus Performancegründen).
kakenbok ist offline   Mit Zitat antworten
Alt 10-04-2009, 13:29   #12 (permalink)
thinkin aBout tha lib.
 
Benutzerbild von kaneda
 
Registriert seit: Nov 2001
Ort: Kölle
Beiträge: 1.379
...

... aus diesem Grunde Array ... krakenbock ich geb dir 100% recht: es ist Kacke wenn man Datentypen verwenden will von einer Bibliothek und dann ein anderes Projekt braucht/hilfreich wäre welches eine andere Bibliothek verwendet. Nicht nur ein bischen Kacke sondern so richtig dick fett...

In Java oder anderen Sprachen gibt es (für flash verhältnisse unglaubliche) Interface definitionen die standardisiert sind - und dafür können dann Datenhalter noch und nöcher gemacht werden.

Ich habe lange nach Gründen gesucht warum das bei Flash nicht wirklich klappt (habs zu AS2 zeiten versucht und bin gescheitert - vielleicht weil ich zu dumm/unerfahren war, wer weiss) - Ich vermute das sowas einfach im Sprachenkit vordefiniert sein muss damit Menschen das wirklich verwenden können. Und genau aus diesem Grunde lande ich in 90% der Fälle bei Array, mittlerweile denke ich über einen Schwenk auf Vector nach - aber da meine Entwicklungen zum Grossteil auf Flash9 laufen -> Array. Man kann ja ein Array auch als Queue und als Stack vergewaltigen; Listen gehen sowieso die meisten mit Array problemlos(beim broadcasten von irgendwas verwende ich für gewöhnlich aus Implementationsgründen eine Linked List, weils schnell sein muss). Wenn ich für irgendwas spezialisierte Datenhalter brauche dann stelle ich den Code aber nicht online/open source.

Es wäre an der Zeit dafür eine Taskforce zu gründen - aber die Grossen der branche sind viel mehr daran interessiert Kinky zeugs zu machen als das...
__________________
Back to community with http://leichtgewicht.at
kaneda ist offline   Mit Zitat antworten
Alt 10-04-2009, 13:38   #13 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Bremen
Beiträge: 13.348
Nicht Java als Sprache bietet die Collections an sondern die API (bei anderen Sprache ist das auch so).

Und solche Datenstrukturen sind in der rege auch nicht schwer zu implementieren, ganz zu schweigen davon, dass es geheime Implementierungen sind. Deswegen verstehe ich auch nicht, warum das nun so extrem wichtig zu sein scheint, ein allgemeines Framework zu haben.

PS: ein Array ist auch ein Stack - das hat mit einer falschen Nutzung des Array nichts zu tun.
Omega Psi ist offline   Mit Zitat antworten
Alt 11-04-2009, 04:59   #14 (permalink)
thinkin aBout tha lib.
 
Benutzerbild von kaneda
 
Registriert seit: Nov 2001
Ort: Kölle
Beiträge: 1.379
...

Eine Sprache definiert sich immer durch die Basiselemente und die Standardbibliothek. Quasi alle Datenhalter in der Java API werden durch die VM hochgetrimmt (spezieller optimierungscode). Unabhängig davon: Da Sun diese Klassen zur Verfügung stellt kann man davon ausgehen das jeder Entwickler der Welt diese Verwenden kann und wird(zumindest die Inferfaces).

Wenn ich ein GameFramework verwenden möchte das Polygonal Datenhalter benutzt und gleichzeitig mein immeraktives IOC Framework habe das Add2Fl Datenhalter verwendet dann müsst ich mir überlegen wo ich jetzt wie mit den Daten anfange rumzukonvertieren - nicht zu reden davon das alle Frameworks immer die selben namen verwenden und Codecompletion einen in den Wahnsinn treibt -> hach schon wieder die falsche LinkedList verwendet - mist.

Thema Array als Stack:
Code:
 arr.unshift( "mäh" );
Der Code ist nicht wirklich aussagekräftig right? Hab ich hier ne Stack verwendet. Gehe ich davon aus das immer nur oben reingegeben wird? Wenn ein anderer das liest, was hält ihn davon ab darunter .push zu machen und damit meine Logik zu zerstören? Ist das Array für diese Art der Datenhaltung gut genug? Linked List wär vielleicht schneller?

Deswegen sage ich vergewaltigen... naja
__________________
Back to community with http://leichtgewicht.at
kaneda ist offline   Mit Zitat antworten
Alt 11-04-2009, 12:00   #15 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Bremen
Beiträge: 13.348
Zitat:
Zitat von kaneda Beitrag anzeigen
Eine Sprache definiert sich immer durch die Basiselemente und die Standardbibliothek.
Ist das die 2009er Definition einer Programmiersprache?
Zitat:
Zitat von kaneda Beitrag anzeigen
Quasi alle Datenhalter in der Java API werden durch die VM hochgetrimmt (spezieller optimierungscode).
Hast du da Quellen zu? Das ist mir neu und ich würde mich da gerne mal reinlesen.
Zitat:
Zitat von kaneda Beitrag anzeigen
Unabhängig davon: Da Sun diese Klassen zur Verfügung stellt kann man davon ausgehen das jeder Entwickler der Welt diese Verwenden kann und wird(zumindest die Inferfaces).
Wollen wir es hoffen...

Zitat:
Zitat von kaneda Beitrag anzeigen
Wenn ich ein GameFramework verwenden möchte das Polygonal Datenhalter benutzt und gleichzeitig mein immeraktives IOC Framework habe das Add2Fl Datenhalter verwendet dann müsst ich mir überlegen wo ich jetzt wie mit den Daten anfange rumzukonvertieren - nicht zu reden davon das alle Frameworks immer die selben namen verwenden und Codecompletion einen in den Wahnsinn treibt -> hach schon wieder die falsche LinkedList verwendet - mist.
Wieso sollte man die beiden verschiedenen Collections konvertieren müssen? Es sind letzten Endes Collections die in verschiedenen Kontexten Anwendung finden und nichts miteinander zu tun haben (sollten/dürfen/müssen).

Zudem: Sind die Namensräume unterschiedlich, merkt man die falsche Verwendung schnell. Sind sie gleich, kriegst du auch einen Fehler für unklare Verweise.

Thema Array als Stack:
Code:
  1. package
  2. {
  3.  
  4.     public class Stack
  5.     {
  6.  
  7.         private var _arrayStack:Array;
  8.  
  9.         public function Stack()
  10.         {
  11.             super();
  12.             initialize();
  13.         }
  14.  
  15.         protected function initialize():void
  16.         {
  17.             _arrayStack = [];
  18.         }
  19.  
  20.         public function get length()
  21.         {
  22.             return _arrayStack.length;
  23.         }
  24.  
  25.         public function pop():Object
  26.         {
  27.             return _arrayStack.pop();
  28.         }
  29.  
  30.         public function push(value:Object):void
  31.         {
  32.             if (!value)
  33.                 throw new ArgumentError("'null' values are not allowed.");
  34.             _arrayStack.push(value);
  35.         }
  36.     }
  37. }
Zitat:
Zitat von kaneda Beitrag anzeigen
Der Code ist nicht wirklich aussagekräftig right? Hab ich hier ne Stack verwendet. Gehe ich davon aus das immer nur oben reingegeben wird? Wenn ein anderer das liest, was hält ihn davon ab darunter .push zu machen und damit meine Logik zu zerstören? Ist das Array für diese Art der Datenhaltung gut genug? Linked List wär vielleicht schneller?
1. Ich schrieb ein Array ist auch ein Stack. Das man selbst die Restriktionen für eine unerlaubten Zugriff implementieren muss, hätte ich ausführen sollen (siehe 3.).
2. LinkedList ist tendenziell schneller wenn die Implementierung einigermaßen vernünftig ist.
3. Von einer naiven Verwendung von "general purpose" Collections wird im allgemeinen abgeraten, da sie nicht typsicher sind in Bezug auf den Anwendungs Kontext. Collections sollten besser gekapselt werden im illegale Zugriffe zu vermeiden.
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



Alle Zeitangaben in WEZ +1. Es ist jetzt 00:40 Uhr.

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


Copyright ©1999 – 2014 Marc Thiele