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

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

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

A.3 Entkopplung 195<br />

NEDC p (number of package-internal efferent dependencies of a class)<br />

NEDC p (c) = Σ p∈P: contains(p,c) Σ d∈C∪I: contains(p,d) depends_on*(c,d).weight<br />

Schließlich kann noch nach <strong>der</strong> Art <strong>der</strong> Beziehung verfeinert werden: Vererbung, Realisierung,<br />

Assoziation und Benutzung. Wegen <strong>der</strong> großen Bedeutung dieser Verfeinerung<br />

werden statt Indizes neue Akronyme verwendet.<br />

NEEC (number of efferent extends relationships of a class)<br />

NEEC(c) = Σd∈C∪I extends*(c,d).weight<br />

NERC (number of efferent realization relationships of a class)<br />

NERC(c) = Σ d∈C∪I realizes*(c,d).weight<br />

NEAC (number of efferent association relationships of a class)<br />

NEAC(c) = Σ d∈C∪I associates*(c,d).weight<br />

NEUC (number of efferent uses relationships of a class)<br />

NEUC(c) = Σ d∈C∪I uses*(c,d).weight<br />

NERC und NEAC sind für Interfaces immer 0. NEAC lässt sich noch anhand <strong>der</strong><br />

Assoziationsart (1 = normal, 2 = Aggregation und 3 = Komposition) verfeinern:<br />

NEAC1 (number of efferent normal association relationships of a class)<br />

NEAC1 (c) = Σd∈C∪I\{c}: associates*(c,d).aggregation = none associates*(c,d).weight<br />

NEAC2 (number of efferent aggregation relationships of a class)<br />

NEAC2 (c) = Σd∈C∪I\{c}: associates*(c,d).aggregation = aggregate associates*(c,d).weight<br />

NEAC3 (number of efferent composition relationships of a class)<br />

NEAC3 (c) = Σd∈C∪I\{c}: associates*(c,d).aggregation = composite associates*(c,d).weight<br />

Alle genannten Verfeinerungen lassen sich miteinan<strong>der</strong> kombinieren, was in diesem<br />

Fall eine sehr hohe Zahl von Kombinationsmöglichkeiten mit sich bringt.<br />

Bisher wurden nur von <strong>der</strong> Klasse ausgehende (efferente) Beziehungen betrachtet. Es<br />

können aber auch die zur Klasse hingehenden (afferenten) Beziehungen gezählt werden:<br />

NADC (number of afferent dependencies of a class)<br />

NADC(c) = Σd∈C∪I depends_on*(d,c).weight<br />

Diese Metrik gibt Hinweise auf Klassen, <strong>der</strong>en Än<strong>der</strong>ung weit reichende Konsequenzen<br />

auf den Rest des Entwurfs hat: je höher, desto kritischer. Auf die Wartbarkeit <strong>der</strong><br />

Klasse selbst hat das zwar keinen großen Einfluss, die Metrik sollte aber zumindest<br />

bei <strong>der</strong> Gesamtbetrachtung des Systems berücksichtigt werden. Alle Verfeinerungen<br />

<strong>der</strong> efferenten Abhängigkeiten lassen sich auch auf die afferenten Abhängigkeiten<br />

anwenden.<br />

Paket<br />

Bei Paketen gibt es bis auf die contains-Relation keine direkten Abhängigkeitsrelationen.<br />

Für die Kopplung ist die contains-Relation allerdings nicht relevant. Die Abhängigkeiten<br />

<strong>der</strong> Pakete sind daher aus den Abhängigkeiten <strong>der</strong> enthaltenen Klassen<br />

abzuleiten: Wenn eine enthaltene Klasse c eines Pakets p von einer Klasse d in einem<br />

an<strong>der</strong>en Paket q abhängt, so hängt das Paket p von q ab (vgl. Definition von<br />

depends_on für Pakete in Abschnitt 5.4.1). Die Kopplungsstärke ergibt sich dabei aus

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!