24.11.2013 Aufrufe

5 Objektorientiertes Design

5 Objektorientiertes Design

5 Objektorientiertes Design

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

82 3 <strong>Objektorientiertes</strong> <strong>Design</strong><br />

ge der erlaubten Zustände ist jedoch wesentlich geringer. Das gilt im Speziellen für<br />

dieses Beispiel und lässt sich auf viele Fälle in der Praxis übertragen.<br />

Die Klasse GridPosition bietet zwei Business-Methoden, die Objektverhalten<br />

beschreiben – dies sind addOffset(int, int) und setSamePos(int). Zur Demonstration<br />

von Inkonsistenzen im Objektzustand sind öffentliche set()-Methoden<br />

für die Attribute x und y definiert.<br />

public final class GridPosition<br />

{<br />

private static final int GRID_SIZE = 10;<br />

// Invariante: x,y liegen immer auf einem Raster der Größe 10<br />

private int x = 0;<br />

private int y = 0;<br />

GridPosition()<br />

{<br />

}<br />

public void addOffset(final int dx, final int dy)<br />

{<br />

// Vorbedingung: x, y auf einem beliebigen Rasterpunkt<br />

checkOnGrid(x,y);<br />

x += snapToGrid(dx);<br />

y += snapToGrid(dy);<br />

}<br />

// Nachbedingung: x + (dy \% 10), y + (dy % 10) auf einem Rasterpunkt<br />

checkOnGrid(x,y);<br />

public void setSamePos(final int pos)<br />

{<br />

// Vorbedingung: x, y auf einem beliebigen Rasterpunkt<br />

checkOnGrid(x,y);<br />

x = snapToGrid(pos);<br />

y = snapToGrid(pos);<br />

}<br />

// Nachbedingung: x = y = (pos % 10) auf einem Rasterpunkt<br />

checkOnGrid(x,y);<br />

private static void checkOnGrid(final int x, final int y)<br />

{<br />

if (x % GRID_SIZE != 0 || y % GRID_SIZE != 0)<br />

throw new IllegalStateException("invalid position, not on grid");<br />

}<br />

private int snapToGrid(final int value)<br />

{<br />

return value - value % GRID_SIZE;<br />

}<br />

public int getX() { return x; }<br />

public int getY() { return y; }<br />

}<br />

// Zur Demonstration von Problemen<br />

public void setX(final int x) { this.x = x; }<br />

public void setY(final int y) { this.y = y; }

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!