Design Patterns

Schriftliche Ausarbeitung zum Techtalk fuer Gruppensitzung der Leistungstelle 60

Datum: 26.03.98

Autor: Klaus Meucht


 
 

Inhaltsverzeichnis

 

 
 

Was ist ein Pattern ?

Da es schon sehr viele Definitionen gibt, habe ich mir eine eigene ausgedacht:

"Patterns sind Lösungsschema für Probleme, die in der objektorientierten Softwareentwicklung in verschiedenen Kontexten immer wieder auftreten."

Pattern-Systeme setzen sich aus mehreren Patterns zusammen, und bilden eine Art Wissensdatenbank. Durch Patterns wird versucht Lösungen die in einem Projekt erfolgreich eingesetzt wurde, auch in anderen Projekten zu verwenden. Patterns sind verwandt zu Frameworks aber noch abstrakter; es wird nur die Lösungsidee aber i.a. kein konkreter Sourcecode aufgeschrieben.

 
Welche Arten von Pattern gibt es ?

Man kann Patterns danach unterscheiden in welcher Phase des Softwareentwicklungsprozesses sie auftreten

Design Pattern (Entwurfsmuster):

Eine Definition aus dem Gang-of-Four Buch:

 

Ein Entwurfsmuster benennt, motiviert und erläutert systematisch einen allgemeinen Entwurf, der ein in objektorientierten Systemen immer wiederkehrendes Entwurfsproblem löst. Es beschreibt das Muster, die Lösung, wann die Lösung anwendbar ist sowie die Konsequenzen der Anwendung. Es gibt weiterhin Implementierungstips und Beispiele. Die Lösung ist eine allgemeine Anordnung von Objekten und Klassen, die das Problem lösen. Die Lösung wird maßgeschneidert und implementiert, um das Problem in einem konkreten Kontext zu lösen.
 

Beispiel: Das Proxy-Pattern
 
 

3 Probleme eine Lösung:

    Es wurde eine Textverarbeitung mit Graphikeinbindung entwickelt. Sobald Graphiken eingebunden werden verlangsamt sich das System extrem, da die Graphiken viel Hauptspeicher verbrauchen. Ausserdem ist ein flüssiges Scrollen nicht mehr möglich, da der Neuaufbau der Graphiken extrem langsam ist.

    2. Problem:  Zugriff auf entfernte Objekte

    Das abzulaufende Programm ist auf mehreren Rechnern verteilt, die Kommunikation erfolgt über TCP/IP. Aus Effizienzgründen soll die
    Kommunikation ueber das Netz so weit wie möglich verringert werden.

     3. Problem: Mapping zwischen Objekten und Tabellen

    Die Objekte einer Anwendung sind in einer relationalen Datenbank gespeichert. Die Attribute des Objektes sind aber auf mehreren Tabellen verteilt, d.h. die Tabellen sind über den "Fremdschlüsselmechanismus" miteinander verknüpft. Um ein Objekt vollständig einzulesen, muss also auf mehreren Tabellen zugegriffen werden. Oft ist man aber nur an wenigen Attribute des Objektes interessiert.

  Die Lösung:

So verschieden die Probleme sind, so haben sie doch eines gemeinsam. Bei allen 3 Probleme versuche ich auf ein Objekt zuzugreifen, wobei der Zugriff teuer ist. Bei allen 3 Problemen kann ich anstatt das teure Objekt ein billigeres Stellvertreterobjekt benutzen.

Im Textverarbeitungssystem verlangsamt die eingebundene Grafik das System. Dabei ist es aber nicht immer nötig die Graphik vollständig einzubinden. In vielen Fällen reicht es die Umrandung der Graphik, sowie eine textuelle Beschreibung des Bildes zu zeigen. Erst auf Wunsch des Benutzers wird das vollständige Bild eingebunden. (siehe StarOffice Paket)

Den Zugriff auf entfernte Objekte kann reduziert werden, indem im lokalen System ein Stellvertreter-Objekt gehalten wird. Das Stellvertreter Objekt hat eine verminderte Funktionalität als das Original. Es bietet nur die Dienste an, die häufig gebraucht werden. Bei den selteneren Diensten leitet das Stellvertreter Objekt die Anfrage dann an das Original weiter.

