Der objektorientierte Softwareentwurf ist ungleich aufwendiger als der "herkömmliche", prozedurale Entwurf. Der Entwickler (, der auch weiblich sein kann, aber der Einfachheit halber nicht in meinem Text !) muß viele Festlegungen treffen, die sich nicht direkt aus der Problemstellung ableiten. Diese sind sicher nicht in der von mir angegebenen Reihenfolge, sondern vielmehr parallel zueinander zu treffen:
Bildung von Klassen: Hier muß der Entwickler die Daten
und die auf sie anzuwendenden Operationen in Klassen abbilden. Im Rahmen
der Fragestellung der Objektgranularität ist in erster Linie festzulegen,
wie detailliert die Aufteilung der Daten/Methoden auf die verschiedenen
Klassen erfolgen soll.
Die gebildeten Klassen verbindet eine zu gestaltende Vererbungshierarchie. Der Entwickler hat zu entscheiden, welche Klassen sinnvollerweise voneinander erben sollen. Weiterhin sind ggf. abstrakte Klassen zu bilden.
Im Rahmen der Schnittstellengestaltung muß festgelegt werden, welche Daten ein Objekt (einer Klasse) mit Hilfe welcher Methoden welchen anderen Objekten (welcher Klassen) zur Verfügung stellen soll.
Neben "Verwandschaftsbeziehungen" der Klassen muß es natürlich auch Beziehungen zwischen den Objekten der Klassen geben. Ein Objekt kann beispielsweise ein anderes Objekt erzeugen, besitzen oder eine Referenz auf es verwalten. Diese Beziehungen sind ebenso wichtig wie die Vererbungsbeziehungen, weil durch sie erst ein guter objektorientierter Softwareentwurf mit flexibler Struktur entsteht.
Der zuvor als "Mehraufwand" dargestellten Entwicklungsarbeit
steht ein enormer Nutzen gegenüber, der die Popularität objektorientierter
Entwicklung begründet. Objektorientierte Entwürfe (selbstverständlich
nur die Guten !) sind flexibler. Veränderungen in der Problemstellung
sind leicht zu realisieren, das gleiche gilt für Erweiterungen. Diese
Flexibilität beruht hauptsächlich darauf, daß der Entwickler
bei seiner Arbeit wiederverwendbare Entwürfe entwickelt hat, die durch
diverse Techniken (vgl. Abschnitt 2) verändert werden können.
Der gedankliche Brückenschlag zu den Entwurfsmustern gelingt, wenn
man erkennt, daß verschiedene Softwarestücke ähnliche (oder
sogar gleiche) Strukturen enthalten. Wenn man diese Strukturen hinreichend
abstrahiert, kann man sie als Muster bezeichnen. Vollkommen analog hierzu
wurden in der Vergangenheit auch bewährte Algorithmen katalogisiert,
veröffentlicht und standardisiert. Sortieralgorithmen sind hier sicherlich
das beste Beispiel, da jeder Softwareentwickler in seiner Ausbildung zu
Übungszwecken mit ihnen konfrontiert wird.
Demnach besteht die "Technik" von Erich Gamma und seinen Kollegen
Richard Helm, Ralph Johnson und John Vlissides (in Fachkreisen auch als "Gang Of
Four " bekannt) nicht (nur)
im Entwurf von Mustern, sondern in der Art, sie zu beschreiben und somit
anwendbar zu machen. Die Abschnitte 3 und 5 beschäftigen sich hiermit.