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!
|
|