Grundsätzlich ist es möglich ohne globale Variablen auszukommen. Delphi selbst benutzt zwar auch globale Variable, aber auch diese könnte man vermeiden.
Zum Beispiel ist bei der
VCL-Programmierung das zuerst kreirte Form immer das MainForm. Dementsprechend könnte man nach
oop, Form2, Form3 als Public in Form1 deklarieren (und schon wären diese Globalen Weg). Dann gäbe es noch Form1. Wenn Borland die Objectorientierung bei Delphi aber zu 100% umsetzen würde wäre Form1 vermutlich im Public von TAppplicaiton. Und die Globale "Application" würde auch nicht wirklich benötigt werden weil es auch so ginge
TApplication.Create;
und beim Klick auf schließen könnte die Instanz von TApplication sich selbst zerstören
Delphi-Quellcode:
procedure TApplication.CloseClick;
begin
Self.Free;
end;
Leider (oder für manche zum Glück) hat Borland das nicht so umgesetzt. Jedoch ist es auch mit den aktuell in Umlauf befindlichen Delphis möglich das alle Globalen einfach Public-Variablen vom Mainform sind.
Zum Beispiel Pi etc.: Wer wirklich Objectorientiert arbeiten will kann auch solche Variablen ins Public des Mainforms packen.
Ohne Frage ist dies alles aber auch ein riesen Aufwand und für kleinere (Mini-)Projekte overkill. Wie schon mehrfach in dem Thread erwähnt sollte man deshalb abwägen wann man was verwendet.
Zur Ausgangsfrage: Keine(möglichst wenig) globalen Variablen weil:
- Ich habe ein Programm in dem sich ein Button befindet. Wenn dieser Button jetzt einen Darstellungsfehler hat finde ich den Fehler bedeutend schneller wenn ich weiß das sich dieser irgendwo innerhalb von "TKomischerButton" befindet. Würden jetzt aber alle funktionen innerhalb des Buttons auf globale Funktionen/Variablen zugreifen so müsste ich befürchten das ich mit der Beseitigung des Bugs im Button, Bugs in anderen Komponenten verursachen welche mit der falschen Globalen Variablen/Funktion richtig gearbeitet haben.
Auch Ableitungen von klassen sind nicht möglich/so einfach wenn ich keine Funktion überschreiben kann weil sie global ist...