Nach dem Grundsatz, dass jede Klasse in einer eigenen Unit unterzubringen ist, schreiben wir eine eignene Unit UBuntturtle :
Die Vorgängerklasse TTurtle ist in der Unit UTurtle deklariert worden. Deswegen muss die Unit UTurtle in der uses-Liste aufgeführt werden. |
unit UBuntTurtle; interface uses Graphics, UTurtle; |
Auf die zusätzliche Eigenschaft h_farbe soll nur von Nachfolgeklassen von TBuntTurtle zugegriffen werden können. Die Methoden setzeFarbe und liesFarbe werden wie üblich bekannt gegeben. Die Methode vorwaerts muss aber neu defi- niert (eben überschrieben) werden. Daher der Zusatz override am Ende der Bekannt- gabe im implementation-Teil. Dies ist allerdings nur möglich, wenn in der Vorgängerklasse die Methode den Zusatz virtual(=überschreibbar) erhalten hat. (Siehe unten) |
type
TBuntTurtle = class(TTurtle)
protected
h_farbe : TColor;
public
procedure setzeFarbe (neueFarbe : TColor);
procedure vorwaerts (length:Real); override;
function liesFarbe : TColor;
end;
|
Die Methoden setzeFarbe und liesFarbe werden wie üblich deklariert. |
implementation procedure TBuntTurtle.setzeFarbe(neueFarbe:TColor); begin h_farbe := neueFarbe end; function TBuntTurtle.liesFarbe:TColor; begin result := h_farbe end; |
Hier darf der Zusatz override nicht mehr stehen. Nachdem die Stiftfarbe festgelegt wurde, soll eine Buntturtle den vorwaerts Befehl der Vorgängerklasse benutzen. Dies kennzeichnen wir durch den Vorsatz inherited (Deutsch: geerbt). Beachte, dass eine BuntTurtle hier auf die Eigenschaft k_Leinwand der Turtle zugreift. |
procedure TBuntTurtle.vorwaerts(length:Real); var alteFarbe : TColor; begin alteFarbe := k_Leinwand.pen.color; k_Leinwand.pen.color := h_farbe; inherited vorwaerts(length); k_Leinwand.pen.color := alteFarbe; end; end.(* of implementation *) |
In der Vorgängerklasse müssen einige kleine Änderungen im Interface-Teil vorgenommen werden. Sie werden im Folgenden erläutert:
Die Eigenschaften sind nun als protected deklariert. Das heißt, dass Nachfolge- klassen (aber nur diese !) auf diese Eigenschaften zugreifen können. Die Schutzklasse protected ist in Delphi extra für die Vererbung geschaffen worden und sollte daher auch genutzt werden! |
unit UTurtle;
interface
uses
Graphics;
type
TTurtle = class(TObject)
protected
h_xpos,h_ypos:Real;
h_winkel:Real;
h_gesenkt:Boolean;
k_Leinwand:TCanvas;
|
Die Methode vorwaerts soll überschreibbar sein und wird daher mit dem Zusatz virtual versehen. |
public
constructor createturtle(x_p,y_p,winkel_p : Real;
gesenkt_p : Boolean;
Leinwand_p : TCanvas);
procedure links (winkel : Real);
procedure rechts(winkel : Real);
procedure hoch;
procedure runter;
procedure vorwaerts (length:Real); virtual;
end;(* if type *)
|
| Zur
nächsten Seite |
| © 2000 LK 12 If und G. Kubitz | Hannah-Arendt-Gymnasium, Lengerich |