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
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