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

worte.projekt.de
von worte.projekt.de Mehr von diesem Publisher
30.10.2013 Aufrufe

108 8 Das allgemeine Qualitätsmodell Diskussion Knappheit verbessert die Verständlichkeit eines Entwurfs. Außerdem ist er wegen des geringeren Umfangs leichter zu dokumentieren und schneller zu implementieren. Schließlich entsteht auch weniger Code, der getestet und gewartet werden muss. Durch einen geringeren Umfang nimmt auch der Aufwand für Prüfung und Überarbeitung des Entwurfs ab. Allerdings führt sehr hohe Knappheit (z. B. nur sehr wenige, dafür umfangreiche Klassen) zu einer geringeren Verständlichkeit, da dann Dinge zusammengefasst werden, die eigentlich nichts miteinander zu tun haben (führt zu einem geringen Zusammenhalt). Im Extremfall besteht das System aus einer einzigen Klasse System mit einer einzigen Methode run, in der sämtliche Funktionalität implementiert ist – für die Wartung wohl der schlimmste Fall. Die Knappheit steht in Konkurrenz zu Entkopplung und Zusammenhalt. Beispielsweise kann man zur Entkopplung zweier Komponenten eine weitere Komponente einführen, wie das beim Mediator (vgl. Gamma et al., 1995) der Fall ist. Damit verringert sich zwar die Kopplung, aber die Anzahl der Klassen steigt. In der anderen Richtung kann man zwar die Zahl der Klassen verringern, indem man einige miteinander verschmilzt, man erhält dadurch aber meistens Klassen mit sehr geringem Zusammenhalt. Ein guter Entwurf sucht also nach der richtigen Balance zwischen Knappheit auf der einen Seite, Entkopplung und Zusammenhalt auf der anderen Seite. Reduktion, also eine Vereinfachung ohne Verlust an anderen Qualitäten, ist immer erstrebenswert; häufig führt sie auch zu mehr Eleganz. Allerdings ist die Reduktion oft teuer, da sie viel Kreativität und Arbeit erfordert. Mies van der Rohes Wahlspruch „So einfach wie möglich, koste es was es wolle“ ist daher nur dann sinnvoll, wenn die Kosten keine Rolle spielen. Andernfalls ist absolute Knappheit unwirtschaftlich. Die Vermeidung von Redundanz ist ein spezieller Aspekt der Knappheit. Redundanzfreiheit ist besonders wichtig für die Wartbarkeit, da bei vorhandener Redundanz (z. B. durch Copy-and-Paste-Programming, Brown et al., 1998) immer alle Kopien geändert werden müssen (Burd, Munro, 1997). Dazu müssen diese Kopien erst einmal gefunden und dann konsistent geändert werden. Das ist viel fehleranfälliger, als wenn die Änderung auf eine Stelle beschränkt wäre. 8.3.2 Strukturiertheit The only problems we can really solve in a satisfactory manner are those that finally admit a nicely factored solution. (Dijkstra, 1972) Definition Die Strukturiertheit ist hoch, wenn die Struktur des Entwurfs von einem Menschen leicht überblickt und erfasst werden kann. Laut Melton et al. (1990) sind die psychologische (d. h. die wahrgenommene) Komplexität und die strukturelle Komplexität nicht dasselbe, da bei der psychologischen Komplexität der Leser eine wesentliche Rolle spielt, d. h. sie ist individuell verschieden. Die strukturelle Komplexität ist allerdings ein guter Indikator für die psychologische Komplexität.

8.3 Wartbarkeit 109 Diskussion Für den Menschen scheinen hierarchische Strukturen besonders verständlich zu sein (Simon, 1962). Hierarchische Strukturen erlauben den Umgang mit einer großen Anzahl von Teilen, weil zu einem Zeitpunkt immer nur ein Ausschnitt betrachtet werden muss. Durch die Hierarchie besteht die Möglichkeit zur Abstraktion (z. B. die Bildung von Schichten), da Verfeinerungen bei Bedarf ausgeblendet werden können. Parnas (1974) stellt fest, dass man bei dem Begriff hierarchisch aufpassen muss, da es verschiedene Hierarchien gibt. In der Objektorientierung gibt es z. B. bei den Paketen eine hierarchische Struktur durch Schachtelung, bei den Klassen durch Vererbung. Hierarchien sind zyklenfrei, daher ist die Vermeidung von Zyklen ein wichtiges Ziel. Weitere Kriterien für die Strukturiertheit einer Hierarchie sind ihre Tiefe und der Verzweigungsgrad innerhalb der Hierarchie. 8.3.3 Entkopplung […] the best programs are designed in terms of loosely coupled functions that each does a simple task. (Kernighan, Plauger, 1974) If one intends to build quality models of OO design, coupling will very likely be an important structural dimension to consider. (Briand et al., 1998, S. 30) Definition Kopplung (coupling; vgl. Stevens et al., 1974) ist ein Maß für die Stärke der Verbindung (und damit der Abhängigkeit) von Komponenten untereinander. Entkopplung ist das Gegenteil von Kopplung. Obwohl Kopplung der in der Literatur normalerweise verwendete Begriff ist, wurde hier der Begriff Entkopplung gewählt, damit ein hoher Erfüllungsgrad hohe Qualität impliziert. In der Objektorientierung kann die Kopplung zunächst in drei verschiedene Arten unterschieden werden (Li, 1992): • Kopplung durch Vererbung: Eine Unterklasse ist durch das Erben von Eigenschaften mit ihrer Oberklasse gekoppelt. Jede Änderung der Oberklasse hat Auswirkungen auf die Unterklasse. • Kopplung durch Methodenaufruf: Jeder Methodenaufruf durch andere Klassen und jeder Aufruf von Methoden anderer Klassen erhöht die Kopplung. • Kopplung durch Datenabstraktion: Die Verwendung anderer Klassen als Typ von Attributen erhöht die Kopplung. Betrachtet man diese Arten genauer, stellt man fest, dass es insgesamt folgende Kopplungsarten im objektorientierten Entwurf gibt: • Methode-Operation: Eine Methode ruft eine Operation (oder einen Konstruktor/ Destruktor) auf. Es ergibt sich eine Kopplung in Richtung des Aufrufs; implizit entsteht auch eine Kopplung zwischen den Klassen 1 , welche die Methode bzw. die Operation enthalten. 1. Statt einer Klasse kann es auch ein Interface sein (das gilt ebenso bei den anderen Kopplungsarten).

