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.
50 5 Ein Referenzmodell für den objektorientierten Entwurf<br />
• isAbstract: Boolean. Klassen können abstrakt (Wert true) o<strong>der</strong> konkret (Wert false)<br />
sein.<br />
• visibility: VisibilityKind. Bedeutung und Herleitung analog zu <strong>der</strong> bei den Paketen.<br />
Beziehungen<br />
• extends: C × C<br />
Eine Klasse erweitert eine Oberklasse, d. h. sie erbt von ihr. Eine Klasse kann beliebig<br />
viele Oberklassen erweitern, auch keine. Die Ableitung vom UML-Metamodell<br />
ist analog zur extends-Relation bei Interfaces.<br />
• realizes: C × I<br />
Eine Klasse realisiert ein Interface. Eine Klasse kann beliebig viele Interfaces realisieren,<br />
auch keine.<br />
Im UML-Metamodell steht die Klasse Abstraction, eine Unterklasse von Dependency,<br />
für diese Beziehung. realizes(k,i) gilt genau dann, wenn es eine Instanz a von<br />
Abstraction mit Stereotyp «realize» gibt, bei <strong>der</strong> die Rolle a.supplier mit i und die<br />
Rolle a.client mit k belegt ist.<br />
• has: C × O<br />
Eine Klasse besitzt eine Operation. Eine Klasse kann beliebig viele Operationen<br />
haben, auch keine. Geerbte Operationen zählen nicht mit. Die Ableitung vom<br />
UML-Metamodell ist analog zur has-Relation bei den Interfaces.<br />
• has: C × A<br />
Eine Klasse besitzt ein Attribut. Eine Klasse kann beliebig viele Attribute haben,<br />
auch keine. Geerbte Attribute zählen nicht mit. Die Ableitung vom UML-Metamodell<br />
ist analog zur obigen has-Relation, da Feature auch Oberklasse von Attribute<br />
ist.<br />
• associates: C × (C ∪ I)<br />
Eine Klasse kann mit einer Klasse (o<strong>der</strong> einem Interface) assoziiert sein (gerichtet<br />
durch Navigierbarkeit). Eine Klasse kann beliebig viele an<strong>der</strong>e Klassen assoziieren,<br />
auch keine. Eine Klasse kann sich auch selbst assoziieren. Geerbte Assoziationen<br />
zählen nicht mit.<br />
Im UML-Metamodell steht die Klasse Association für eine Assoziation. Association<br />
hat mindestens zwei AssociationEnds, in denen die Eigenschaften <strong>der</strong> Assoziation<br />
abgelegt sind (Navigierbarkeit: isNavigable, Art <strong>der</strong> Assoziation: aggregation). associates(k,l)<br />
gilt genau dann, wenn es eine Instanz a von Association gibt, die zwei<br />
Instanzen e1 und e2 von AssociationEnd hat, und wenn die Rolle e1.type mit k, die<br />
Rolle e2.type mit l belegt ist. Außerdem muss e2.isNavigable gelten, d. h. es muss<br />
möglich sein, von k nach l über die Assoziation zu navigieren.<br />
Das Attribut e1.aggregation gibt die Art <strong>der</strong> Assoziation an (none, aggregate, composite)<br />
und wird auf die Relation selbst übertragen. Auf diese Weise kann durch<br />
das Attribut aggregation <strong>der</strong> associates-Relation bei Bedarf zwischen normaler Assoziation,<br />
Aggregation und Komposition unterschieden werden. 2<br />
Sofern eine Association mehr als zwei AssociationEnds hat, wird sie in binäre Assoziationen<br />
zerlegt. Eine n-äre Assoziation kann so (je nach Navigierbarkeit <strong>der</strong> AssociationEnds)<br />
in bis zu n(n-1)/2 binäre Assoziationen zerlegt werden.