Als Grundregel gilt:
Jede Objektklasse ist in einer eigenen Unit zu deklarieren !! |
Als erstes hier der kommentierte Programmcode der Unit TTurtle:
UTurtle ist der Name der Unit. Unter diesem Namen wird sie auch abespeichert. |
unit UTurtle; |
Hier beginnt die Schnittstellenbescheibung. Es folgt die Angabe, worauf andere Units zugreifen können und worauf nicht. |
interface |
In der uses Liste wird angegeben, auf welche andere Units diese Unit zugreift. |
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; |
. TTurtle ist NachfolgeKlasse der Klasse TObject Grundsatz: Die inneren Zustände einer Klasse sind immer als private (oder als protected - siehe Vererbung in Delphi)zu deklarieren. private bedeutet, dass auf diese Eigenschaf- ten von anderen Units aus nicht zugegriffen werden kann. Unter public (öffentlich) werden diejenigen Prozeduren und Funktionen aufgeführt, welche andere Units benutzen können. Für die Vererbung wichtig ist die Schutzeigen- schaft protected. Als protected deklarierte innere Zustände können von Nachfolgeklassen genutzt werden, sind anderen Units aber nicht zugänglich 'end' bedeutet: Ende des Interface-Teils |
type TTurtle = class(TObject) private h_xpos,h_ypos:Real; h_winkel:Real; h_gesenkt:Boolean; k_Leinwand:TCanvas; 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); end; (* of Interface *) |
Hier beginnt die Erklärung, wie die Objekte ihre Aufträge erfüllen bzw wie sie ihre Anfragen beantworten. Man könnte auch sagen: Es folgen die Deklarationen der Prozeduren und Funktionen |
implementation |
Beim Erzeugen werden die inneren Zustände eines Turtleobjektes mit den in der Parameter- liste angegebenen Werten belegt. inherited (geerbt) bedeutet: Hier wird die create.Methode der Vorgängerklasse benutzt |
constructor TTurtle.createturtle (x_p,y_p,winkel_p : Real; gesenkt_p : Boolean; Leinwand_p : TCanvas); begin inherited create; h_xpos := x_p; h_ypos := y_p; h_winkel := winkel_p; h_gesenkt := gesenkt_p; k_Leinwand := Leinwand_p end; |
Es folgen nun die anderen Methoden. Auf ihre Realisierung wird hier nicht eingegangen, weil es hier nur um die Syntax (Schreibweise) und nicht um die konkrete Realisierung der Methoden geht. |
procedure TTurtle.links (winkel : Real); begin h_winkel := h_winkel + winkel end; procedure TTurtle.rechts(winkel : Real); begin h_winkel := h_winkel - winkel end; procedure TTurtle.hoch; begin h_gesenkt := false end; procedure TTurtle.runter; begin h_gesenkt := true end; procedure TTurtle.vorwaerts (length:Real); begin // ....siehe Download ... end; |
end. (* of implementation *) |
Nun der kommentierte Quellcode der Unit, welche das Formular verwaltet
- klar - |
unit UBaum; interface |
Wichtig: In der Uses-Liste muss der Name der Unit, in welcher die Klasse TTurtle definiert wird, aufgeführt werden. |
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, UTurtle; |
. . . . . . . . . Hier wird bekannt gegeben, dass das Formular ein Objekt der Klasse TTurtle besitzt |
type TFBaum = class(TForm) BtZeichne: TButton; Label1: TLabel; Label2: TLabel; EdStamm: TEdit; EdEbene: TEdit; procedure BtZeichneClick(Sender: TObject); private h_turtle : TTurtle; procedure baum (length:Real; Ebene:Integer); { Private-Deklarationen } public { Public-Deklarationen } end; var FBaum: TFBaum; implementation {$R *.DFM} |
Die Erteilung eines Auftrages erfolgt wie auch sonst üblich in der Form: Objektname.Methodenname (Parameterliste) |
procedure TFBaum.baum(length:Real; Ebene:Integer); begin if Ebene <= 1 then begin h_turtle.vorwaerts(length); h_turtle.vorwaerts(-length) end (* of then*) else //.... siehe Download .... end; (* of proc*) procedure TFBaum.BtZeichneClick(Sender: TObject); begin |
Der Auftrag zum Erzeugen eines Objektes benötigt eine besondere Syntax: neuesObjekt := Klassename.Methodenname (Parameterliste) |
h_turtle := TTurtle.createturtle(width DIV 2, height - 50, 90,true,self.Canvas); // TTurtle : Klassenname // createturtle : Name der Methode zum Erzeugen |
- klar - |
self.canvas.rectangle(0,50,width,height); baum(StrToInt(EdStamm.text), StrToInt(EdEbene.text)); end; end. |
![]() |
|
![]() |
|
![]() |
Zur
nächsten Seite
![]() |
© 2000 LK 12 If und G. Kubitz | Hannah-Arendt-Gymnasium, Lengerich |