Ich verstehe zwar nicht was an globalen Variablen so "Böse" ist, aber egal... Mein alter Programmierlehrer hat immer gesagt, globale Variablen seinen einfach nur unschön. In Foren habe gelesen, dass globale Variablen "unangenehme Nebenwirkungen" haben könnten. Aber ich glaube das steht auf einem anderen Blatt.
Das ist alles genau das Gleiche. Das unschöne / böse an globalen Variablen ist, dass sie Fehler durch Seiteneffekte provozieren.
Durch das Verpacken in eine Klasse (Singletone) kann man das besser kontrollieren, die Gefahr von Seiteneffekten besteht aber weiterhin.
Wenn man den Gedanken der Seiteneffektfreiheit weiter verfolgt, kommt man irgendwann bei einer funktionalen Programmiersprache an. Was in anderen Programmiersprachen gute Praxis ist, wurde dort sprachlich geregelt.
IMHO sollte jeder mal den funktionale Programmierstiel angesehen/praktiziert haben.
Ganz kommt man um die globalen Objekte aber auch nicht herum. Ein typisches Beispiel sind die Standard-Ein-/Ausgabe-Streams für die Konsole. Die gibt es halt nur einmal.