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

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

54 5 Ein Referenzmodell für den objektorientierten Entwurf<br />

Relation zur Gesamtsumme hinzuzuzählen. Hier wird die Formalisierung am Beispiel<br />

von uses* gezeigt.<br />

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

Bei realizes* sollte das Gewicht immer maximal 1 sein, da faktisch eine Klasse ein<br />

Interface nicht mehrfach realisieren kann. Es kann höchstens eine bereits vorhandene<br />

Realisierung durch Redefinition <strong>der</strong> geerbten Realisierung geän<strong>der</strong>t werden. Ein<br />

Gewicht größer 1 dürfte immer auf einen Entwurfsfehler hinweisen.<br />

5.4.4 Überlegungen zu Templates<br />

Die Möglichkeit zur Bildung von parametrisierten Modellelementen ist in UML nicht<br />

auf Klassen beschränkt. Beispielsweise lassen sich Entwurfsmuster als parametrisierte<br />

Kollaborationen modellieren. Die hier betrachtete Erweiterung von ODEM<br />

beschränkt sich aber auf Template-Klassen, da diese den üblichen Gebrauch von Templates<br />

darstellen (z. B. in C++ o<strong>der</strong> Eiffel). Es werden auch nur vollständige Instantiierungen<br />

von Templates betrachtet; außerdem wird die Möglichkeit zur Default-Belegung<br />

von Parametern außer Acht gelassen.<br />

Im UML-Metamodell werden Templates durch eine Assoziation <strong>der</strong> Klasse ModelElement<br />

mit sich selbst modelliert (vgl. Abbildung 5-1). Ein ModelElement kann eine<br />

Menge von Template-Parametern haben (Rolle templateParameter). Hat ein ModelElement<br />

mindestens einen solchen Parameter, ist es ein Template, sonst nicht. Die Template-Parameter<br />

sind formale Parameter und dürfen keine innere Struktur (Attribute,<br />

Operationen, etc.) besitzen. Nur ihr Name und ihr Typ sind relevant. Die formalen<br />

Parameter können Klassen sein, aber auch Datentypen und Operationen sind möglich.<br />

Es können zusätzliche Einschränkungen für den Typ <strong>der</strong> Parameterbelegung<br />

gemacht werden (z. B. <strong>der</strong> Parameter muss ein Interface implementieren o<strong>der</strong> eine<br />

ganze Zahl sein). Außerdem können Beziehungen zwischen den Parametern untereinan<strong>der</strong><br />

und mit dem Template selbst formuliert werden (z. B. Aggregation, Vererbung<br />

etc.). Diese Beziehungen müssen dann auch bei den korrespondierenden Elementen<br />

<strong>der</strong> Parameterbelegungen vorhanden sein. Das Template selbst kann zu<br />

an<strong>der</strong>en Modellelementen nur ausgehende Beziehungen haben; diese werden auf die<br />

Instanzen übertragen.<br />

Eine Instantiierung eines Templates wird durch die Dependency-Unterklasse Binding<br />

modelliert. Diese verbindet über die von Dependency geerbten Assoziationen das<br />

Template (Rolle supplier) mit seiner Instanz (Rolle client). Die Parameterbelegung wird<br />

durch eine zusätzliche, geordnete Aggregation modelliert; die Rolle arguments enthält<br />

dabei die aktuellen Parameter.<br />

Template-Klassen selbst sind keine echten Klassen, aber ihre Instanzen sind es. Daher<br />

gehören Template-Instanzen zu C, Template-Klassen aber nicht. Für die Templates<br />

wird daher eine neue Menge T eingeführt. Formale Parameter von Templates müssen<br />

aussortiert werden, dürfen also keinesfalls zu C hinzugenommen werden.<br />

Auf <strong>der</strong> Basis von Binding kann nun eine weitere Relation binds eingeführt werden:<br />

binds: C × T<br />

Eine Klasse ist Instanz eines Templates. binds(c,t) gilt genau dann, wenn es eine<br />

Instanz von Binding gibt, bei <strong>der</strong> die Rollen client mit c und supplier mit t belegt sind.

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!