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.

5.4 Erweiterungen 53<br />

5.4.2 Erweiterte Relationen<br />

Bisher wurden die Relationen associates, has und uses definiert, ohne Vererbung zu<br />

berücksichtigen. Faktisch ist es aber so, dass nicht nur Eigenschaften, son<strong>der</strong>n auch<br />

Beziehungen vererbt werden. Daher ist es sinnvoll, weitere Relationen einzuführen,<br />

die auch vererbte Beziehungen umfassen. Zunächst wird eine Relation extends* benötigt,<br />

welche die transitive Hülle von extends darstellt.<br />

extends*(x,y) ⇔ extends(x,y) ∨∃z∈C∪I: (extends*(x,z) ∧ extends(z,y))<br />

Nun können die erwähnten erweiterten Relationen definiert werden, die auch geerbte<br />

Beziehungen berücksichtigen. Die Definition wird hier am Beispiel von uses* gezeigt<br />

(associates*, depends_on* und has* sind analog definiert 3 ). Man beachte, dass es sich<br />

hier nicht um die transitive Hülle handelt, weil extends* verwendet wird.<br />

uses*(x,y) ⇔ uses(x,y) ∨∃z∈C∪I: (extends*(x,z) ∧ uses(z,y))<br />

Zum Schluss wird noch die erweiterte Version contains* eingeführt, welche die transitive<br />

Hülle von contains ist.<br />

contains*(x,y) ⇔ contains(x,y) ∨∃z∈C∪I: (contains*(x,z) ∧ contains(z,y))<br />

Wegen <strong>der</strong> hierarchischen Strukturierung gilt contains*(S,x) für alle Elemente x von<br />

P∪C∪I mit Ausnahme von S.<br />

5.4.3 Gewichte für die Relationen<br />

Die bisher definierten Relationen berücksichtigen nicht, wie viele Beziehungen einer<br />

Art zwischen zwei Modellelementen bestehen. Es könnte allerdings einen Unterschied<br />

machen, ob eine Klasse eine o<strong>der</strong> mehrere Beziehungen einer Art mit einer<br />

an<strong>der</strong>en Klasse hat. Deshalb wird für jede Relation ein Attribut namens weight eingeführt.<br />

Der Wert von weight ist für die Relationen contains, extends und realizes immer<br />

gleich 1. Bei <strong>der</strong> associates- und <strong>der</strong> uses-Relation ist es möglich, dass eine Beziehung<br />

mehrfach besteht. Dann ist <strong>der</strong> Wert von weight die Anzahl dieser Beziehungen. Der<br />

Wert von weight bei <strong>der</strong> depends_on-Relation ergibt sich als Summe <strong>der</strong> Werte von<br />

weight bei den berücksichtigten Relationen (für das Gewicht nicht vorhandener Relationen<br />

wird <strong>der</strong> Wert 0 angenommen).<br />

depends_on(x,y).weight = extends(x,y).weight + realizes(x,y).weight + associates(x,y).weight<br />

+ uses(x,y).weight<br />

Für die *-Relationen bleibt bei contains* <strong>der</strong> Wert von weight bei 1. Bei extends* entspricht<br />

<strong>der</strong> Wert von weight <strong>der</strong> Anzahl <strong>der</strong> Pfade, über die eine Klasse von einer<br />

an<strong>der</strong>en erbt.<br />

extends*(x,y).weight = extends(x,y).weight + Σz∈C∪I: extends(x,z) extends*(z,y).weight<br />

Bei den Relationen associates*, realizes*, uses* und depends_on* muss zur Berechnung<br />

des Gewichts die Vererbungshierarchie des ersten Modellelements nach oben hin<br />

durchsucht werden: Für jede Beziehung <strong>der</strong> gesuchten Art zwischen <strong>der</strong> Klasse selbst<br />

o<strong>der</strong> einer ihrer Oberklassen mit <strong>der</strong> an<strong>der</strong>en Klasse ist <strong>der</strong> Wert von weight dieser<br />

3. Bei associates* ist noch das Attribut aggregation zu beachten. Dieses wird mit <strong>der</strong> stärksten Assoziationsart<br />

<strong>der</strong> beteiligten Assoziationen belegt (wie bei associates, vgl. Abschnitt 5.3.4).

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!