Heim > Java > javaLernprogramm > Wann sollten Sie Getter und Setter in der objektorientierten Programmierung vermeiden?

Wann sollten Sie Getter und Setter in der objektorientierten Programmierung vermeiden?

Susan Sarandon
Freigeben: 2024-12-12 18:55:09
Original
856 Leute haben es durchsucht

When Should You Avoid Getters and Setters in Object-Oriented Programming?

Getter und Setter: Entwerfen mit Weisheit

In der Softwareentwicklung dienen Getter und Setter als Zugriffs- bzw. Modifikatoren privater Variablen. Obwohl sie für gute objektorientierte Programmierpraktiken unerlässlich sein können, gibt es Debatten über ihre potenziellen Designnachteile.

Eine häufige Kritik ist, dass Getter und Setter unnötige Kapselungsverletzungen verursachen und interne Variablen für Manipulationen offenlegen. Betrachten Sie den folgenden Codeausschnitt:

private int score;

public int getScore() { return score; }

public void setScore(int score) { this.score = score; }
Nach dem Login kopieren

Die Methode getScore() ermöglicht den direkten Zugriff auf die private Score-Variable, während setScore() die Zuweisung beliebiger Werte ermöglicht. Dies kann zu inkonsistenten oder ungültigen Zustandsänderungen führen, wie im folgenden Code dargestellt:

// Attempt to increment score by destroying an enemy
game.setScore(game.getScore() + ENEMY_DESTROYED_SCORE);
Nach dem Login kopieren

Dieser Ansatz ist fehleranfällig, wenn die Punktzahl nur erhöht werden kann, anstatt willkürlich festgelegt zu werden. Ein geeigneterer Entwurf wäre die Erstellung einer dedizierten Methode, die die Score-Inkrementierungsoperation kapselt:

public void addScore(int delta) { score += delta; }
Nach dem Login kopieren

Durch die Einschränkung des Setters und die Einführung einer alternativen Methode zur Score-Manipulation stellt dieser Entwurf die Datenkonsistenz sicher und verhindert ungültige Zustandsübergänge .

Darüber hinaus können Getter und Setter zu einer engen Kopplung zwischen Objekten führen. Betrachten Sie das folgende Beispiel, in dem der „Lebend“-Status eines Objekts durch Setter- und Getter-Methoden gesteuert wird:

private boolean alive = true;

public boolean isAlive() { return alive; }

public void setAlive(boolean alive) { this.alive = alive; }
Nach dem Login kopieren

Wenn sich die Implementierung dieser Logik in Zukunft ändert, bleiben die Getter- und Setter-Signaturen unverändert und werden beibehalten Kompatibilität. Dies kann jedoch dazu führen, dass die zugrunde liegende Datenstruktur (z. B. ein boolescher Wert, der den Status „lebendig“ darstellt) den Status des Objekts nicht mehr genau widerspiegelt.

Um diese Designprobleme auszuräumen, wird empfohlen, Methoden zu erstellen die gewünschte Aktionen direkt ausführen, anstatt sich ausschließlich auf Getter und Setter zu verlassen. Der „Lebend“-Status könnte beispielsweise über eine dedizierte Methode gehandhabt werden:

private int hp; // Hit points set in constructor

public boolean isAlive() { return hp > 0; } // Same method signature

public void kill() { hp = 0; } // Same method signature

public void damage(int damage) { hp -= damage; }
Nach dem Login kopieren

Dieser Ansatz kapselt die Logik zur Manipulation des Lebendstatus des Objekts und bietet eine klare und übersichtliche Schnittstelle für andere Objekte, um damit zu interagieren .

Zusammenfassend lässt sich sagen, dass Getter und Setter zwar in bestimmten Situationen nützlich sein können, es jedoch wichtig ist, sich ihrer potenziellen Designnachteile bewusst zu sein. Durch die Übernahme alternativer Entwurfsmuster, die Datenkonsistenz, Objektkapselung und lose Kopplung priorisieren, können Entwickler Software erstellen, die auf lange Sicht robuster und wartbarer ist.

Das obige ist der detaillierte Inhalt vonWann sollten Sie Getter und Setter in der objektorientierten Programmierung vermeiden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage