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

84 7 Entwurfsqualität Hier werden einige Prinzipien für den objektorientierten Entwurf, von denen viele aus dem strukturierten Entwurf übernommen wurden, kurz vorgestellt. Dabei werden strategische (Tabelle 7-2) und taktische Prinzipien (Tabelle 7-3) unterschieden. Strategische Entwurfsprinzipien sind fundamentaler Art, sie geben eine Art Entwurfstheorie vor. Die taktischen Prinzipien sind technischer Art, sie schlagen die Anwendung bestimmter Techniken vor. Eine ausführliche Erläuterung der Prinzipien findet sich bei Reißing (2002). Prinzip Beschreibung Führe den Entwurf auf die Anforderungen zurück Jede Entwurfsentscheidung muss auf ihre zugehörigen Anforderungen zurückgeführt werden können (und umgekehrt). Diese Eigenschaft wird als Verfolgbarkeit (traceability) bezeichnet. Erfinde nicht das Rad neu Falls immer es möglich ist, sollte für eine vorgesehene Komponente des Entwurfs eine bereits vorhandene Komponente wiederverwendet werden, statt eine neue zu schaffen. Kenne den Anwendungsbereich Sorge für intellektuelle Kontrolle (Witt et al., 1994) Minimiere den intellektuellen Abstand (Structural Correspondence, Jackson, 1975) Stelle konzeptionelle Integrität her (Witt et al., 1994) Verberge Realisierungsentscheidungen (Geheimnisprinzip, Parnas, 1972b) Minimiere die Komplexität Vermeide Redundanz (Beck, 1996; Hunt, Thomas, 1999) Tabelle 7-2: Strategische Prinzipien Der Entwerfer sollte die Begriffswelt und typische Abläufe der Anwendung kennen, aber auch mit ihrer Arbeitsumgebung vertraut sein. Dazu gehört die technische Umgebung genauso wie die soziale Umgebung, die aus den Benutzern und den geltenden Gesetzen und Standards besteht. Nur dann können die optimale Architektur und geeignete Algorithmen gewählt werden. Sowohl die Entwickler als auch die Wartungsprogrammierer sollen in der Lage sein, den Entwurf vollständig zu verstehen. Dies wird durch hierarchische Strukturierung, Abstraktion und Einfachheit der einzelnen Komponenten erleichtert. Außerdem muss der Entwurf gut dokumentiert sein. Der intellektuelle Abstand ist der Unterschied (z. B. in der Struktur) zwischen dem Problem und der Software-Lösung. Um einen geringen intellektuellen Abstand zu erreichen, sollten sich die relevanten Begriffe der Problemwelt (in der Regel die reale Welt) möglichst originalgetreu in der Lösung wiederfinden. Konzeptionelle Integrität bedeutet, dass der gesamte Entwurf einem einheitlichen Stil folgen soll. Der Entwurf soll am Ende so aussehen, als sei er von einer einzigen Person geschaffen worden. Alle Realisierungsentscheidungen sollen in Module gekapselt und so vor dem Rest des Systems verborgen werden. Die Modulschnittstelle soll also über die innere Struktur möglichst wenig Auskunft geben. Gerade bei Entscheidungen, die sich wahrscheinlich ändern, ist das hilfreich. Komplexität erschwert das Verständnis und damit die intellektuelle Kontrolle. Daher sollte sie so gering wie möglich sein. Jede Form von Redundanz stellt ein Risiko dar, da es bei Änderungen leicht zu Inkonsistenzen kommt. Stattdessen sollte eine Funktion an genau einer Stelle realisiert werden.

