14.12.2012 Aufrufe

2. Von objektorientierten Ameisen

2. Von objektorientierten Ameisen

2. Von objektorientierten Ameisen

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!