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