| |||||||
Du magst keine Werbung? Wir auch nicht!
Einfach registrieren und die Werbung ist weg. Diese Nachricht sehen nur nicht registrierte Nutzer.
![]() |
| | LinkBack | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| thinkin aBout tha lib. Registriert seit: Nov 2001 Ort: Kölle
Beiträge: 1.379
| Classmatching
Hallo Leute, ich glaube ich hab endlich mal ein Thema das dieses Forums hier würdig ist ![]() Folgendes: Ich stehe vor einem klassischen Problem und möchte dieses so effizient wie möglich in AS3 lösen: Ich möchte es ermöglichen das verschiedene "Funktionen" bei instanzen verschiedener Klassentypen angewandt werden. Code:
An einem Beispiel angewandt: Code:
das ist schonmal ganz schöne Kopfnuss überhaupt zu lösen. Nur frage ich mich dabei noch wie schafft man das halbwegs performant?! hat jemand ne Idee? grüsse Martin.
__________________ Back to community with http://leichtgewicht.at |
| | |
| | #2 (permalink) |
| mushroom powered Registriert seit: Jun 2005 Ort: Amsterdam
Beiträge: 2.649
|
Willst du vielleicht sowas machen: http://en.wikipedia.org/wiki/Strategy_pattern ? PHP-Code: Geändert von b.asile (11-01-2010 um 14:28 Uhr) |
| | |
| | #3 (permalink) |
| Perverted Hermit Registriert seit: Mar 2004 Ort: Delmenhorst
Beiträge: 12.898
|
Eine Referenz zu einer Funktion zu übergeben ist schon die perfomanteste Methode (addEventListener). Das möchte man aber ungern, da es nicht typesafe ist. Was du möchtest, musst du entscheiden. |
| | |
| | #4 (permalink) |
| thinkin aBout tha lib. Registriert seit: Nov 2001 Ort: Kölle
Beiträge: 1.379
| Strategy pattern geht aber ...
Naja: Ein Problem beim Strategy Pattern ist das ein Match nicht "höher gewertet" wird als ein anderer. Ich möchte also nicht alle ausführen sondern nur die, die am besten passt, basierend auf der Klasse. In natürlicher Sprache ausgedrückt: Ich habe eine Waschanlage für alle Fahrzeuge, eine die besonders gut für Flugobjekte funktioniert: Code:
Das heisst also: Es gibt für ein "Flugzeug" drei "Strategies" gibt die ausführbar wären. Car implementiert Object, aber weil Car die Subklasse von Vehicle ist wird Object niedriger gereiht. (Hierarchien bei Interfaces sind auch nicht ausser acht zu lassen!) Das Flugzeug passt zu allen dreien, theoretisch sind "VehicleWashingPlant" und "FlyingVehicleWashingPlant()" sogar gleichwertig. Durch die Reihung kommt das letztere aber raus. Eine Implementierung die ich mir vorstelle geht ungefähr so vor:
Code:
Das Problem ist das pro Instanz eine ziehmlich Performancezehrende Geschichte ist. Ausserdem wird bei jedem Mal: Code:
Ich kann das jetzt noch viel weiter Spinnen aber vielleicht habt ihr ja ne gute Idee die ich noch nicht hatte. Unabhängig davon das ich noch keine Idee habe wie ich die Klassenhierarchy sauber aufsplitten sollte... grüsse Martin.
__________________ Back to community with http://leichtgewicht.at |
| | |
| | #5 (permalink) |
| Neuer User Registriert seit: Jul 2001 Ort: Berlin | Friedrichshain
Beiträge: 3.564
|
[OT] der kaneda.. immer gut fuer'n knoten im hirn.. ![]() [/OT]
__________________ 8bm | join ff@BOINC formpackage.org | audiohunter.de | problematica.de | 8ball-media.de/blog | taikonauten.cn |
| | |
| | #6 (permalink) |
| Perverted Hermit Registriert seit: Mar 2004 Ort: Delmenhorst
Beiträge: 12.898
|
Ich sehe das Problem nicht. Wenn du das zu waschende Objekt kennst, kennst du auch die optimale Waschanlage. Die kannst du über eine genestete Fabrik erzeugen: Code:
|
| | |
| | #7 (permalink) |
| thinkin aBout tha lib. Registriert seit: Nov 2001 Ort: Kölle
Beiträge: 1.379
| Naja
Also diese "if" Abfrage in deinem Beispiel hat ja schon einige Nachteile: Fix konfiguriert (mein grösstes Problem hier) Wenn ich so eine Konfiguration aufbaue (Welche Factories gibts für welche Typen) dann ist die fix und erzeugt potentiell Probleme beim arbeiten mit .swc's und nachladen von Konfiguration. Das mag in manchen Fällen vernachlässigbar sein... aber dennoch. Konfiguration ist in Methodenkörper Wenn man mit .swcs arbeitet ist der Methodenkörper von Methoden echt doof herausfindbar. Ohne .swcs sind sie nur gut versteckt und man darf sie suchen. Performance wird kleiner bei mehr Typen Jede Instanz wird hier pro Typ überprüft, je komplexer die Konfiguration wird (je länger der Methodenkörper ist) desto höher ist die Wahrscheinlichkeit das es mehrere Abfragen benötigt. Natürlich lässt sich dieses Ergebnis auch irgendwie Cachen. FYI: Mit Cache ist es ca. 5x langsamer als bei einer einzigen if Abfrage: (Sprich: Ab 5 if Abfragen pro Objekt ist der Cache schneller!) Mehr Code Es ist mehr code, von dem die Leute auch wissen müssen wie schreiben. Es ist nicht immer trivial herausfinden welches Interface/welche Klasse jetzt höher bewertet werden soll/wurde. Aber um der ganzen Geschichte jetzt noch ein bischen Schmackes zu geben, kann ich ja das Problem in seiner ganzen Komplexität enthüllen. Ich möchte das Ding irgendwie eigentlich verschachteln: Code:
__________________ Back to community with http://leichtgewicht.at |
| | |
| | #8 (permalink) |
| Perverted Hermit Registriert seit: Mar 2004 Ort: Delmenhorst
Beiträge: 12.898
|
Ok, dann verstehe ich richtig: du kennst nicht die Anzahl der Fahrzeuge nicht und auch nicht die Anzahl der Waschanlagen? Ausserdem sollen Fahrzeuge und Waschanlagen nachladbar sein? Dann brauchst du eine Form von I.o.C. Ich würde dir Spring ActionScript empfehlen. Über den ApplicationContext kannst du dann einfach das Mapping + Priorisierung managen sowie natürlich Injezierung der Instanzen und des Mappings in die Kontexte. Fertig. |
| | |
| | #9 (permalink) |
| Neuer User Registriert seit: Jul 2001 Ort: Berlin | Friedrichshain
Beiträge: 3.564
|
hm... mein interesse wurde geweckt, aber leider is die seite grad nich erreichbar..
__________________ 8bm | join ff@BOINC formpackage.org | audiohunter.de | problematica.de | 8ball-media.de/blog | taikonauten.cn |
| | |
| | #11 (permalink) |
| thinkin aBout tha lib. Registriert seit: Nov 2001 Ort: Kölle
Beiträge: 1.379
| Spring?
Naja, es gibt ja Parsley und anders auch noch als IOC Container. Das hindert mich jetzt aber nicht mich selbst daran zu versuchen, oder? Unabhaengig davon brauche ich eine optimierte Version bei der einzelne Schleifen zählen - ohne irgendwelchen API overhead. Wir sind ja hier in einem Architekturforum, ich denke da waere so eine Frage schon angemessen, also nochmal: Hat wer ne Idee wie man das am elegantesten/flottesten lösen könnte?
__________________ Back to community with http://leichtgewicht.at |
| | |
| | #13 (permalink) |
| thinkin aBout tha lib. Registriert seit: Nov 2001 Ort: Kölle
Beiträge: 1.379
| Neugierig?
Ich fands ein schönes neutrales Beispiel; besser als Peka-, Hasel- und Walnussknacker. Was ich damit machen will ist ein bischen eine Überraschung (auch für mich, bin neugierig)
__________________ Back to community with http://leichtgewicht.at |
| | |
| | #14 (permalink) |
| Perverted Hermit Registriert seit: Mar 2004 Ort: Delmenhorst
Beiträge: 12.898
|
Neugierig, nein. Ich will meinen Ansatz nur argumentativ untermauern. Und was die Iterationen, Introspektion etc angeht... das fällt mit I.o.C. weg. Zumal in deiner Version keine Form der Priorisierung möglich ist, jedenfalls keine Explizite. |
| | |
| | #15 (permalink) |
| thinkin aBout tha lib. Registriert seit: Nov 2001 Ort: Kölle
Beiträge: 1.379
| Hmm
Ich sehe halt bei momentan 4 verschiedene Formen von Wertung die Sinn machen würden: 1) Klassenstruktur (der vererbungsbaum wird beachtet, interfaces bekommen auch einen vererbungsbaum - Ausgangsproblem) 2) Anordnung der Definitionen bei gleichwertigen Klassen Code:
4) Überschreiben von Childdefinitionen der Hierarchie. Parent kann sagen: Ich weiss das besser als Child. Und festigen der Childdefinition: Child kann sagen, ich ignoriere Parent. (ala CSS) Wie beurteilen und argumentieren? Naja: Ich würd sagen: Endperformance, Lines of Code, readability.
__________________ Back to community with http://leichtgewicht.at |
| | |
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |