5 Objektorientiertes Design
5 Objektorientiertes Design
5 Objektorientiertes Design
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
88 3 <strong>Objektorientiertes</strong> <strong>Design</strong><br />
public void changeImageData(final int width, final int height,<br />
final byte[] imageData)<br />
{<br />
this.width = width;<br />
this.height = height;<br />
this.imageData = imageData;<br />
}<br />
public String getName()<br />
{<br />
return this.name;<br />
}<br />
}<br />
// weitere get()-Methoden ...<br />
Die genannten Änderungen machen die Klasse besser lesbar. Wichtiger ist aber, dass<br />
die Abhängigkeiten der Attribute untereinander nun deutlich zu erkennen sind und<br />
nur durch eine Methode in der öffentlichen Schnittstelle beschrieben werden. Diese<br />
Business-Methode ist auch die richtige Stelle, um Änderungen an mögliche Beobachter<br />
zu kommunizieren.<br />
Betrachten wir, wie sich das neue API der Klasse SimpleImage im Einsatz auswirkt.<br />
Statt der direkten set()-Aufrufe erfolgt zunächst eine Zwischenspeicherung<br />
in lokalen Variablen. Erst nachdem alle Daten erfolgreich eingelesen werden konnten,<br />
wird eine Objektkonstruktion ausgeführt. Die Anmeldung des Beobachters ist nun<br />
problemlos – es werden nur gültige Zwischenzustände nach außen sichtbar. Selbst die<br />
fehlende Behandlung eines Parsing-Fehlers hat bei dieser Art der Realisierung deutlich<br />
weniger negative Auswirkungen. Es wird dann einfach kein Objekt erzeugt. Folgendes<br />
Listing zeigt das neue API im Einsatz:<br />
public SimpleImage createSimpleImageFromFile() throws IOException<br />
{<br />
final String imageName = readNameFromFile();<br />
try<br />
{<br />
final int imageWidth = readWidthFromFile();<br />
final int imageHeight = readHeightFromFile();<br />
final String imageData = readImageDataFromFile();<br />
final SimpleImage simpleImage = new SimpleImage(imageName, imageWidth,<br />
imageHeight, imageData.getBytes());<br />
registerObserver(simpleImage);<br />
return simpleImage;<br />
}<br />
catch(final NumberFormatException ex)<br />
{<br />
log.error("failed to create SimpleImage object from file", ex);<br />
}<br />
}<br />
return null;