Auch im letzten Beispiel muss ein Objekt nicht immer vollständig aus der Datenbank ausgelesen werden. Anstatt nachfolgende Tabellen über Fremdschlüssel einzulesen, wird einfach ein Stellvertreter Objekt erzeugt. (siehe Beispiel).

 
IVM-Mitarbeitertabelle
 
Nr Name Vorname Abt.Schlüssel
1 Redmann Wolfgang 60
5 Meucht Klaus 60
 
IVM-Abteilungstabelle
 
 
Schlüssel Bezeichnung Leiter Umsatz
60 BMW-Anwendungen 1 zu wenig
 

ausgelesenes Objekt IVM-Mitarbeiter:
 
Klasse IVM-Mitarbeiter
Name Meucht
Vorname Klaus
Abteilung Proxy Objekt für Abteilung mit Schlüssel 60
 

Die Lösung im Detail
 

Eine genauere Beschreibung der Lösung ist in [Siemens] beschrieben, es besteht im wesentlichen aus dem unten angegeben Objektmodell. Zunächst die Beschreibung der notwendigen Objekte mit dem Klassendiagramm.
 

  • Die abstrakte Klasse AbstractOriginal definiert die gemeinsame Schnittstelle, zwischen dem StellvertreterObjekt Proxy und dem Original Objekt
  • Der Client greift nicht direkt, sondern nur über das Proxy auf das Original zu. Er benutzt dazu die Schnittstelle des Proxy Objekts.
  • Das Proxy Objekt bietet dem Client eine geeignete Schnittstelle und sorgt für den sicheren, effizienten und korrekten Zugriff auf das Original Objekt
  • Das Original Objekt bietet einen bestimmten Dienst an.
  •  
    Das dynamische Verhalten des Objektmodells wird oft durch Sequenzdiagramme beschrieben:
     

     

     

     

     
    Vorteile von DesignPatterns  [Riehle]

     

     Pattern Languages bzw Systeme von Pattern

    Damit der Anwender ein gewünschtes Pattern zu einem spezifischen Problem schnell findet, werden die Patterns geeignet katalogisiert. Die Kriterien, wie einzelne Patterns  zusammengefasst werden sind in der Literatur aber leider nicht einheitlich.

    Die einzelnen Patterns sollten immer in einer einheitlichen Form dokumentiert werden. Typischerweise wird zuerst der Zweck des Patterns in ein bis zwei Sätzen beschrieben. Danach erfolgt meistens ein konkretes Beispiel, indem das Pattern anwendbar ist. Es schliesst sich eine formale abstrakte Beschreibung des Patterns mit einem Objektmodell als Lösung an. Danach erfolgt eine konkrete Lösung mit SourceCode für das zuvor angegebene Beispiel. Danach folgt oft eine CheckListe für Vorraussetzungen wann das Pattern sinnvoll ist, und ggf. Verweise auf verwandte Patterns. Zum Schluß werden bekannte Projekte aufgelistet, in denen das Pattern erfolgreich angewendet wurde.

      Literaturliste:

    Alle die hier aufgeführten Bücher können bei mir persönlich eingesehen werden. Es sind hier nur die Bücher aufgelistet, die ich selber durchgesehen habe, und daher hat diese Liste kein Anspruch auf Vollständigkeit.

      Entwurfsmuster für Softwarewerkzeuge  Addison-Wesley           ISBN 3-8273-1147-0   Der erste Teil ist eine sehr theoretische Einführung in Design Patterns. Im zweiten Teil wird eine Methodik vorgestellt, mit der man durch Kombination von wenigen Patterns einen vollständigen Entwurf erlangt. Leider hat das Buch den Stil einer Diplomarbeit.   Informationen aus dem Internet   Eine gute StartSeite ist "http://hillside.net/patterns/" mit PatternKataloge, Anmeldung zu MailingLists, Tutorials usw. Ich habe bis jetzt keine Newsgroup speziell über Patterns gefunden