Donnerstag, 4. Dezember 2008

Einführung in Entwurfsmuster (Teil1) / Introduction to design patterns (Part1)

Im Dezember 2006/Januar 2007 schrieb Andy Kramek in seinem Blog über die Implementierung von Entwurfsmustern in Visual Foxpro. Andy hat mir erlaubt, meine deutsche Übersetzung seiner Artikelserie hier zu veröffentlichen. An dieser Stelle für seine Erlaubnis nochmals herzlichen Dank.

Heute nun also der erste Teil.

Hinweis: Die Überschriften der jeweiligen Kapitel sind direkt mit seinem Originalbeitrag verknüpft.

Einführung in Entwurfsmuster (Design Patterns)
Von Andy Kramek

Warum sich mit Entwurfsmustern plagen?

Entwurfsmuster sind eine Standardsprache für das Erkennen, Definieren und Beschreiben von Lösungen für Softwareproblemstellungen. Die Kenntnis von Entwurfsmustern erleichtert das Verstehen von vorhandenen Systemen sowie die Anforderungsbeschreibung von komplexen neuen Systemen.

Ich erinnere mich, das ich vor einigen Jahren mit Paul Maskens in der Lobby des Lindner Kongresshotels in Frankfurt saß, während er versuchte, mir eine Idee für eine Werkzeugkiste innerhalb einer Gridspalte zu erklären. Er beschrieb seine Lösung zu diesem Problem und plötzlich, nach ca. 20 Minuten, stellte ich fest, dass er über ein Strategiemuster sprach. Hätte er seine Ausführungen mit dem Hinweis begonnen, dass er ein Strategiemuster implementiert hatte, dann hätte ich umgehend die generellen Anforderungen und Ansätze verstanden, die er zur Umsetzung angewandt hatte. Dies hätte eine Menge Zeit und Aufwand gespart und es uns beiden erlaubt auf die Details der Implementation direkt einzugehen.

Auf jeden Fall ist es wichtig zu erkennen, das Entwurfsmuster selbst nicht die Lösung spezifischer Probleme darstellen. Sie sind einfach nur ein Weg zur Identifizierung von Problemen und beschreiben generische Lösungen die sich als erfolgreiche Vorgehensweisen etabliert haben. Die wirkliche Implementierung eines Entwurfsmusters ist immer noch Aufgabe des Entwicklers.

Was ist ein Entwurfsmuster?

Bevor wir uns den speziellen Beispielen zuwenden, die sich mit der Implementierung von Entwurfsmustern unter Visual FoxPro befassen, sollte ich mit der Definition von ‚Entwurfsmustern’ beginnen. Diverse Definitionen wurden schon angeboten und die wohl am meisten zitierte Version stammt aus dem Buch „Entwurfsmuster – Elemente wieder verwendbarer objektorientierter Software“ von Erich Gamma, Richard Helm, Ralph Johnson und John Vlissides (ursprünglich auch als ‚Die Vierer Gang -> Gang of Four’ oder einfacher GoF bekannt). Sie bieten im ersten Kapitel (Was ist ein Entwurfsmuster) ihres Buches die folgende Definition: Dies ist eine gute Definition denn sie beinhaltet die vier Schlüsselelemente eines jeden Entwurfsmusters.
Ein Entwurfsmuster benennt, abstrahiert und identifiziert die relevanten Aspekte einer allgemeinen Entwurfsstruktur. Diese Aspekte beschreiben, warum das Muster für die Entwicklung eines wieder verwendbaren objektorientierten Entwurfs nützlich ist. Das Entwurfsmuster identifiziert die teilnehmenden Klassen und Objekte, die Rollen welche sie spielen, die Interaktionen zwischen den Rollen und die ihnen zugeteilten Aufgaben.
Dies ist eine gute Definition denn sie beinhaltet die vier Schlüsselelemente eines jeden Entwurfsmusters.

- Es hat einen Namen.
Dies ist wichtig, denn es erlaubt dem Entwickler eines der fundamentalen Probleme im Softwaredesign zu umgehen, nämlich wie kommuniziere ich mit anderen über das, was ist tue. Das Beispiel mit Paul was ich zuvor angesprochen habe spiegelt dies perfekt wieder.

- Es abstrahiert ein Problem.
GoF bezeichnet dies als ‚ Absicht’ (Intent). Es sagt uns sowohl die Natur des Problems als auch die Lösung durch ein Entwurfsmuster. Nehmen wir zum Beispiel das Problem, zu verhindern dass Anwender mehrere neue Instanzen einer Applikation erzeugen können. Normalerweise versuchen Anwender neue Instanzen einer Applikation zu starten, weil sie das Ursprungsfenster verkleinert und vergessen haben, dass die Anwendung bereits gestartet wurde. Wir können sofort erkennen, dass es sich hierbei um das Singelton-Muster handelt, denn dieses hat die Absicht sicher zu stellen, dass von einer Klasse nur eine Instanz existiert und dass es einen zentralen Aufrufpunkt gibt.

- Es definiert eine Designstruktur.
Es ist wichtig zur erkennen, das Entwurfsmuster keine Lösung für ein gegebenes Problem liefern. Sie beschreiben Strukturen, die es uns erlauben, das Problem zu lösen, und das in einer Weise, die eher eine Wiederverwendung ermöglicht, als die althergebrachte Art, seinen Code zu schreiben. Wir haben alle schon einmal die Erfahrung gemacht, dass wir einen bestimmten Code bereits an einer anderen Stelle eingesetzt haben, wir ihn jedoch nicht wiederverwenden konnten, weil wir den Code nicht von der Umgebung isoliert hatten. Zweck von Entwurfsmustern ist es, solche Situationen zu erkennen und sie somit zu vermeiden.

- Es identifiziert die Verteilung von Zuständigkeiten.
Dies ist natürlich der Schlüssel aller Designanforderungen und ist nicht auf Entwurfsmuster beschränkt. Letztlich ist, sobald wir wissen was eine Klasse (oder Objekt) zu tun hat, das schreiben des Codes ein Leichtes.

Der Vorteil eines Entwurfsmusters ist, dass wenn wir das Problem erst einmal erkannt haben und wir es einem Muster zuordnen können, es uns aufzeigt, wie die Verantwortlichkeiten zugewiesen werden. Es hilft uns so, schnell die beste Lösung zu erzeugen. Es ist nicht meine Absicht, sämtliche Entwurfsmuster an dieser Stelle ausschweifend zu betrachten (dem widmen sich komplette Bücher). Aber in dieser kleinen Serie werde ich die gängigsten Muster abdecken und zeigen, wie Visual FoxPro eingesetzt werden kann, um musterbasierende Lösungen zu erstellen. Jedes Kapitel ist in sich geschlossen und deckt jeweils ein Muster ab, aber ich werde mich um eine allgemeine Beschreibung bemühen.

Quellennachweis:

Entwurfsmuster - Elemente wiederverwendbarer objektorientierter Software ADDISON-WESLEY ISBN 3-89319-950-0

Keine Kommentare:

Kommentar veröffentlichen