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

worte.projekt.de
von worte.projekt.de Mehr von diesem Publisher
30.10.2013 Aufrufe

144 10 Ein spezifisches Qualitätsmodell morphismus wird also gar nicht genutzt. Da von der Klasse auch keine Implementierung vererbt wird, ist sie also gänzlich überflüssig! Entkopplung durch Interfaces Ein Beispiel für die Entkopplung durch Interfaces (siehe auch Fowler, 2001b) findet sich im Entwurf von Gruppe 8. Dort gibt es zur zentralen Steuerung der Programmlogik eine Klasse ProcessHandler, die einige untergeordnete Kontrollklassen assoziiert (z. B. DataManager). Diese Klassen benötigen aber Zugriff auf die übergeordnete Kontrollklasse, wodurch ein (unerwünschter) Abhängigkeitszyklus entsteht. Dieser lässt sich aufbrechen, indem ein Interface ProcessManager eingeführt wird, das von ProcessHandler implementiert wird. Die untergeordneten Kontrollklassen assoziieren statt ProcessHandler das Interface ProcessManager (vgl. Abbildung 10-5). Abbildung 10-5: Entkopplung durch Interface bei Gruppe 8 Zusammenhalt Ein Beispiel für schlechten Zusammenhalt findet sich bei Gruppe 6. Dort gibt es eine God Class (Riel, 1996) namens Scheduler (vgl. Abbildung 10-6). Eine God Class ist ein typischer Anfängerfehler, nämlich die gesamte Funktion des Systems in einer Klasse zu konzentrieren oder zumindest von dort aus zu steuern. Dies läuft der objektorientierten Vorgehensweise, Funktion zu dezentralisieren, diametral entgegen. Die Klasse Scheduler verwaltet sowohl die Passwort-Informationen (aus Datei lesen, zugreifen, ändern, in Datei schreiben) als auch die Fahrplaninformation (aus Datei lesen, zugreifen, ändern, in Datei schreiben). Außerdem enthält die Klasse auch noch den Suchalgorithmus für die Verbindungssuche. Insgesamt kommt so die stolze Zahl von 35 Operationen zusammen (13 öffentlich, 22 privat). Dass hier unterschiedliche Aufgaben in einer Klasse realisiert werden, ist den Entwerfern auch selbst aufgefallen: Sie haben zwei Interfaces vorgesehen, die zur Trennung der Aufgaben nach außen dienen sollen und von der Klasse implementiert werden. Das Interface SearchFrameDataAdapter repräsentiert den Suchalgorithmus. Das Interface AdminDataAdapter allerdings steht für Passwort-Verwaltung und Fahrplandatenverwaltung, also sind auch hier bereits Aufgaben verquickt. Sofern über die Interfaces auf die Klasse zugegriffen wird, ist das Problem des geringen Zusammenhalts nach außen also etwas abgemildert. Besser wäre es allerdings gewesen, die Klasse Scheduler wirklich in drei verschiedene Klassen (oder mehr) aufzuspalten. Ändert sich nämlich bei einer der drei Aufgaben etwas, muss jedes Mal die

10.2 Anwendung des Qualitätsmodells 145 Abbildung 10-6: God Class bei Gruppe 6 Klasse geändert werden, was potentiell alle Benutzer der Klasse betreffen kann. Weil Scheduler quasi die gesamte Funktionalität des Programms realisiert oder steuert, sind das fast alle Klassen im System. 10.2.3 Modellvalidierung Zur Validierung des Modells wird die Bewertung der Wartbarkeit mit tatsächlichen Wartungsaufwänden der Implementierung verglichen, um die Vorhersagefähigkeit des Modells zu überprüfen. Idealerweise fällt der Wartungsaufwand um so niedriger aus, je besser die Bewertung der Wartbarkeit aufgrund des Entwurfs ist. Da es sich hier um studentische Projekte im Rahmen eines Praktikums handelt, sind die Implementierungen allerdings Wegwerfprodukte. Sie wurden nie gewartet, so dass keine Wartungsdaten vorliegen. Die Alternative, die zwölf Implementierungen durch andere Entwickler warten zu lassen, musste leider wegen des dafür notwendigen Aufwands verworfen werden. Stattdessen wird hier eine Plausibilitätsprüfung durchgeführt. Für die Entwürfe (und ihre Implementierungen) wird ermittelt, welche Klassen, Attribute und Operationen 1 geändert bzw. hinzugefügt werden müssen, um drei adaptive Wartungsaufgaben 1. Bei den geänderten Operationen werden nicht nur diejenigen mitgezählt, deren Signatur sich ändert, sondern auch die, bei denen die Implementierung (die Methode) geändert werden muss.