7.3 Entwurfsregeln 85 Prinzip Beschreibung Benutze Abstraktion Abstraktion ist ein für den Menschen natürliches Verfahren, mit komplexen Sachverhalten umzugehen. Bei der Abstraktion werden irrelevante Details ausgeblendet. Um einen Sachverhalt zu verstehen, ist es dann nicht mehr notwendig, alle Details auf einmal im Gedächtnis zu haben. Es genügt, die an der aktuellen Aufgabenstellung beteiligten Abstraktionen zu beherrschen. Teile und herrsche Ein Problem wird in kleinere, möglichst unabhängige Teilprobleme zerlegt, die gelöst werden. Aus den Einzellösungen wird dann die Gesamtlösung zusammengesetzt. Das Verfahren lässt sich rekursiv anwenden, bis man zu einfach lösbaren Teilproblemen gelangt. Der Vorteil dieses Vorgehens besteht darin, dass zu einem Zeitpunkt nur ein Problem relativ geringer Komplexität gelöst werden muss. Strukturiere hierarchisch (Simon, 1962; Parnas, 1972b) Der Mensch kann nur dann mit komplexen Systemen umgehen, wenn sie hierarchisch sind. Daher sind hierarchische Strukturen im Entwurf vorteilhaft. Modularisiere Das System wird – im Geiste des Teile-und-herrsche-Prinzips – in sinnvolle Subsysteme und Module zerlegt. Das Modul dient dabei als Behälter für Funktionen oder Zuständigkeiten des Systems. Trenne die Zuständigkeiten (separation of concerns) Trenne Verhalten und Implementierung (separation of policy and implementation; Rumbaugh et al., 1993) Kapsele Zusammengehöriges Trenne Schnittstelle und Implementierung Vermeide Abhängigkeiten von Details (Martin, 1996c) Das System wird anhand von Zuständigkeiten (häufig auch als Verantwortlichkeiten bezeichnet) in Komponenten aufgeteilt. Komponenten, die an der gleichen Aufgabe beteiligt sind, werden gruppiert und von denen abgegrenzt, die für andere Aufgaben zuständig sind. Eine Komponente (oder eine Methode) soll entweder für das Verhalten oder die Implementierung zuständig sein, nicht für beides. Eine Komponente für das Verhalten trifft Entscheidungen anhand des Kontextes, interpretiert Ergebnisse und koordiniert andere Komponenten. Eine Komponente für die Implementierung dagegen führt einen Algorithmus auf vorliegenden Daten aus. Komponenten für die Implementierung sind in der Regel stabil, während sich die Komponenten für das Verhalten oft ändern, daher gibt es Sinn, sie zu trennen. Zusammengehörige Bestandteile einer Abstraktion werden zu einem Ganzen zusammengefasst und von anderen abgegrenzt. Die Implementierung wird hinter einer Schnittstelle verborgen. Bei der objektorientierten Sichtweise wird die Kapselung durch die Definition von Klassen erreicht. Eine Komponente soll aus einer Schnittstelle und einer Implementierung bestehen. Die Schnittstelle soll nicht von der Implementierung abhängen, so dass der Verwender nicht durch Änderungen von Implementierungsdetails betroffen sein kann. Komponenten sollten nicht von Details (i. d. R. Implementierungsdetails) abhängig sein, sondern von abstrakten Schnittstellen. In der Objektorientierung bedeutet das, dass die wesentlichen Abstraktionen in Form von Interfaces oder abstrakten Klassen formuliert sind. Tabelle 7-3: Taktische Prinzipien (Abschnitt 1 von 2)

84 7 Entwurfsqualität<br />

Hier werden einige Prinzipien für den objektorientierten Entwurf, von denen viele<br />

aus dem strukturierten Entwurf übernommen wurden, kurz vorgestellt. Dabei werden<br />

strategische (Tabelle 7-2) und taktische Prinzipien (Tabelle 7-3) unterschieden.<br />

Strategische Entwurfsprinzipien sind fundamentaler Art, sie geben eine Art Entwurfstheorie<br />

vor. Die taktischen Prinzipien sind technischer Art, sie schlagen die<br />

Anwendung bestimmter Techniken vor. Eine ausführliche Erläuterung <strong>der</strong> Prinzipien<br />

