Projektdatei der zugehörigen Lösung
Die Wiederholungsschleife der Projektdatei vereinfacht sich
wirklich, wenn wir
die Verantwortung für die Reflektion von der Projektdatei
zur Kugel verlagern.
Die Schleife wird bei zwei Kugeln dann einfach zu:
repeat ersteKugel.bewege; zweiteKugel.bewege; meineUhr.warte(1) until dieMaus.istGedrueckt; |
Ein Botschaftsdiagramm verdeutlich die gewünschten Abläufe:
Wenn
eine Kugel von der Projektdatei den Auftrag erhält, sich zu bewegen, führt sie
erst die bekannten Schritte (1.1) bis (1.3) aus.
Danach muss sie vom Spielfeld die Koordinate seines rechten Randes erfragen. Hat
sie diese, kann die Kugel selbst entscheiden, ob sie ihre Geschwindigkeit
umkehren muss oder nicht.
Welche Voraussetzungen sind nötig, damit die Kugel das Spielfeld befragen kann?
Die Kugel muss das Spielfeld kennen.
Wie immer, wenn ein Objekt sich etwas merken soll, benötigt es dafür eine Gedächtniszelle, also ein Attribut.
Die Gedächtniszelle muss geprägt werden, anders
ausgedrückt, eine Kugel muss das Spielfeld kennen lernen.
Hierfür
benötigen wir eine Methode: 'lerneSpielfeldKennen (pSpielfel:
TSpielfeld)' .
Damit ergibt sich folgendes Klassendiagramm der neuen Kugelklassen:
mit der sehr einfachen Methode:
procedure TKugel.lerneSpielfeldKennen (pKenntSpielfeld: TSpielfeld); begin kenntSpielfeld := pKenntSpielfeld end; |
und der abgeänderten Methode zum Bewegen der Kugel:
Reflektion am rechten Rand Reflektion am linken Rand |
procedure TKugel.bewege; begin //Kugel an alter Stelle löschen meinStift.radiere; meinStift.bewegeBis(AkuelleXPos,AkuelleYPos); meinStift.zeichneKreis(10); //Kugel an neue Stelle bewegen AkuelleXPos := AkuelleXPos + AktuelleGeschwindigkeit; //Kugel neu zeichnen meinStift.normal; meinStift.bewegeBis(AkuelleXPos,AkuelleYPos); meinStift.zeichneKreis(10); if self.GibXPos + 12 > kenntSpielfeld.rechterRand then self.setzeGeschwindigkeit(-self.GibGeschwindigkeit); if self.GibXPos - 12 < kenntSpielfeld.linkerRand then self.setzeGeschwindigkeit(-self.GibGeschwindigkeit); end; |
Welche Änderungen sind in der Projektdatei vorzunehmen?
Vor der Bewegungsschleife muss jede einzelne Kugel das Spielfeld kennen lernen. Damit ergibt sich folgende kleine Ergänzung:
Zuerst müssen die Kugeln das Spielfeld kennen lernen, dann kann die Bewegung statt finden. |
ersteKugel.lerneSpielfeldKennen(dasSpielfeld); zweiteKugel.lerneSpielfeldKennen(dasSpielfeld); repeat ersteKugel.bewege; zweiteKugel.bewege; meineUhr.warte(1) until dieMaus.istGedrueckt; |
Der Unterschied zum vorigen Beziehungsdiagramm liegt in der KENNT-Beziehung zwischen Kugel und Spielfeld. Eine (gerichtete) Kennt-Beziehung wird durch einen Pfeil von der kennenden zur gekannten Klasse (bzw. vom kennenden zum gekannten Objekt) dargestellt. Die kleine Zahl am Ende gibt an, wie viele Objekte gekannt werden. Hier: Eine Kugel kennt genau ein Spielfeld. Ein Spielfeld hingegen kennt die Kugeln auf ihm nicht.
![]() |
|
![]() |
|
![]() |
Zur
nächsten Seite
![]() |
© 2005 GK 11 If und G. Kubitz Hannah-Arendt-Gymnasium, Lengerich Letztes Update: 17.11.04 |