Einzelnen Beitrag anzeigen

Der_Unwissende

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

Re: Durch Klick auf Button eine Integervariable erhöhen

  Alt 28. Jan 2006, 15:34
Hi,
die Idee in der OOP ist es halt gerade, dass du keine globalen Variablen kennst. Es gibt nur noch Objekte, die interagieren. Ein Objekt kann bestimmte Eigenschaften anderer Objekte sehen (auf/abrufen). Das ist auch alles was du brauchst um ein sauberes Programm zu erstellen. Wenn du echte OOP hättest, würde es nichts ausser Objekten geben (die zur Laufzeit existieren, Klassen und Interfaces zur Designzeit).
Soetwas wie eine Unit übergreifende Variable braucht man halt in der Regel einfach nicht. Wenn du die Variable i (solltest du lieber sinnvoller benennen) nur aus dem Formular TDeineHauptform heraus verändert wird (durch Knopfdruck hochzählen), dann braucht kein anderer dieses i zu sehen. Also kannst du i einfach als private in deiner Hauptform deklarieren. Willst du den Wert von i in einer anderen Klasse abfragen, brauchst du nur eine Funktion die dir den Wert zurückgibt (das ganze kannst du natürlich auch als Eigenschaft kapseln). Dann hast du etwas wie

Delphi-Quellcode:
type
  TDeineHauptform = class(TForm)
  ....
  ....
  private
    FAnzahlButtonClicks : Integer;
  public
    property AnzahlClicks : Integer read FAnzahlButtonClicks;
  end;
Und der Aufruf aus einem anderen Objekt würde dann einfach die Eigenschaft AnzahlClicks aus der Instanz von TDeineHauptForm abfragen :
Delphi-Quellcode:
begin
  ShowMessage(IntToStr(DeineHauptForm1.AnzahlClicks));
end;
Wie du siehst, ist die Variable i (AnzahlClicks) von aussen nur lesbar. Damit kann die Variable nur noch von TDeineHauptForm direkt geschrieben werden. Da sie (soweit es deinen Beschreibungen zu entnehmen war) auch nur in dieser Klasse verändert wird, ist es sauberer in OOP.
Globale Variablen brauchst du damit nicht mehr (sieht man mal von statischen Variablen ab). Es ist einfach eine andere Herangehensweise, die durchaus ihren Sinn hat. Du wirst kaum ein Problem finden (ich behaupte einfach mal gar keins), dass du nicht auch ohne globale Variablen lösen könntest. Umgekehrt gilt das gleiche, kannst auch jedes OO Programm in Imperative Programmierung umwandeln, über Sinn und Unsinn lässt sich da streiten.
Details zu Pro und Contra findest du auch in der DP viele, einfach mal Suchen. Aber ganz schlecht ist es wie SirThornberry schon sagte Programmierparadigmen zu vermischen.

Sorry auch hier an SirThorberry, dass ich eine an ihn gerichtete Frage beantwortet habe (oder auch nicht beantwortet)

Gruß Der Unwissende
  Mit Zitat antworten Zitat