verkettete Mühlen

Zu dieser Seite gehört wiederum ein Projekt (Knopf_Muehle_6), das hier heruntergeladen werden kann.

Einen kleinen Exkurs liefert Aufgabe 3 von Aufgabenblatt 2. Es soll die Möglichkeit bestehen, weitere Mühlen auf dem Bildschirm erscheinen zu lassen. 
Um beliebig viele Mühlen erscheinen lassen zu können, wenden wir eine einfache Verkettung an, wie sie schon von den Waggons des Zugprojektes her bekannt ist. Jede Mühle benötigt dafür einen Zeiger 'kenntNaechsteMuehle' und einen Dienst 'haengeAn (pMuehle: TMuehle) , mit der eine neue Mühle an das Ende der Mühlenkette angehängt wird.

Die Klasse TAnwendung hat zur Verwaltung zwei Mühlen. Die eine heißt Muehle1 und ist die erst Mühle in der Mühlenkette. Wird eine neue Mühle erzeugt, wird dies mit der Objektvariablen neueMuehle durchgeführt. Die neue Mühle wird dann an die Mühlenkette angehängt, indem die erste Mühle den Auftrag zum Anhängen erhält. 
Der entsprechende Auftrag Dienst der Klasse TMuehle entspricht dem der Klasse TWaggon:

Anhängen einer Mühle
pMuehle ist die neu anzuhängende Mühle

Hat die aktuelle Mühle noch keine Nachfolgerin

   wird die neue Mühle direkt angehängt.



Andernfalls erhält die Nachfolgemühle den Auftrag,
   die neue Mühel anzuhängen
procedure TMuehle.haengeAn(pMuehle:TMuehle);
begin
  if kenntNaechsteMuhle = nil then 
     begin
        kenntNaechsteMuhle := pMuehle;
     end
  else 
     begin
        kenntNaechsteMuhle.haengeAn(pMuehle);
     end
end 
Erklärtext
Programmcode:

Natürlich müssen einige Aufträge von der ersten Mühle an die anderen Mühlen weitergegeben werden. 
Beispiel: Weiterreichen der Verlangsamung einer Mühle
procedure TMuehle.langsamer;
begin
  if zGeschwindigkeit > 0.1 then 
     zGeschwindigkeit := zGeschwindigkeit - 0.01;
  if kenntNaechsteMuhle <> nil then
     kenntNaechsteMuhle.langsamer;
end;