Das ist doch aber nichts Schlimmes. C++ bietet nun mal die Möglichkeit nicht alles objektorientiert zu lösen und in vielen Fällen ist das auch nicht ratsam. Globale Variablen können ja bekanntlich sogar die Kapselung in gewissen Situationen erhöhen und für viele Sachen ist es schlichtweg unnötig objektorientiert zu arbeiten. Der Logger ist ja das beste Beispiel.CodingCat hat geschrieben:Klar kannst du auch mit Singletons erfolgreich programmieren, du programmierst dann eben schlichtweg nicht objektorientiert. ;-)BeRsErKeR hat geschrieben:Ich persönlich nutze sehr viele Singletons in meinem Projekt, [...] sie erfüllen die Anforderungen, die ich habe und da ist mir scheißegal wozu sie mal entworfen wurden.
Das ist mir schon bewusst. Aber gerade weil auf vielen Seiten, in Foren und sogar in Büchern globale Variablen und Funktionen dermaßen niedergemacht wurden, wurde man schon vorsichtig. Ich glaube nicht, dass ich der einzige Mensch bin, der lange Zeit einen Bogen um globalen Kram in C++ gemacht hat. Ich hätte mir da eine sachliche Beleuchtung gewünscht, die z.B. auch herausstellt welche Vorteile globale Variablen haben können und das sie doch ihre Daseinsberechtigung haben. Und genauso wünsche ich mir halt auch eine objektive Betrachtung von Singletons (was außer Frage natürlich auch stellenweise vorhanden war). Das Pattern an sich finde ich nicht sinnlos oder falsch. Und wenn es jemand "schöner" findet eine globale Instanz in einer Klasse zu verpacken finde ich da nichts schlimm dran. Klar sollte derjenige dann schon wissen, dass es letztlich nur eine globale Instanz ist, aber ich weiß nicht ob alles, was nicht dem idealen Weg entspricht, gleich immer falsch sein muss. Es ist ein anderer Ansatz der vielleicht auch mehr Zeit beansprucht, aber als ob es nicht etliche solcher Dinge in der Programmierung gibt. Ich kam bislang super mit meinen Singletons zurecht und fand es sehr bequem sie zu nutzen. Für die Implementierung habe ich mich auch nicht tot gemacht. Ich will hier auch nicht für Singletons werben oder sagen, dass sie ganz toll sind. Aber genauso wenig möchte ich halt, dass es in die andere Richtung geht. Ihr müsst euch eigentlich auch gar nicht in irgendeiner Weise rechtfertigen, ich wollte einfach nur mal einwerfen, dass ich es begrüßen würde, wenn man etwas objektiver an die Sache geht. Und ganz wichtig, ich habe nicht jeden angesprochen der hier gepostet hat. Beim Rauslesen ist mir halt besonders dot aufgefallen. Da schwang mitunter ein recht negativer Ton mit, aber das ist halt auch der Nachteil an Medien wie Foren und Chats. Es fehlen Mimik, Gestik, Intonation usw. Da interpretiert man teilweise mehr rein, als eigentlich da ist.CodingCat hat geschrieben:Das hat prinzipiell gar nichts mit Objektorientierung zu tun, globale Variablen/Operationen/Objekte/Zustände haben mitunter folgende Nachteile: Unabsehbare Seiteneffekte, undurchsichtige Abhängigkeiten, geringere Flexibilität, geringe Wiederverwendbarkeit.BeRsErKeR hat geschrieben:Wenn ich mich von meinem letzten Floh, der mir in den Kopf gesetzt wurde, nämlich "alles globale in OO ist böse", erholt habe
Insbesondere die ersten beiden Punkte sind eine sehr ernste Sache: Wenn nicht klar ist, welche Variablen/Objekte/Zustände durch eine Operation verändert werden, wird es schwierig bis unmöglich, Annahmen über aktuelle Werte und Zustände zu machen, Invarianten zu erhalten sowie anderweitige effektive Konsistenzerhaltung zu betreiben.
Wenn nicht klar ist, welche Module/Operationen von welchen anderen Modulen/Operationen abhängen, ist es sehr leicht, in zyklische Abhängigkeiten zu verfallen, dies reicht von undefiniertem Verhalten mangels korrekter isolierter Initialisierbarkeit bis hin zu undurchschaubaren Endlosrekursionen bei der globalen Verteilung von Ereignissen.
Von daher. Nichts für ungut. Es war mir ein Bedürfnis das mal los zu werden. ;)