programmieren in Delphi am Beispiel der konkreten Klasse Auto Auto -Baujahr -Typ -Besitzer -Farbe -Kilometerstand -Fahren() -Bremsen() Objekt1: Auto Typ: Golf Baujahr: 1998 Besitzer: Peter Farbe: rot Kilometerstand: 12 Die Klasse wird definiert mit dem eindeutigen Namen, hier Auto. Die Eigenschaften der Klasse werden benannt, dabei gibt es statische Eigenschaften (Zustand), die sich nicht ändern und dynamische Eigenschaften (Verhalten), die sich ändern können. Unter dem Zustand versteht man Attribute, wie besitzer, typ, farbe, kilometerstand. Der Klasse Auto können nun Instanzen angehören. Attributwerte eines Objektes können sich ändern, z.b. besitzer, farbe Der Zustand nicht. baujahr, typ Bei der Methode fahren() erhöht sich der Kilometerstand. Anwendung in Delphi Zunächst erfolgt die Deklaration der Klasse: type TAuto = class private FFarbe: string; FBaujahr, Fkm:integer; procedure SetFarbe(Farbe: string); procedure Setkm(km:integer); public property Farbe: string read FFarbe write SetFarbe; property km: integer read Fkm write Setkm; //Änderbar: km Form1: TForm1; Meinauto :TAuto; sfarbe: set of (rot,blau,gelb,gruen); definition Welche Attribute und welchen Zustand hat das Objekt Definition der Methoden (procedure) //Änderbar: Farbe, auch hier ist die Methode: SetFarbe() nötig Deklaration der Variablen Hier sind nur die genannten Farben möglich. Seite 1
function faerben(x:string):integer ; if x='rot' then result:=clred; if x='blau' then result:=clblue; if x='grün' then result:=cllime; if x='gelb' then result:=clyellow; function ffaerben(x:string):string; with meinauto do if farbe='rot' then result:='blau'; if farbe='blau' then result:='grün'; if farbe='grün' then result:='gelb'; if farbe='gelb' then result:='rot'; procedure TAuto.SetFarbe(Farbe: string); if (farbe='rot') or (farbe='blau') or (farbe='gruen') then FFarbe:=Farbe; procedure Tauto.Setkm(km: integer); Fkm:=km; form1.kms.caption:=inttostr(km); procedure TForm1.Button1Click(Sender: TObject); showmessage(meinauto.farbe); procedure TForm1.Farbe_neuClick(Sender: TObject); Im folgenden werden alle Methoden definiert, SetFarbe() weist dem Auto die Farbe zu SetKm erhöht den Kilometerstand MeinAuto.FFarbe:=ffaerben(MeinAuto.Farbe); Kms.Color:=faerben(MeinAuto.Farbe); procedure TForm1.BJClick(Sender: TObject); showmessage(inttostr(meinauto.fbaujahr)); procedure TForm1.FahrenClick(Sender: TObject); Fahrtimer.enabled:=true; procedure TForm1.StopClick(Sender: TObject); Fahrtimer.Enabled:=false; procedure TForm1.FahrtimerTimer(Sender: TObject); meinauto.km:=meinauto.km+1; procedure TForm1.Zeige_kmClick(Sender: TObject); showmessage(inttostr(meinauto.fkm)); Seite 2
Im Hauptprogramm wird das Auto erzeugt. MeinAuto:=TAuto.Create; MeinAuto.FFarbe:='rot'; MeinAuto.FBaujahr:=1980; MeinAuto.SetFarbe('rot'); MeinAuto.Farbe:='rot'; MeinAuto.Fkm:= 0; end. Es fehlt hier bei den Eigenschaften der Besitzer. Weisen Sie dem Objekt Auto noch einen Besitzer zu. Sie finden das Programm unter Class_Auto. Seite 3
Im zweiten Beispiel werden zehn Autos erzeugt: Ordner: 2 Daher die veränderten Deklarationen: Form1: TForm1; Meinauto :array [1..10] of TAuto; sfarbe: set of (rot,blau,gelb,gruen); i,n:integer; for i:=1 to 10 do MeinAuto[i]:=TAuto.Create; MeinAuto[i].FFarbe:='rot'; MeinAuto[i].FBaujahr:=1980+i; MeinAuto[i].SetFarbe('rot'); MeinAuto[i].Farbe:='rot'; MeinAuto[i].Fkm:= 0; end. Erläutern Sie, wie die zehn Autos erzeugt werden. Welches Baujahr haben die Autos? Im dritten Beispiel werden die Autos auch über das Verlassen des Programms hinweg erhalten, in dem die Autoliste in einer Textdatei abgespeichert werden. (Klasseen3) procedure TForm1.Neues_AutoClick(Sender: TObject); Auto_Nr:=Auto_Nr+1; MeinAuto[Auto_Nr]:=TAuto.Create; Hier werden die Autos erzeugt. MeinAuto[Auto_Nr].FFarbe:='rot'; MeinAuto[Auto_Nr].FBaujahr:=1980+i; MeinAuto[Auto_Nr].SetFarbe('rot'); MeinAuto[Auto_Nr].Farbe:='rot'; MeinAuto[Auto_Nr].Fkm:= 0; trackbar1.max:=auto_nr; procedure TForm1.Auto_ListeClick(Sender: TObject); AutoListe.clear; for i:=1 to Auto_Nr do A:=meinauto[i].Farbe+','+inttostr(meinauto[i].fkm)+','; AutoListe.items.add(a); Hier werden die Daten aus den Autos zur späteren Verwendung gelesen. Seite 4
procedure TForm1.Speichere_AutosClick(Sender: TObject); F: TextFile; s :string; Hier wird die Autoliste auf Festplatte gespeichert. AssignFile(F, 'autos.txt'); Rewrite(F); for i:=0 to autoliste.count-1 do Writeln(F,autoliste.items[i] ); // showmessage(autoliste.items[i]); CloseFile(F); procedure TForm1.Hole_AutolisteClick(Sender: TObject); s :string; F: TextFile; Hier wird die Autoliste von HD geholt. autoliste.clear; {$i-} AssignFile(F, 'auto.txt'); { File selected in dialog } Reset(F); repeat Readln(F, S); autoliste.items.add(s); until eof(f); CloseFile(F); {$i+} if fileexists('auto.txt')=false then showmessage('die Datei existiert nicht'); procedure TForm1.Baue_AutosClick(Sender: TObject); {Aufgabe: Es sollen hier Autos, in den Farben rot, gelb, blau und grün mit beliebigem Baujahr erzeugt werden. Die Daten werden dabei aus der Datei Autos.txt geholt. Die alten Autos sollen dabei überschrieben werden. Existieren mehr alte als neue Autos, sollen die überzähligen gelöscht werden. } Noch nicht implementiert. Hier kann manversuchen, selbst neue Autos zu bauen mit der Wunschfarbe aus den vier vorhandenen usw. for i:=1 to 3 do MeinAuto[i]:=TAuto.Create; MeinAuto[i].FFarbe:='rot'; MeinAuto[i].FBaujahr:=1980+i; MeinAuto[i].SetFarbe('rot'); MeinAuto[i].Farbe:='rot'; MeinAuto[i].Fkm:= 0; Auto_Nr:=i-1; Hier wird sozusagen der Autostamm erzeugt. Seite 5
end. Seite 6