Hallo Peter,
du stellst die Frage natürlich allgemein, aber hierfür gibt es keine allgemeine Antwort.
Die Frage ist hier erstmal: Was ist der Zweck dieses Zählers? Wer braucht diesen Zähler, wer fragt ihn ab, was hängt davon ab, was passiert, wenn bestimmte Zählerstände erreicht werden und so weiter.
BEISPIELSWEISE könnte es ein Objekt geben, das diesen Zähler verwaltet und auch auf Zählerstände reagiert. Und eine Referenz auf dieses Objekt injizierst Du in myClass.
Wie dieses Objekt heißt und wie die Methode heißt, die den Zählerstand erhöht, ist stark kontextabhängig. Ich schreibe hier mal JavaScript, keine Ahnung, ob Du für JS fragst oder generell.
class CounterManager {
static #zähler = 0;
static count() { this.#zähler++; }
static get value() { return this.#zähler; }
}
class myClass() {
#counter;
constructor(y, counter) {
this.counter = counter;
this.y = y;
}
doCounting() {
this.#counter.count();
}
}
let foo = new myClass(17, CounterManager);
Vielleicht verwaltet der CounterManager auch mehrere benannte Zähler und löst eine Aktion aus, wenn ihre Summe einen bestimmten Wert überschreitet? Sowas könnte man darin dann unterbringen. CounterManager kann dann ein falscher Name sein. Kennst Du das Spiel "Can't Stop"? Ein Counter Manager könnte zählen, welche Spielfigur wie weit ist und registrieren, dass ein Spieler seine drei Figuren oben und damit gewonnen hat.
BEISPIELSWEISE könnte der Zähler aber auch eine statische Eigenschaft von myClass sein, und wer sich für den Zähler interessiert, fragt dort nach.
class myClass() {
static #counter = 0;
static get counter() { return this.#counter; }
constructor(y) {
this.y = y;
}
doCounting() {
myClass.#counter++;
}
}
let foo = new myClass(17);
foo.doCounting();
console.log(myClass.counter);
Es kommt halt darauf an, wo dieser Zähler logisch hingehört. Aber eins ist klar: Wenn dieses "zählen" sich in irgendeiner Form fachlich darstellen lässt, dann ist "doCounting" oder "count" der falsche Methodenname, dann gehört die Fachlichkeit in den Methodennamen. Das könnte "registerCollision()" sein oder "countFailedDebit" - wie es denn passt.
Eine einfache globale Variable ist deswegen natürlich nicht verboten. Aber in einem objektorientierten Design hat sie ziemlich sicher irgendeine fachliche Zugehörigkeit und kann dann entweder statische Eigenschaft einer Klasse sein oder vielleicht auch normale Eigenschaft eines Singleton-Objekts (also eins, das es nur einmal gibt und mit dem Hinz und Kunz redet. Manchmal auch "Container für globales Zeugs" genannt...)
Rolf
--
sumpsi - posui - obstruxi