N
nwp2 schrieb:
Man kann versuchen alles so zu schreiben, dass man alle Variablen lokal hat und die immer nur per Parameter oder Returnwert übermittelt.
Klingt gut!
nwp2 schrieb:
Blöderweise sind das alles C++-Klassen, also muss das Objekt bekannt sein.
Ja, aber es muss nicht unbedingt global bekannt sein. Gibt es nur ein einziges Objekt der Klasse und braucht man das sehr oft (z.B. Logging)?
nwp2 schrieb:
Und wenn man die Variable in ein Objekt packt muss man ja das Objekt irgendwie global machen, damit hat man ja nichts gewonnen.
Da hast du völlig Recht, eine globale Variable innerhalb der Klasse ist im Normalfall nicht besser. Teilweise erhält man allerdings einen Vorteil durch die Kapselung. Oder man will eine einzige Instanz garantieren (Singleton).
In vielen Fällen kann man seine Klassenbeziehungen allerdings so strukturieren, dass es kaum noch globale Variablen gibt - wenn, dann sind diese nur innerhalb einer Übersetzungseinheit bekannt (diese Art der globalen Variablen halte ich für legitim). Dies erreicht man, indem man recht weit oben in der Hierarchie eine Klasse hat, die anderen Klassen Aufgaben erteilt. Um bestimmte Aufgaben zu erfüllen, erhalten diese anderen Klassen zusätzliche Parameter mit erforderlichen Informationen. So kann man einen Austausch zwischen mehreren Klassen realisieren und bleibt recht flexibel, weil die wichtigen Abläufe jeweils an einem Ort konzentriert sind und nicht wie bei globalen Variablen überall auftreten können. Dadurch reduzieren sich die Abhängigkeiten der einzelnen Programmteile, was wegen der gesenkten Komplexität die Kompilierzeit erhöhen kann und Fehler stark einschränkt.
Kurz: Meiner Meinung nach werden globale Variablen (über mehrere Module hinweg) sehr oft dort verwendet, wo sie nicht nötig wären. Es gibt sehr wenige Dinge, die "einfach so da" sind und nirgends eingeordnet werden können.