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 |