8.3 Wartbarkeit 109<br />

Diskussion<br />

Für den Menschen scheinen hierarchische Strukturen beson<strong>der</strong>s verständlich zu sein<br />

(Simon, 1962). Hierarchische Strukturen erlauben den Umgang mit einer großen<br />

Anzahl von Teilen, weil zu einem Zeitpunkt immer nur ein Ausschnitt betrachtet werden<br />

muss. Durch die Hierarchie besteht die Möglichkeit zur Abstraktion (z. B. die Bildung<br />

von Schichten), da Verfeinerungen bei Bedarf ausgeblendet werden können.<br />

Parnas (1974) stellt fest, dass man bei dem Begriff hierarchisch aufpassen muss, da es<br />

verschiedene Hierarchien gibt. In <strong>der</strong> Objektorientierung gibt es z. B. bei den Paketen<br />

eine hierarchische Struktur durch Schachtelung, bei den Klassen durch Vererbung.<br />

Hierarchien sind zyklenfrei, daher ist die Vermeidung von Zyklen ein wichtiges Ziel.<br />

Weitere Kriterien für die Strukturiertheit einer Hierarchie sind ihre Tiefe und <strong>der</strong> Verzweigungsgrad<br />

innerhalb <strong>der</strong> Hierarchie.<br />

8.3.3 Entkopplung<br />

[…] the best programs are designed in terms of loosely coupled functions that each does a simple<br />

task.<br />

(Kernighan, Plauger, 1974)<br />

If one intends to build quality models of OO design, coupling will very likely be an important<br />

structural dimension to consi<strong>der</strong>.<br />

(Briand et al., 1998, S. 30)<br />

Definition<br />

Kopplung (coupling; vgl. Stevens et al., 1974) ist ein Maß für die Stärke <strong>der</strong> Verbindung<br />

(und damit <strong>der</strong> Abhängigkeit) von Komponenten untereinan<strong>der</strong>. Entkopplung<br />

ist das Gegenteil von Kopplung. Obwohl Kopplung <strong>der</strong> in <strong>der</strong> Literatur normalerweise<br />

verwendete Begriff ist, wurde hier <strong>der</strong> Begriff Entkopplung gewählt, damit ein<br />

hoher Erfüllungsgrad hohe <strong>Qualität</strong> impliziert.<br />

In <strong>der</strong> Objektorientierung kann die Kopplung zunächst in drei verschiedene Arten<br />

unterschieden werden (Li, 1992):<br />

• Kopplung durch Vererbung: Eine Unterklasse ist durch das Erben von Eigenschaften<br />

mit ihrer Oberklasse gekoppelt. Jede Än<strong>der</strong>ung <strong>der</strong> Oberklasse hat Auswirkungen<br />

auf die Unterklasse.<br />

• Kopplung durch Methodenaufruf: Je<strong>der</strong> Methodenaufruf durch an<strong>der</strong>e Klassen<br />

und je<strong>der</strong> Aufruf von Methoden an<strong>der</strong>er Klassen erhöht die Kopplung.<br />

• Kopplung durch Datenabstraktion: Die Verwendung an<strong>der</strong>er Klassen als Typ von<br />

Attributen erhöht die Kopplung.<br />

Betrachtet man diese Arten genauer, stellt man fest, dass es insgesamt folgende Kopplungsarten<br />

im objektorientierten Entwurf gibt:<br />

• Methode-Operation: Eine Methode ruft eine Operation (o<strong>der</strong> einen Konstruktor/<br />

Destruktor) auf. Es ergibt sich eine Kopplung in Richtung des Aufrufs; implizit entsteht<br />

auch eine Kopplung zwischen den Klassen 1 , welche die Methode bzw. die<br />

Operation enthalten.<br />

1. Statt einer Klasse kann es auch ein Interface sein (das gilt ebenso bei den an<strong>der</strong>en Kopplungsarten).

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!