2. Von objektorientierten Ameisen
2. Von objektorientierten Ameisen
2. Von objektorientierten Ameisen
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
Um vergleichbare Ergebnisse zu bekommen, gilt in der AntMe!-Community ein<br />
ehernes Gesetzt: Die public-Methoden und Felder, die man in der Profi-Version ja<br />
verändern könnte, sind Tabu! Mehr noch: Es gilt als unfair, wenn man in diesen<br />
class-Dateien Änderungen vornimmt. Das trifft sich gut, denn genau dies ist auch das<br />
eiserne Gesetz der OOP: Was gekapselt ist, geht einen nichts an!<br />
Allerdings gibt es selbst unter strengster Auslegung dieser Gesetze durchaus<br />
Möglichkeiten, die <strong>Ameisen</strong> deutlich klüger zu machen, als es die Entwickler anfangs<br />
vorgesehen hatten. Das Stichwort dazu heißt static.<br />
Globales Gedächtnis und ArrayList<br />
Im letzten Programmentwurf hatte jede einzelne Ameise ein Gedächtnis. In der<br />
Sprache der Objektorientierung: Die Daten, die im Heap für die einzelnen Objekte<br />
gespeichert sind, könnnen von den anderen Objekten (<strong>Ameisen</strong>) nicht gelesen<br />
werden.<br />
Weiter oben haben Sie bereits eine static-Methoden verwendet:<br />
public static int BestimmeEntfernung(IKoordinate o1, IKoordinate o2)<br />
Hier ging es darum, dass die Methode BestimmeEnfernung nicht etwa auf eine<br />
Adresse im Heap zeigen soll, sondern dass der entsprechende Wert (value) im Stack<br />
abgelegt wird. Obwohl prinzipiell möglich, wird dieser Wert nach seiner Nutzung nicht<br />
weiter gespeichert. Der Garbage-Collector sorgt für eine schnelle Entsorgung.<br />
Was wäre aber, wenn man die von einem <strong>Ameisen</strong>-Objekt gefundenen Orte für Käfer<br />
oder Obst in einem public-static-Feld abspeichert? Dann können alle anderen<br />
<strong>Ameisen</strong> die Daten dort lesen und gegebenenfalls auch korrigieren! Auf die Realität<br />
übertragen würde dies bedeuten, dass die <strong>Ameisen</strong> über ein sofort verfügbares<br />
globales Gedächtnis verfügen, etwa so wie ein großer Teil Menschheit durch das<br />
Internet. Biologisch sinnvoll oder nicht (man kann sich ja vorstellen, dass die<br />
<strong>Ameisen</strong> auch über gewisse Distanzen kommunizieren können), - wir werden diese<br />
Technik nutzen. Unsere Einschränkung, dass Gedächtnis nur maximal 500 Spieltakte<br />
bestehen zu lassen, ist nicht ganz uneigennützig: Käfer und Obst bleibt ja nicht an<br />
einem Ort stehen. So würde das globale Gedächtnis, dass von allen <strong>Ameisen</strong><br />
gefüttert wird, sehr schnell so groß, dass seine Verwaltung auf dem RAM auch<br />
schnelle Rechner an den Rande der Leistungsfähigkeit bringen würde.<br />
In einem ersten Versuch soll eine „Killerameisen“-Population erschaffen werden: Die<br />
<strong>Ameisen</strong> konzentrieren sich ausschließlich aufs Töten von Käfern. Ein toter Käfer<br />
bringt 150 Punkte. Daher ist mit der globalen Gedächtnis-Methode ein respektables<br />
Ergebnis zu erwarten. Als Speicher soll uns eine ArrayList dienen.<br />
Interface<br />
In der .NET -Hilfe bekommt man zu ArrayList die Information, dass es sich dabei um<br />
eine Klasse handelt, die das IList-Interface unter Verwendung eines dynamischen<br />
Arrays implementiert. Alles klar?!? Vermutlich nicht. Daher zunächst die Frage:<br />
36