30.10.2013 Aufrufe

Bewertung der Qualität objektorientierter Entwürfe - Worte-Projekt

Bewertung der Qualität objektorientierter Entwürfe - Worte-Projekt

Bewertung der Qualität objektorientierter Entwürfe - Worte-Projekt

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

7.1 Ein Beispiel 75<br />

scheidung nach dem Geheimnisprinzip; Parnas, 1972b). Die zur Berechnung benötigte<br />

Leihdauer muss nun beim Aufruf als Parameter übergeben werden.<br />

Werden die genannten Verbesserungen an Entwurf A umgesetzt, entsteht Entwurf B<br />

(vgl. Abbildung 7-3 und Abbildung 7-4). Im Vergleich zu Entwurf A besteht zwischen<br />

den Klassen weniger Kopplung (Customer weiß nichts mehr von Movie). Die Kapselung<br />

von Movie und Rental wurde ebenfalls verbessert, so dass nun auch die drei get-<br />

Methoden, die von statement vorher benötigt wurden, entfallen können (getPriceCode,<br />

getDaysRented, getMovie). Die Berechnung des Rechnungsbetrags ist stärker dezentralisiert,<br />

so dass das Problem <strong>der</strong> „God Class“ (Riel, 1996), die den Entwurf dominiert<br />

und alle Funktionalität an sich zieht, vermieden wird. Auf <strong>der</strong> an<strong>der</strong>en Seite ist die<br />

Berechnung nun über drei Klassen „verschmiert“, so dass alle drei Klassen betrachtet<br />

werden müssen, um den Algorithmus nachvollziehen zu können. Bei Entwurf A<br />

genügte im Wesentlichen die Betrachtung <strong>der</strong> Klasse Customer.<br />

Abbildung 7-3: Klassendiagramm für Entwurf B<br />

Abbildung 7-4: Sequenzdiagramm für Entwurf B<br />

Zweite Stufe: State-Muster für Movie<br />

Entwurf C entsteht aus B durch die Anwendung des State-Musters (Gamma et al.,<br />

1995). Die Preisberechnung für einen Film wird in eine abstrakte Klasse Price ausgelagert.<br />

Zu Price gibt es für jeden Preiscode eine konkrete Unterklasse, die in <strong>der</strong><br />

Methode getCharge den spezifischen Preis berechnen kann (vgl. Abbildung 7-5). Die<br />

resultierende Kommunikation ist in Abbildung 7-6 dargestellt.<br />

Der Vorteil dieser Lösung ist, dass getCharge in Movie leichter zu implementieren ist,<br />

da die bisher explizit im Code zu formulierende Fallunterscheidung nach dem Preiscode<br />

jetzt durch dynamisches Binden erledigt wird. Die Lösung kann daher einfacher<br />

um neue Preiscodes erweitert werden. Außerdem ist die Preisberechnung für einzelne

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!