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.
56 5 Ein Referenzmodell für den objektorientierten Entwurf<br />
(1994) mit Hilfe von ODEM formalisiert (soweit möglich). Die formalen Definitionen<br />
verwenden zum Teil Metriken aus QOOD (vgl. Tabelle 9-1).<br />
Fallstudie 1: Martins Paketmetriken<br />
Martin definiert Kriterien für die richtige Verteilung von Klassen auf Pakete. Diese<br />
Kriterien basieren auf dem Begriff <strong>der</strong> Abhängigkeit. Ziel ist die Minimierung von<br />
Abhängigkeiten, insbeson<strong>der</strong>e Abhängigkeiten zu konkreten Klassen. Lei<strong>der</strong> definiert<br />
Martin nicht genau, was eigentlich eine Abhängigkeit ist. Es sagt nur, dass Abhängigkeiten<br />
durch Klassenbeziehungen wie Vererbung, Aggregation und Benutzung entstehen.<br />
Hier wird für die Formalisierung die depends_on-Relation verwendet, welche<br />
die genannten Beispiele einschließt.<br />
Relational cohesion (H). Diese Metrik soll den Zusammenhalt von Klassen innerhalb<br />
eines Pakets erfassen. Weil die Klassen innerhalb eines Pakets eng verwandt sein<br />
sollen, soll <strong>der</strong> Zusammenhalt hoch sein. H ist definiert als (R+1)/N, wobei R die<br />
Anzahl <strong>der</strong> Beziehungen zwischen Klassen innerhalb des Pakets ist und N die Anzahl<br />
<strong>der</strong> Klassen. Die folgende Definition zählt gegenseitige Abhängigkeiten zweimal, je<br />
einmal für jede Richtung. Die Zahl <strong>der</strong> Interfaces (Metrik NIP) wird zur Zahl <strong>der</strong><br />
Klassen (Metrik NCP) hinzugezählt.<br />
H(p) = ((Σ c∈C∪I: contains(p,c) Σ d∈C∪I\{c}: contains(p,d)<br />
depends_on(c,d).weight) + 1) / (NCP(p) + NIP(p))<br />
Afferent Coupling (Ca ). Die Anzahl <strong>der</strong> Klassen aus an<strong>der</strong>en Paketen, die von den<br />
Klassen im Paket abhängen. Die afferente Kopplung soll niedrig sein.<br />
Ca (p) = |{d∈C∪I: ¬contains(p,d) ∧ (∃c∈C∪I: contains(p,c) ∧ depends_on(d,c))}|<br />
Efferent Coupling (Ce ). Die Anzahl <strong>der</strong> Klassen aus an<strong>der</strong>en Paketen, von denen<br />
Klassen im Paket abhängen. Die efferente Kopplung soll niedrig sein.<br />
Ce (p) = |{d∈C∪I: ¬contains(p,d) ∧ (∃c∈C∪I: contains(p,c) ∧ depends_on(c,d))}|<br />
Abstractness (A). Die Abstraktheit eines Pakets ist definiert als das Verhältnis von<br />
abstrakten Klassen (Metrik NCPa ) zu <strong>der</strong> Gesamtzahl <strong>der</strong> Klassen. Martin erwähnt<br />
keine Interfaces; sie werden hier zu den abstrakten Klassen dazugezählt. Der Spezialfall<br />
eines Pakets ohne Klassen (von Martin nicht erwähnt) soll eine Abstraktheit von 1<br />
haben. Solche leeren Pakete sind sinnvoll für die Strukturierung an<strong>der</strong>er Pakete.<br />
A(p) = if NCP(p) + NIP(p) > 0 then (NCPa (p) + NIP(p)) / (NCP(p) + NIP(p)) else 1<br />
Instability (I). Die Instabilität eines Pakets ist definiert als das Verhältnis efferenter<br />
Kopplung zur gesamten Kopplung. Der Spezialfall eines Pakets ohne Kopplung nach<br />
außen (von Martin nicht erwähnt) soll eine Instabilität von 0 haben.<br />
I(p) = if Ca (p) + Ce (p) > 0 then Ce (p) / (Ca (p) + Ce (p)) else 0<br />
Distance from the Main Sequence (D). Die Hauptlinie (main sequence) ist Teil<br />
einer Theorie von Martin, dass die Abstraktheit A und die Instabilität I eines Pakets<br />
ungefähr gleich sein sollten, d. h. reine Abstraktionen sollten sehr stabil sein, während<br />
sich konkrete Implementierungen än<strong>der</strong>n dürfen. Je weiter ein Paket von <strong>der</strong><br />
Hauptlinie, ausgedrückt durch die Gleichung A + I = 1, entfernt ist, desto schlechter.<br />
Es gibt auch eine normalisierte Variante D', die im Intervall [0,1] liegt.