Das Konzept des Prozessors
aus AlricgWiki, der freien Wissensdatenbank
ARTIKEL NOCH IN ARBEIT
Hier wird ein Stück vom Kern der Regel-Logik erläutert. Das Konzept des Prozessors ist die Grundlage der Verarbeitung von Charakter-Elementen in Alricg!
Inhaltsverzeichnis |
Beschreibung
Mit Hilfe des Prozessors werden bestimmte Elemente (Talent, Zauber, Sonderfertigkeit, usw.) verarbeitet, also vor allem das Hinzufügen, Entfernen und Verändern von Elementen. D.h., wann immer z.B. ein Talent zu einem Helden zuzugefügt wird, passiert dies mit Hilfe eines Prozessors. Der Prozessor beachtet dabei die entsprechenden Regeln, berechnet die Kosten und sonstigen Werte.
Natürlich müssen all diese Aktionen unterschiedlich verarbeitet werden, je nachdem um welches Element es sich handelt und nach der Art der Verarbeitung (also ob der Held gerade generiert wird oder gesteigert wird).
Deshalb gibt es für jedes CharElement eine eigende "Prozessor-Klasse" die sich um solche speziellen Dinge kümmert. Die Methoden einer solchen Klasse sind durch das Prozessor-Interface vorgegeben (siehe Diagramm), technisch gesehen ist ein Prozessor also ein Objekt, welches das Prozessor-Interface implementiert. Somit ist die Schnittstelle zu jedem Prozessor einheitlich, die Implementation jedoch abhängig der Art der Elemente und der Art der Verarbeitung.
Dies spiegelt sich auch in der package-Struktur wieder, in die die Prozessoren abgelegt werden. Hier werden die Prozessoren nach der Art der Verarbeitung geordnet:
- org.d3s.alricg.prozessor.generierung - Hier sind alle Prozessoren für die Generierung von Helden
- org.d3s.alricg.prozessor.management - Hier sind alle Prozessoren für das Management eines Helden zu finden, also für die Verwaltung bereits bestehender Helden
- org.d3s.alricg.prozessor.editor - Hier sind alle Prozessoren für den Editor zu finden. Hier werden also keine Charaktere gebaut, sondern die Elemente aus denen die Charaktere erstellt werden (Talente, Zauber, Rassen, ...).
Es mag verwundern, dass auch für den Editor die Verarbeitung über Prozessoren läuft. Grundsätzlich ist das Prinzip des Editors dem der Charakter-Bearbeitung ähnlich: Auch beim Editor werden oft Elemente zu anderen hinzugefügt (z.B. ein Talent zu einer Profession), Entfernt oder Verändert. Der Hauptgrund liegt allerdings darin, das so die Anbindung an die GUI einheitlich ist, den diese läuft über das Prozessor-Interface. Das Ziel ist möglichst viele GUI-Elemente der Charakter-Bearbeitung auch beim Editor benutzen zu können. Wie gut das klappt, werden wir sehen... ;-) Im Folgenden wird auf den Editor an dieser Stelle auch nicht weiter eingegangen, da dies ein Thema für sich ist.
Wichtig: Zu beachten ist, dass die Prozessoren nur die "Standard" Regeln der jeweiligen Elemente umsetzten, also Regeln die für jedes Element gelten. Für spezielle Regeln, die nur für EIN Element gelten sind der SonderregelAdmin, VoraussetzungsAdmin und VerbilligeteFertigkeitenAdmin zuständig - Nicht der Prozessor. Von Prozessor werden diese Admins nur an geeigenter Stelle aufgerufen.
Mit dem Prozessor zusammenhängende Klassen/Interfaces
Prozessor
Der Prozessor ist das "Basis-Interface" für alle anderen Prozessoren. Die Methoden in diesem Interface bilden die gemeinsame Grundlage aller Prozessoren.
ElementBox
Damit die Elemente von einem Prozessor verwaltet werden können, müssen diese gespeichert werden. Das Interface ElementBox definiert dabei die Schnittstelle eines solchen Speichers. Damit soll erreicht werden, das von jedem Prozessor die Enthaltenen Daten komfortabel abgerufen werden können. Das ElementBox Interface bietet dabei absichtlich keine Methoden an, um Objekte zu einer ElementBox hinzuzufügen oder zu entfernen: Dies soll nur über den Prozessor geschehen! Auch dürfen die enthaltenen Elemente selbst nicht verändert werden, da dies nur über den Prozessor geschehen darf.
LinkProzessorFront
Der "LinkProzessorFront" ist ein spezieller Prozessor, der der Verabeitung von Links dient. Wie der Zusatz "Front" andeutet, gibt es noch ein "Back" zu jedem LinkProzessorFront: Der LinkProzessorFront Kapselt nämlich stehts einen anderen LinkProzessor. Dabei übernimmt der LinkProzessorFront Standard-Aufgaben die für alle LinkProzessoren wichtig sind. Er ruft Sonderregeln auf, prüft Voraussetzungen und informiert GUI-Elemente über Änderungen. Dadurch kann sich der LinkProzessor ganz auf spezielle Aufgaben konzentrieren. Beispiel: "ProzessorTalent" und "ProzessorZauber" werden von einem LinkProzessorFront gekapselt. Dadurch können sich die beiden Prozessoren ganz um die speziellen Aufgaben für Talente und Zauber widmen, während der LinkProzessorFront die Aufgaben abdeckt, die generell für alle LinkProzessoren wichtig sind.
ExtendedProzessorXXX
Das "XXX" steht hierbei für ein bestimmtes CharElement. Durch die Kapselung von Prozessoren durch einen LinkProzessorFront entsteht auch ein Problem: Was ist, wenn ein Prozessor spezielle Methoden anbietet, nur für diesen Prozessor? Der LinkProzessorFront bietet diese Methoden natürlich nicht an, sondern nur die Standard-Methoden. Damit der LinkProzessorFront trotzdem auch spezielle Methoden anbieten kann, wurde ein erweiterungs-Mechanismus eingebaut. Es kann zu jedem Prozessor ein Interface angegeben werden (z.B. ExtendedProzessorTalent, ExtendedProzessorZauber) in dem die spezielle Methoden spezifiziert werden. Dieses Interface wird als Generic auch bei der initialisierung dem LinkProzessorFront angegeben. Mit der Methode "getExtendedFunctions" des LinkProzessorFront kann dann auf den Prozessor zugegriffen werden, und zwar über die Schnittstellen des ExtendedProzessorXXX-Interfaces.
Hört sich kompliziert an, ist auch nicht ganz einfach. Für Beispiele einfach den ProzessorTalent ansehen.
ProzessorObserver
Das Interface "ProzessorObserver" wird von allen Objekten implementiert, welche einen Prozessor beobachten möchten. Bei jeder Änderung, die ein Prozessor vornimmt (hinzufügen/entfernen/verändern von Elementen) wird dann eine entsprechende Methode des Observers aufgerufen. So sind z.B. die GUI-Elemente an die Prozessoren angebunden.