findet sich bei Reißing (2002).<br />

Prinzip Beschreibung<br />

Führe den Entwurf auf die<br />

Anfor<strong>der</strong>ungen zurück<br />

Jede Entwurfsentscheidung muss auf ihre zugehörigen Anfor<strong>der</strong>ungen<br />

zurückgeführt werden können (und umgekehrt). Diese Eigenschaft<br />

wird als Verfolgbarkeit (traceability) bezeichnet.<br />

Erfinde nicht das Rad neu Falls immer es möglich ist, sollte für eine vorgesehene Komponente<br />

des Entwurfs eine bereits vorhandene Komponente wie<strong>der</strong>verwendet<br />

werden, statt eine neue zu schaffen.<br />

Kenne den Anwendungsbereich<br />

Sorge für intellektuelle<br />

Kontrolle<br />

(Witt et al., 1994)<br />

Minimiere den intellektuellen<br />

Abstand<br />

(Structural Correspondence,<br />

Jackson, 1975)<br />

Stelle konzeptionelle Integrität<br />

her<br />

(Witt et al., 1994)<br />

Verberge Realisierungsentscheidungen<br />

(Geheimnisprinzip, Parnas,<br />

1972b)<br />

Minimiere die Komplexität<br />

Vermeide Redundanz<br />

(Beck, 1996; Hunt, Thomas,<br />

1999)<br />

Tabelle 7-2: Strategische Prinzipien<br />

Der Entwerfer sollte die Begriffswelt und typische Abläufe <strong>der</strong><br />

Anwendung kennen, aber auch mit ihrer Arbeitsumgebung vertraut<br />

sein. Dazu gehört die technische Umgebung genauso wie die soziale<br />

Umgebung, die aus den Benutzern und den geltenden Gesetzen<br />

und Standards besteht. Nur dann können die optimale Architektur<br />

und geeignete Algorithmen gewählt werden.<br />

Sowohl die Entwickler als auch die Wartungsprogrammierer sollen<br />

in <strong>der</strong> Lage sein, den Entwurf vollständig zu verstehen. Dies wird<br />

durch hierarchische Strukturierung, Abstraktion und Einfachheit <strong>der</strong><br />

einzelnen Komponenten erleichtert. Außerdem muss <strong>der</strong> Entwurf<br />

gut dokumentiert sein.<br />

Der intellektuelle Abstand ist <strong>der</strong> Unterschied (z. B. in <strong>der</strong> Struktur)<br />

zwischen dem Problem und <strong>der</strong> Software-Lösung. Um einen geringen<br />

intellektuellen Abstand zu erreichen, sollten sich die relevanten<br />

Begriffe <strong>der</strong> Problemwelt (in <strong>der</strong> Regel die reale Welt) möglichst originalgetreu<br />

in <strong>der</strong> Lösung wie<strong>der</strong>finden.<br />

Konzeptionelle Integrität bedeutet, dass <strong>der</strong> gesamte Entwurf einem<br />

einheitlichen Stil folgen soll. Der Entwurf soll am Ende so aussehen,<br />

als sei er von einer einzigen Person geschaffen worden.<br />

Alle Realisierungsentscheidungen sollen in Module gekapselt und<br />

so vor dem Rest des Systems verborgen werden. Die Modulschnittstelle<br />

soll also über die innere Struktur möglichst wenig Auskunft<br />

geben. Gerade bei Entscheidungen, die sich wahrscheinlich än<strong>der</strong>n,<br />

ist das hilfreich.<br />

Komplexität erschwert das Verständnis und damit die intellektuelle<br />

Kontrolle. Daher sollte sie so gering wie möglich sein.<br />

Jede Form von Redundanz stellt ein Risiko dar, da es bei Än<strong>der</strong>ungen<br />

leicht zu Inkonsistenzen kommt. Stattdessen sollte eine Funktion<br />

an genau einer Stelle realisiert werden.

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!