Delphi-PRAXiS
Seite 3 von 9     123 45     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Globale Variablen - warum in der DP so verpönt? (https://www.delphipraxis.net/45538-globale-variablen-warum-der-dp-so-verpoent.html)

Pseudemys Nelsoni 9. Mai 2005 06:24

Re: Globale Variablen - warum in der DP so verpönt?
 
jo Robert, klar ist Form1 eine globale Variable, aber das kann man wohl kaum ändern.
Ausserdem wäre damit sichergestellt, das man eben nur mit expliziter Angabe von Form1. auf die Variable zugreifen kann. (Ausserhalb der Klasse)

Delphi_Fanatic 9. Mai 2005 06:50

Re: Globale Variablen - warum in der DP so verpönt?
 
Natürlich machen globale Variablen Sinn !

Wenn eine Variable "Unit-übergreifend" benötigt wird und an jeder Stelle des Programms zu jederzeit
verfügbar sein soll - dann muss diese Variable einfach global sein.

Und dann erreicht man mit irgendwelchem Spielkram wie dem hier :

Zitat:

Die richtige Lösung? Ganz einfach: Ein Objekt, welches die 'globalen' Werte zur Verfügung stellt. Zu holen als Singleton über eine Object-Factory
... auch keinen wirklich spürbaren Vorteil.

Objektorientierte Programmierung in allen Ehren, aber bitte dort, wo es auch wirklich Sinn macht und spürbare Vorteile
bringt.

Und normalerweise treten dann auch keine ...

Zitat:

Namensverwirrung (...) versehentlicher falscher Zugriff (...)
... auf, denn es liegt in "der Natur der Sache", dass solche globalen Variablen in der Regel eben auch eine eindeutige
und unverwechelbare Bedeutung haben.

Aber natürlich sollte man eben keine Laufvariablen oder irgendwelche Zählvariablen oder Ähnliches global definieren.

SirThornberry 9. Mai 2005 07:49

Re: Globale Variablen - warum in der DP so verpönt?
 
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
Delphi-Quellcode:
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...

Phoenix 9. Mai 2005 07:56

Re: Globale Variablen - warum in der DP so verpönt?
 
Zitat:

Zitat von SirThornberry
Zum Beispiel Pi etc.: Wer wirklich Objectorientiert arbeiten will kann auch solche Variablen ins Public des Mainforms packen.

Eine Variable hat hier den grossen Vorteil das man das leicht anpassen kann, sollte sich der Wert von Pi mal ändern :lol:

Nee, jetzt mal ehrlich: Pi ist eine Konstante, und die darf natürlich global in einer Unit deklariert sein. Ich packe alle Konstanten immer in entsprechende Units und wo ich die Konstanten brauche nehm ich die Unit zur Hand.

Aber mir fällt ganz ehrlich kein einziges Beispiel ein, wo es korrekt wäre eine globale Variable herzunehmen. Und ich bin da schon eine ganze Weile am grübeln. Nichts was mir einfällt ist eine globale Variable. Die ganzen Werte haben irgendwie immer einen Zusammenhang und gehören von daher in ein Objekt.

Zur Implementierung von Singletons: Ich lege solche Objekte immer in unitlokalen Variablen ab. Daher kann ich die auch im finalization-Teil aufräumen wenn das Programm beendet wird und notfalls sogar im initialization bereits erzeugen wenn sie immer da sein müssen. Im Normalfall werden die Objekte aber erst beim ersten Zugriff erzeugt.

SirThornberry 9. Mai 2005 07:59

Re: Globale Variablen - warum in der DP so verpönt?
 
Ich weiß, pi war ein schlechtes Beispiel, ich meinte eigentlich den Fall mit der Gravitation (was hier in dem Thread irgendwo erwähnt war), nur wusste ich leider nicht wie man das schreibt und habs auch nicht mehr gefunden. Aber: Pi ist zwar eine konstante aber wenn man wöllte könnte man diese Trotzdem im MainForm oder in "TConstants" deklarieren und dort im Create staatich zuweisen. (wobei ich bei Konstanten die Globalisierung noch einsehe)

marabu 9. Mai 2005 08:30

Re: Globale Variablen - warum in der DP so verpönt?
 
Der weitgehende Verzicht auf globale Variablen alleine erhöht kaum die Qualität eines Programms. Die Eliminierung von globalen Variablen, die gar keine sind, ist das Ziel - getreu dem Grundsatz des information hiding. Wer dabei über das Ziel hinaus schießt, der liegt auch daneben. Gäbe es keine globalen Variablen, dann müsste man sie erfinden.

Wer mit Delphi qualitativ hochwertige Programme erstellen will, der kommt um das Studium einschlägiger Fachliteratur nicht herum. Alleine das Kapitel "Sichtbarkeit von Variablen in prozeduralen Sprachen mit Blockkonzept" - dazu zählen alle Pascal Dialekte, aber auch Ada - verschafft wertvolles Grundlagenwissen und erübrigt manchen unfreiwillig komischen Beitrag - was aber manchmal auch wieder schade wäre.

Keiner muss sich einem Hochschulstudium der Informatik unterziehen, nicht einmal ein FH-Studium ist notwendig, um vernünftige Programme zu schreiben. Wer aber - als Gegner oder Befürworter von globalen Variablen - auch nach etlicher Zeit glaubt Maximal-Forderungen durchsetzen zu können, der braucht dringend Hilfe.

Grüße vom marabu

alzaimar 9. Mai 2005 08:42

Re: Globale Variablen - warum in der DP so verpönt?
 
Was DU als 'Unit Globals' implementiert hast, ist ja nichts anderes als ein Datenmodul. Nur eben als Unit. Die ganze Diskussion pro/contra OOP ist sowieso irgendwann überflüssig, weil ja OOP nichts anderes als eine andere Sichtweise ein und derselben Geschichte ist.

Ob ich nun eine Methode "foo.bar (huhu)" habe, oder eine Prozedur "foo (bar, huu)" ist ein und das Selbe. Aber mit OOP (und dieser Verberbungsgeschichte) bekomme ich Struktur in meine Anwendung und werde gezwungen, semantisch zusammenhängende Abläufe und die Elementaroperationen auf den Daten auch in eine Unit/Klasse zu schreiben.

So gesehen, ist C das Grauen, Pascal mit dem Unit-Konzept schon besser, Modula noch ein wenig restriktiver, Delphi schon ganz brauchbar, und C#/Java total OOP-lastig. Wie weit man sich an C (C steht für Chaos, he he) oder Java gebunden fühlt, ist eine Glaubensfrage.

Ich persönlich finde, dsa Delphi einen gesunden Mittelweg beschreitet, weil es den Spagat von Chaos zu OOP schafft, und mir trotzdem meine Freiräume lässt. Alles eine Frage des Glaubens.

Was man aber unabhängig von seinem Glauben machen sollte, ist anständigen, rechtschaffenen (ja ja und vaterlandsliebenden, regierungstreuen, chrr..chrr..) Code zu schreiben, der jedem Review standhält. Wenn man so diszipliniert ist, bekommt man auch ASM-Code mit globalen Variablen so hin, das er noch nach 10 Jahren lesbar ist. Alles eine Frage des Könnens.

Na denn. Nobody is perfect.

@Marabu: Dein Beitrag kam gerade eben, aber trifft ins Schwarze!

SubData 9. Mai 2005 11:24

Re: Globale Variablen - warum in der DP so verpönt?
 
In einer meiner Anwendungen wird zur Startzeit eine Pfad-Angabe aus einer INI eingelesen, die dann zur kompletten Laufzeit immer wieder für Datenbankverbindung verwendet wird.

Und jetzt hätte ich gerne ein gutes Argument, warum ich das nich mit ner globalen Variable machen soll :mrgreen:

Steve 9. Mai 2005 11:47

Re: Globale Variablen - warum in der DP so verpönt?
 
Hi,

bei mir kommen die Einstellungen, die ich aus den INIs les, in ne eigene Klasse, welche die Variablen hält. Die Klasse kümmert sich auch ums speichern, laden usw.
Auf ein solches Objekt und dessen Eigenschaften kann ich auch von überall zugreifen :)
Aber wie hier nun schon x-mal erwähnt: kommt auf den Einzelfall an.

Gruß
Stephan :dance:

SubData 9. Mai 2005 11:52

Re: Globale Variablen - warum in der DP so verpönt?
 
Joa....

Hab nämlich irgendwie keine Lust für gerade mal 2 Nur-Lesen Variablen auch noch Klasse anzulegen ...
Die Variablen werden wärend der Laufzeit noch nichmal geändert -g-


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:48 Uhr.
Seite 3 von 9     123 45     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz