5 Objektorientiertes Design
5 Objektorientiertes Design
5 Objektorientiertes Design
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
84 3 <strong>Objektorientiertes</strong> <strong>Design</strong><br />
Um sicherzustellen, dass wirklich nur Rasterpunkte erreicht werden können, wird durch<br />
Aufruf der Methode snapToGrid(int) eine Modulo-Korrektur vorgenommen.<br />
In der Klasse GridPosition werden jedoch zwei öffentliche set()-Methoden<br />
angeboten, in denen keine Korrektur der Eingabewerte stattfindet. Rufen andere Klassen<br />
diese set()-Methoden statt der Business-Methoden auf, so können beliebige Werte für<br />
die Attribute x und y gesetzt werden. Diese liegen höchstwahrscheinlich nicht auf dem<br />
gewünschten Raster und stellen somit auch keinen gültigen Objektzustand dar.<br />
Tipp: Probleme durch öffentliche set()-Methoden<br />
Häufig findet man in der Praxis eine Vielzahl öffentlicher set()-Methoden, über<br />
die der Objektzustand auf unkontrollierte Weise geändert wird. Dadurch kann ein<br />
gültiger Objektzustand nicht mehr gewährleistet werden.<br />
Daher sollten set()-Methoden in ihrer Sichtbarkeit eingeschränkt oder – wie in diesem<br />
Beispiel leicht möglich – komplett entfernt werden. Zuvor kann die Funktionalität<br />
durch Business-Methoden bereitgestellt werden. Eine Anleitung dazu liefert das<br />
Refactoring ERSETZE MUTATOR- DURCH BUSINESS-METHODE in Abschnitt 13.2.4.<br />
In dieser Klasse wurden bereits Business-Methoden bereitgestellt, die set()-<br />
Methoden jedoch nicht entfernt.<br />
Weitere Komplexitäten durch Multithreading<br />
Methodenaufrufe werden im Bytecode nicht als Ganzes abgearbeitet, sondern in Form<br />
vieler kleiner Zwischenschritte. Dadurch kommt es immer zu Zwischenzuständen im<br />
Objektzustand. Abbildung 3-12 zeigt dies für den Aufruf addOffset(50, 30).<br />
Abbildung 3-12 Objektzustandsübergänge