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
142 10 Ein spezifisches Qualitätsmodell 10.2.2 Bemerkungen zu den Entwürfen Vererbung Bei den Entwürfen fällt auf, dass Vererbung kaum verwendet wird. Das deckt sich auch mit Beobachtungen von Cartwright (1998) aus studentischen Projekten. Wenn Vererbung verwendet wurde, beschränkt sie sich auf eine Stufe. Anhand positiver und negativer Beispiele wird die Nutzung der Vererbung in den Entwürfen illustriert. Gruppe 8 verwendet das Strategy-Muster (Gamma et al., 1995), um den Algorithmus zur Verbindungssuche je nach Optimierungsziel zu parametrisieren. Dazu dient die abstrakte Klasse Optimization mit ihren drei Unterklassen, welche die verschiedenen Optimierungsziele repräsentieren (vgl. Abbildung 10-2). Wichtigste Operation ist dabei getWeight, welche die Bewertung einer Verbindung gemäß dem Optimierungsziel liefert. Die Unterklassen implementieren die Operation aus der Oberklasse mit der korrekten Bewertungsmethode. Abbildung 10-2: Strategy-Muster bei Gruppe 8 Eine Alternative dazu ist die Verwendung des Template-Method-Musters (Gamma et al., 1995), wie sie Gruppe 4 vorgenommen hat. Die Bewertung wird der Verbindung selbst zugeordnet. Die abstrakte Klasse Connection besitzt eine Operation getDistance, welche die Bewertung liefert. Diese wird von den konkreten Unterklassen je nach Optimierungsziel implementiert (vgl. Abbildung 10-3). Die Operation processNode (implementiert in Connection) verwendet dann getDistance bei der Verbindungssuche. Gruppe 12 hingegen benutzt Vererbung eher problematisch. Von einer Klasse TwoDigitNumber, die eine zweistellige Zahl repräsentiert, werden zwei Unterklassen Hour und Minute abgeleitet, ohne dabei Erweiterungen oder Redefinitionen vorzunehmen (vgl. Abbildung 10-4, linke Seite). Das deutet darauf hin, dass die Klassen (abgesehen vielleicht von einem semantischen Unterschied durch den Namen) überflüssig sind. Hour und Minute sind eigentlich Instanzen (und keine Spezialisierungen) von TwoDigitNumber und sollten daher nicht als Klassen modelliert werden. Der Fragebogen zur Strukturiertheit (vgl. Abschnitt B.2) enthält eine entsprechende Frage, die das Problem aufdeckt.
10.2 Anwendung des Qualitätsmodells 143 Abbildung 10-3: Template-Method-Muster bei Gruppe 4 Abbildung 10-4: Fragwürdige Vererbung bei Gruppe 12 Ein weiteres Beispiel für fragwürdige Vererbung stammt von derselben Gruppe (vgl. Abbildung 10-4, rechte Seite). Von einer abstrakten Klasse GenericTrip, die für allgemeine Verbindungen steht, werden drei konkrete Unterklassen abgeleitet: TripBlock (ein Abschnitt einer Verbindung), Trip (eine vollständige Verbindung) und Trips (eine Menge von Verbindungen). Alle implementieren die Operationen der Oberklasse und fügen weitere Operationen hinzu. Außerdem gibt es Aggregationsbeziehungen: Trips aggregiert Trip, Trip wiederum TripBlock. Betrachtet man die Vererbungsbeziehungen, kann man nur bei Trip von einer Spezialisierung sprechen. Fasst man GenericTrip als Interface auf, kann man auch noch begründen, warum TripBlock dieses Interface implementiert, da auch Verbindungsabschnitte die Attribute einer Verbindung im Sinne von GenericTrip aufweisen. Problematisch wird es allerdings bei Trips, weil dort selbst das Interface nicht passt. Was ist denn z. B. die Startzeit einer Menge von Verbindungen? Ein Blick in die Implementierung verrät, dass immer der Wert für die erste Verbindung in der Verbindungsmenge zurückgegeben wird, doch das scheint eher willkürlich – genauso gut könnte das Minimum oder der Durchschnitt zurückgegeben werden. Eine Spezialisierungsbeziehung zwischen Trips und GenericTrip liegt jedenfalls nicht vor. Übrigens kann auch dieses Problem durch eine entsprechende Frage im Fragebogen zur Entkopplung (vgl. Abschnitt B.3) aufgedeckt werden. In der Implementierung zeigt sich, dass GenericTrip nie als Typ (z. B. einer Variablen oder eines Parameters) verwendet wird. Der durch die Vererbung ermöglichte Poly-
- Seite 101 und 102: 7.4 Beispiele für OOD-Qualitätsmo
- Seite 103 und 104: 7.4 Beispiele für OOD-Qualitätsmo
- Seite 105 und 106: 7.4 Beispiele für OOD-Qualitätsmo
- Seite 107 und 108: 7.6 Entwurfsbewertung 97 7.5.2 Kons
- Seite 109 und 110: 7.6 Entwurfsbewertung 99 Evaluation
- Seite 111 und 112: Kapitel 8 Das allgemeine Qualitäts
- Seite 113 und 114: 8.1 Vorüberlegungen 103 8.1.4 Indi
- Seite 115 und 116: 8.3 Wartbarkeit 105 unabhängige Mo
- Seite 117 und 118: 8.3 Wartbarkeit 107 auswirkt (höhe
- Seite 119 und 120: 8.3 Wartbarkeit 109 Diskussion Für
- Seite 121 und 122: 8.3 Wartbarkeit 111 Diskussion Zusa
- Seite 123 und 124: 8.5 Wiederverwendbarkeit 113 derver
- Seite 125 und 126: 8.7 Testbarkeit 115 kann. Technisch
- Seite 127 und 128: Kapitel 9 Quantifizierung des Quali
- Seite 129 und 130: 9.1 Bewertungsverfahren 119 Bewertu
- Seite 131 und 132: 9.2 Objektive Metriken 121 Akronym
- Seite 133 und 134: 9.2 Objektive Metriken 123 Paket NC
- Seite 135 und 136: 9.3 Subjektive Metriken 125 Gewicht
- Seite 137 und 138: 9.4 Fragebögen 127 9.4 Fragebögen
- Seite 139 und 140: 9.4 Fragebögen 129 auch Fragen, f
- Seite 141 und 142: 9.5 Gesamtbewertung 131 der Gewicht
- Seite 143 und 144: 9.6 Ableitung spezifischer Modelle
- Seite 145 und 146: Kapitel 10 Ein spezifisches Qualit
- Seite 147 und 148: 10.1 Ableitung des Qualitätsmodell
- Seite 149 und 150: 10.1 Ableitung des Qualitätsmodell
- Seite 151: 10.2 Anwendung des Qualitätsmodell
- Seite 155 und 156: 10.2 Anwendung des Qualitätsmodell
- Seite 157 und 158: 10.2 Anwendung des Qualitätsmodell
- Seite 159 und 160: 10.3 Besonderheiten bei Mustern 149
- Seite 161 und 162: Kapitel 11 Werkzeugunterstützung H
- Seite 163 und 164: 11.1 Werkzeuge aus anderen Arbeiten
- Seite 165 und 166: 11.2 Selbst realisierte Werkzeuge 1
- Seite 167 und 168: 11.2 Selbst realisierte Werkzeuge 1
- Seite 169 und 170: 11.3 Ausblick: Ein ideales Werkzeug
- Seite 171 und 172: Kapitel 12 Zusammenfassung und Ausb
- Seite 173 und 174: 12.2 Bewertung des Ansatzes 163 Die
- Seite 175 und 176: 12.3 Vergleich mit anderen Arbeiten
- Seite 177 und 178: 12.4 Ausblick 167 Entwerfen QOOD ka
- Seite 179 und 180: Literatur Abowd et al. (1996) Abowd
- Seite 181 und 182: Beyer et al. (2000) Beyer, D.; Lewe
- Seite 183 und 184: Cavano, McCall (1978) Cavano, J.; M
- Seite 185 und 186: Dißmann (1990) Dißmann, S.: Anfor
- Seite 187 und 188: Gursaran, Roy (2002) Gursaran; Roy,
- Seite 189 und 190: Koenig (1995) Koenig, A.: Patterns
- Seite 191 und 192: McCabe (1976) McCabe, T.: A Complex
- Seite 193 und 194: Rising (2000) Rising, L.: The Patte
- Seite 195 und 196: Wand (1989) Wand, Y.: A Proposal fo
- Seite 197 und 198: Akronyme Allgemeine Akronyme CMM Ca
- Seite 199 und 200: Anhang A Metriken für QOOD Dieser
- Seite 201 und 202: A.1 Knappheit 191 Ihre Verwaltung m
10.2 Anwendung des <strong>Qualität</strong>smodells 143<br />
Abbildung 10-3: Template-Method-Muster bei Gruppe 4<br />
Abbildung 10-4: Fragwürdige Vererbung bei Gruppe 12<br />
Ein weiteres Beispiel für fragwürdige Vererbung stammt von <strong>der</strong>selben Gruppe (vgl.<br />
Abbildung 10-4, rechte Seite). Von einer abstrakten Klasse GenericTrip, die für allgemeine<br />
Verbindungen steht, werden drei konkrete Unterklassen abgeleitet: TripBlock<br />
(ein Abschnitt einer Verbindung), Trip (eine vollständige Verbindung) und Trips (eine<br />
Menge von Verbindungen). Alle implementieren die Operationen <strong>der</strong> Oberklasse und<br />
fügen weitere Operationen hinzu. Außerdem gibt es Aggregationsbeziehungen: Trips<br />
aggregiert Trip, Trip wie<strong>der</strong>um TripBlock.<br />
Betrachtet man die Vererbungsbeziehungen, kann man nur bei Trip von einer Spezialisierung<br />
sprechen. Fasst man GenericTrip als Interface auf, kann man auch noch<br />
begründen, warum TripBlock dieses Interface implementiert, da auch Verbindungsabschnitte<br />
die Attribute einer Verbindung im Sinne von GenericTrip aufweisen. Problematisch<br />
wird es allerdings bei Trips, weil dort selbst das Interface nicht passt. Was ist<br />
denn z. B. die Startzeit einer Menge von Verbindungen? Ein Blick in die Implementierung<br />
verrät, dass immer <strong>der</strong> Wert für die erste Verbindung in <strong>der</strong> Verbindungsmenge<br />
zurückgegeben wird, doch das scheint eher willkürlich – genauso gut könnte das<br />
Minimum o<strong>der</strong> <strong>der</strong> Durchschnitt zurückgegeben werden. Eine Spezialisierungsbeziehung<br />
zwischen Trips und GenericTrip liegt jedenfalls nicht vor. Übrigens kann auch<br />
dieses Problem durch eine entsprechende Frage im Fragebogen zur Entkopplung (vgl.<br />
Abschnitt B.3) aufgedeckt werden.<br />
In <strong>der</strong> Implementierung zeigt sich, dass GenericTrip nie als Typ (z. B. einer Variablen<br />
o<strong>der</strong> eines Parameters) verwendet wird. Der durch die Vererbung ermöglichte Poly-