LKG/Inf 11 2011/Klassen

Aus ProgrammingWiki

Wiki-Quelltext dieser Seite.

<language>Pascal</language>
'''Bsp:''' Auto hat Eigenschaften (Farbe, Geschwindigkeit...) und Methoden (starten, beschleunigen, bremsen...)

[[Bild:Mschubert_Grafik_oop_uml_tauto.png]]

<code id="512f34eddeded">type TAuto=class // im Type-Teil
  // Datenfelder
  farbe: string;
  geschwindigkeit: integer;
  tankfuellung: integer; // in ml
  maxTankvolumen: integer;
  // Konstruktor
  constructor create(nFarbe:string,nTankfuellung:integer, nMaxTankVol:integer);
  // Methodenköpfe
  function getGeschwindigkeit:integer;
  procedure setGeschwindigkeit(nGeschwindigkeit:integer);
  function getFarbe:string;
  function getTankfuellung:integer;
  procedure Tanken(nTankMenge:integer);
end;</code>

=== Konstruktor und Destruktor ===
beim Konstruktor werden zB Datenfelder belegt
der Desktruktor gibt beim Löschen Speicher wieder frei

Um eine ''Instanz zu erzeugen'', muss man zunächst das Objekt (die Variable) deklarieren...
<code id="512f34eddee5e">var ferrari2:TAuto;</code>

...und im implement-Teil den Konstruktor aufrufen:
<code id="512f34eddef25">ferrari2:=TAuto.create('rot', 5000, 40000);</code>
TAuto.create muss natürlich vorher definiert werden (siehe unten).

Allgemein:
-> <code id="512f34eddef8a">Objekt := Klasse.create();</code>

'''Destruktor:'''
<code id="512f34eddefe9">ferrari2.free;</code>




Die Methoden (und der Konstruktor) sind nun noch nicht definiert:
<code id="512f35689a733">implement // im Implement-Teil
constructor TAuto.create(nFarbe:string,nTankfuellung:integer,nMaxTankVol:integer)
  begin
    farbe:=nFarbe; // banal
    tankfuellung:=nTankfuellung;
    maxTankvolumen:=nMaxTankVol;
  end;</code>

Methode Tanken:
<code id="512f35689a7a9">procedure TAuto.Tanken(TankMenge: Integer);
  begin
    if maxTankvolumen <= tankfuellung + TankMenge then
      tankfuellung := tankfuellung + TankMenge
    else
      tankfuellung := maxTankvolumen;
  end;
...</code>