Einzelnen Beitrag anzeigen

Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#3

Re: Grundsätzliche Frage zu Klassen/ objektorientierter Prog

  Alt 6. Mär 2007, 10:57
Hi,
erstmal vorweg, dein Problem hat so noch nicht viel mit der Objekt Orientierten Programmierung zu tun. Die OOP ist ein Konzept, das weit über das verwenden von Klassen hinaus geht. Eindeutig ein Thema für sich. Die Kernpunkte liegen deutlicher in der Möglichen Abstraktion und Kapselung. Das alles führt dazu, dass Du im Idealfall immer austauschbare Konstrukte bekommst, die zudem leicht wiederverwendet werden können. Das ist aber wie gesagt ein ganz eigenes Thema (einfach mal nach OOP suchen und/oder Bücher und Tutorials bemühen).

Was dein Problem angeht, so kannst Du es am einfachsten über die Eigenschaften (Properties) einer Klasse regeln. Ein Property ist eine Eigenschaft, auf die wie auf eine Variable zugegriffen werden kann. Die eigentlichen Lese- bzw. Schreibzugriffe finden jedoch nicht direkt statt, vielmehr kannst Du diese an eine Methode delegieren (der direkte Zugriff auf eine Variable ist natürlich auch möglich).

Delphi-Quellcode:
type
  TClass = class(TObject)
    private
      FVariable1: TTyp;
      FVariable2: TTyp;
    protected
      procedure setVar1(const Value: TTyp);
      function getVar1: TTyp;
    public
      // hier die eigentlichen Eigenschaften
      property Variable1: TTyp read getVar1 write setVar1;
      property Variable2: TTyp read FVariable2;
  end;
In diesem einfachen Beispiel siehst Du den Aufbau. Mit dem Schlüsselwort property zeigst Du an, dass es sich hier um eine Eigenschaft handelt. Es folgt der Name und Typ (wie bei einer Variable auch). Danach kannst Du nun Lese- und/oder Schreibzugriffe delegieren. Für die erste Eigenschaft werden dabei zwei Methoden bemüht. Wird der Wert von Variable1 gelesen, dann wird eigentlich die Methode getVar1 aufgerufen. Was in der gemacht wird ist egal, wichtig ist nur, dass die ein TTyp zurückgeben muss. Beim schreiben wird analog setVar1 aufgerufen, ohne dass man das von außen sieht.
Variable2 hingegen kann nur gelesen werden (write wurde weggelassen). Zudem greift sie direkt auf den Wert von FVariable2 zu. Du kannst das auch beliebig kombinieren (Lesen und Schreiben können direkt auf eine Variable zugreifen).

Von außen verhalten die sich wie normale Variablen:
Delphi-Quellcode:
var instanz: TClass;
begin
  instanz := TClass.Create;
  instanz.Variable1 := XYZ; // würde jetzt setVar1(XYZ) aufrufen
  blubb := instanz.Variable2; // liest direkt den Wert FVariable2

  // NICHT MÖGLICH:
  blubb := instanz.FVariable2; // Da Variable privat
  instanz.Variable2 := XYZ; // da kein write für Variable2 existier
Gruß Der Unwissende

[Roter Kasten]
Ja, da ich nichts anderes geschrieben habe, aber etwas ausführlicher lasse ich es mal als Ergänzung stehen
[/Roter Kasten]
  Mit Zitat antworten Zitat