is-Logo Karel D. Robot
Vererbung

S. Spolwig
3.2

[ Karel ]
Startseite

Ziele:
Neue Klasse einführen als Unterklasse; Vererbungsbeziehung

Informationen
zur Vertiefung


Wenn Mercedes-Benz ein neues Modell plant, fängt man auch nicht wieder von vorn auf dem Stand von 1886 an, sondern entwickelt eine laufende Baureihe weiter mit neuen Eigenschaften, Teilen und Fahrverhalten. Genauso wird im Prinzip Software entwickelt.

Um einen besseren Roboter zu bauen, nehmen wir als Basis die Klasse TRobot, in der RD1 beschrieben ist, und spezifizieren eine neue Klasse TMyRobot als Unterklasse. Die Unterklasse erbt alles von der Oberklasse und ergänzt nur noch die neuen Attribute und Methoden. Dabei kann man auch vorhandene Methoden durch neue ersetzen (überschreiben).

In der grafischen Darstellung sieht das so aus:


Alles, was TRobot an Attributen und Methoden hat, ist praktisch auch in TMyRobot enthalten als sei es dort eingetragen.
Zur Laufzeit wird auf die Methoden von TRobot im Arbeitsspeicher zugegriffen. 



Neue Attribute sind nicht unbedingt nötig.

Als neue Methoden sollten wir zunächst die aus den ersten Übungen implementieren, die im ControlFrm ausprobiert wurden und nun als robot-eigene Methoden übernommen werden können.

Wir brauchen also eine neue Unit, in der TMyRobot geschrieben wird. Dazu kann man eine völlige leere Unit von Delphi nehmen oder man benutzt eine halbfertige Vorlage. Das werden wir hier tun.

1. Aufgabe:
    Die neue Klasse TMyRobot implementieren

a) Unit hinzufügen mit

     Delphi-Menü-Projekt-Dem Projekt hinzufügen ....
uMyRobot.pas
    
Prüfen Sie mit Ansicht-Projektverwaltung, ob die Datei unter DelphiKarel.exe
    aufgeführt wird.
   
b) Entfernen Sie im Editor alle geschweiften Kommentarklammern { }, mit denen
   Textteile ausgeblendet sind.

c) In der Methode Init können Sie Attributwerte festlegen, die MyRobot beim
   Programmstart haben soll:  SetPos(...) , SetFarbe(..), SetFuellfarbe(..) 
   ---> s. Spezifikatione

procedure TMyRobot.Init;
  // ------------------------------------------------------------
  begin
    SetFarbe(clYellow);

  end;

 

d) Neue Methoden 'Vor', 'LinksDrehen' usw. schreiben

   Im INTERFACE-Teil

   procedure Vor; // die geerbte Methode wird 'überschrieben'

  Im IMPEMENTATION-Teil 

procedure TMyRobot.Vor;
  // ------------------------------------------------------------
  begin
   if VorneFrei
   then inherited Vor; //dann nimm die geerbte (inherited) Meth.
  end;

 

Weil in der Klasse die Methoden für alle späteren Exemplare (Robot-Objekte) geschrieben werden, fällt hier der Namensaufruf RD1 weg.

2. Aufgabe:
    Die neue Klasse im ControlFrm verwenden

 

Vorbereitung

Für den neuen Roboter sollten wir uControl.pas freiräumen.
a) Legen Sie von uControl.pas unter Windows eine Kopie zum Nachlesen im Ordner
    Backup an.

b) Löschen Sie im Interface und in Implementation die

procedure NachLinksDrehen;
procedure UmDieBaeume;
procedure Vorwaerts2;
procedure Vorwaerts3;
procedure Vorwaerts4;
procedure ZumBaum1;
procedure ZumBaum2;
procedure BaumSuchen;

 

Merke: 
Die folgenden Schritte gelten für
        alle neuen Units entsprechend!

Im INTERFACE-Teil

a) Neue Unit einbinden
    
unter uses einfügen: uMyRobot;

b) Neue Variable deklarieren
    
unter var einfügen: Robby : TMyRobot;

Im IMPEMENTATION-Teil

c) Robby erzeugen in TControlFrm.ItemsErzeugen und Position setzen, wie gehabt.
    Ersetzen Sie die Zeile RD1 := TRobot.Create; durch Robby := TMyRobot.Create;

d) Menü-Suchen-Ersetzen Sie in den Prozeduren alle RD1.xxx durch Robby.xxx


Starten Sie das Programm und lassen Sie Robby marschieren!

3. Aufgabe
    Ändern Sie TControlFrm.LinksBtnClick(Sender: TObject)!

 

4. Aufgabe: Große Wiederholung und Übung
    a) Versuchen Sie, die Prozeduren, die wir entwickelt haben, mit Robby neu zu
        implementieren. Vorsicht - sie dürften etwas anders laufen!

     b) Entwerfen und implementieren Sie weitere Methoden, die ein gut konstruierter
        Robot haben sollte!

 

Nicht vergessen: 
Objekte können erst dann angesprochen werden,
                              wenn sie schon erzeugt sind!

 

 

 

Vererbung

 

 

 


TRobot

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Klassendiagramm

 

©  05. Oktober 2008    Siegfried Spolwig

page_top next page