144 10 Ein spezifisches <strong>Qualität</strong>smodell<br />

morphismus wird also gar nicht genutzt. Da von <strong>der</strong> Klasse auch keine Implementierung<br />

vererbt wird, ist sie also gänzlich überflüssig!<br />

Entkopplung durch Interfaces<br />

Ein Beispiel für die Entkopplung durch Interfaces (siehe auch Fowler, 2001b) findet<br />

sich im Entwurf von Gruppe 8. Dort gibt es zur zentralen Steuerung <strong>der</strong> Programmlogik<br />

eine Klasse ProcessHandler, die einige untergeordnete Kontrollklassen assoziiert<br />

(z. B. DataManager). Diese Klassen benötigen aber Zugriff auf die übergeordnete Kontrollklasse,<br />

wodurch ein (unerwünschter) Abhängigkeitszyklus entsteht. Dieser lässt<br />

sich aufbrechen, indem ein Interface ProcessManager eingeführt wird, das von ProcessHandler<br />

implementiert wird. Die untergeordneten Kontrollklassen assoziieren<br />

statt ProcessHandler das Interface ProcessManager (vgl. Abbildung 10-5).<br />

Abbildung 10-5: Entkopplung durch Interface bei Gruppe 8<br />

Zusammenhalt<br />

Ein Beispiel für schlechten Zusammenhalt findet sich bei Gruppe 6. Dort gibt es eine<br />

God Class (Riel, 1996) namens Scheduler (vgl. Abbildung 10-6). Eine God Class ist ein<br />

typischer Anfängerfehler, nämlich die gesamte Funktion des Systems in einer Klasse<br />

zu konzentrieren o<strong>der</strong> zumindest von dort aus zu steuern. Dies läuft <strong>der</strong> objektorientierten<br />

Vorgehensweise, Funktion zu dezentralisieren, diametral entgegen.<br />

Die Klasse Scheduler verwaltet sowohl die Passwort-Informationen (aus Datei lesen,<br />

zugreifen, än<strong>der</strong>n, in Datei schreiben) als auch die Fahrplaninformation (aus Datei<br />

lesen, zugreifen, än<strong>der</strong>n, in Datei schreiben). Außerdem enthält die Klasse auch noch<br />

den Suchalgorithmus für die Verbindungssuche. Insgesamt kommt so die stolze Zahl<br />

von 35 Operationen zusammen (13 öffentlich, 22 privat).<br />

Dass hier unterschiedliche Aufgaben in einer Klasse realisiert werden, ist den Entwerfern<br />

auch selbst aufgefallen: Sie haben zwei Interfaces vorgesehen, die zur Trennung<br />

<strong>der</strong> Aufgaben nach außen dienen sollen und von <strong>der</strong> Klasse implementiert werden.<br />

Das Interface SearchFrameDataAdapter repräsentiert den Suchalgorithmus. Das Interface<br />

AdminDataAdapter allerdings steht für Passwort-Verwaltung und Fahrplandatenverwaltung,<br />

also sind auch hier bereits Aufgaben verquickt.<br />

Sofern über die Interfaces auf die Klasse zugegriffen wird, ist das Problem des geringen<br />

Zusammenhalts nach außen also etwas abgemil<strong>der</strong>t. Besser wäre es allerdings<br />

gewesen, die Klasse Scheduler wirklich in drei verschiedene Klassen (o<strong>der</strong> mehr) aufzuspalten.<br />

Än<strong>der</strong>t sich nämlich bei einer <strong>der</strong> drei Aufgaben etwas, muss jedes Mal die

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!