Inhaltsverzeichnis[Anzeigen]

 

Begrifflichkeit



Ziel ist es, dem Softwareentwickler einen Wissensfundus an immer wiederkehrenden Problemen und deren Lösung rund um die Softwareentwicklung zur Verfügung zu stellen. Dabei geht es weniger um Technologien, sondern um das entwickeln und dokumentieren stabiler Softwarearchitekturen und von Softwaredesign.

Ursprünge

Standardwerke

  • Design Patterns: Elements of Reusable Object-Oriented Software von Erich Gamma, Richard Helm, Ralph Johnson und John Vlissides ( GOF , "Gang of Four") ist der Klassiker über Design Patterns
  • Pattern-Oriented Software Architecture: A System of Patterns von Frank Buschmann, Regine Meunier, Hans Rohnert, Peter Sommerland und Michael Stal ( POSA ) befaßt sich mit Nutzung von Patterns um komplexere Strukturen zu entwerfen
  • Pattern Languages of Program Design 1, Pattern Languages of Program Design 2 enthält ausgewählte Vorträge der ersten und zweiten Konferenz über "Pattern Languages of Program Design" (PLoP oder PLoPD )
  • Christoph Alexander Werke befassen sich mit Architektur und Stadtplannung, um die Lebensqualität der Menschen zu
    • Notes on the Synthesis of Form
    • The Oregon Experiment
    • A Pattern Language: Town,Buildings,Construction
    • A Timeless Way of Building

Geschichte

  • Christoph Alexander
    • auf ihn gehen viele Begriffe zurück:
      • pattern
      • forces
      • pattern languages
    • er entwickelte in den sechzig und siebzigern mit seinen Mitarbeitern am Center for Environmental Structure in Berkley 250 Muster
    • seine zentrale Idee war es, die Architektur auf die Bedürfnisse des Menschen auszurichten ("Windows on Two Sides of Every Room" )
  • Ward Cunningham und Kent Beck
    • wurden durch die Ideen von Christoph Alexander inspiriert um seine Ideen in der Softwareentwicklung anzuwenden
    • 1987 veröffentlichten sie Using Pattern Languages for Object-Oriented Programs eine "pattern language", um das Entwicklen von Benutzerschnittstellen in Smalltalk zu erleichtern
    • sie stellten das erste Mustersystem zum Entwurf von Benutzeroberflächen auf:
      • Window-per-Task - zu jeder Aufgabe ein eigenes Fenster
      • Few-Panes - entwickle für jede Sicht der Aufgabe einen eigenen Bereich in dem Fenster
      • Standard-Panes - gestalte die funktionellen Bereiche nach gleichen Grundsätzen
      • Nouns-and-Verbs - Handlungsanweisungen ( verbs ) gehören in das Menü und
      • Short-Menus
  • James Coplien
    • 1991 publizierte er das Buch Advanced C++ Programming Styles and Idioms; ein Katalog von C++ Idiomen
  • Erich Gamma
    • 1991 promovierte Erich Gamma in Zürich über die Verwendung von Mustern in der Softwareentwicklung
    • da die Arbeit in Deutsch geschrieben war, erregte die Arbeit außerhalb von Mitteleuropa wenig Aufmerksamkeit
    • MOVED TO... Erich Gamma entwickelte seien Ideen weiter in Amerika
  • Erich Gamma, Richard Helm, Ralph Johnson , John Vlissides ( entspricht GoF ), Jim Coplien , Doug Lea
    • 1990 - 1992 wird in diversen Workshops ( OOPSLA 91/92 ) ein Katalog von Patterns erarbeitet
  • Kent Beck und Grady Booch
  • GOF
    • 1995 wurde das Design Patterns Buch veröffentlicht und alles bis zu diesem Zeitpunkt ist Geschichte

Eigenschaften

  • Muster ( nach POSA )
    • zielen auf ein in speziellen Entwurfssituationen häufig auftretende Entwurfsproblem und beschreibt eine Lösung für dieses Problem
    • dokumentieren bekannte, erprobte Lösungen von Entwurfsproblemen
    • identifizieren und spezifizieren Abstraktionen auf einer Ebene oberhalb der von einzelnen Klassen und Objekten und oberhalb der von ganzen Komponenten.
    • beschreiben ein gemeinsames Vokabular und Verständig von Entwurfsprinzipien
    • sind ein Mittel zur Dokumentation von Softwarearchitekturen
    • unterstüzten die Entwicklung von Software mit definierten Eigenschaften
    • helfen bei der Entwicklung komplexer, heterogener Softwarearchitekturen
    • helfen beim Umgang mit der Komplexität von Softwaresystemen

Definition

  • Die Definition zeichen sie alle durch eine Dreigliederung aus
    • Dirk Riehle und Heinz Zullighoven: A pattern is the abstraction from a concrete form which keeps recurring in specific non-arbitrary contexts.
    • http://hillside.net/patterns/definition.html: Each pattern is a three-part rule, which expresses a relation between a certain context, a certain system of forces which occures repeatedly in that context, and a certain software configuration which allows these forces to resolve themselves.
    • Christoph Alexander: Each pattern is a three-part rule, which express a relation between a certain context, a problem, and a solution.
  • MOVED TO... Ein Entwurfsmuster beschreibt eine generische Lösung für ein in einem bestimmten Kontext wiederkehrendes Entwurfsproblem.

Was zeichnet ein Pattern aus ?

Struktur

  • Kontext
    • Entwurfssituation, in der ein Entwurfsproblem auftritt
  • Problem
    • Kräfte, die in dem Kontext wirken
  • Lösung
    • Konfiguration zum Ausgleich der Kräfte
      • Struktur mit Komponenten und Beziehungen ( statisch )
      • Laufzeitverhalten ( dynamisch )

Nutzen

  • Pattern sollen "useful, useable, and used" sein
    • useful: Implementierung von Pattern sollen einen Mehrwert bringen
    • useable : die Implementierung eines Pattern sollen aus seiner Beschreibung möglich sein
    • used: Pattern definieren sich über ihren Gebrauch ("rule of three")

Anti-Pattern

  • während Patterns gerne durch best practice klassifiziert werden, verwendet man gerne den Ausdruck lesson lerned für Anti-Pattern
  • Andrew Koenig beschreibt sie 1995 im C++ Report durch: Those that describe a bad solution to a problem which resulted in a bad situation.
  • Gerade die Erfahrung über schlechte Lösungen zu wiederkehrenden Problemen, soll helfen, diese "Lösungen" zu vermeiden.
  • Die Bücher von Bruce Webster in Pitfalls of Object-Oriented Development und Tom Love in Object Lessons widmen sich dieser Thematik.

Pattern = Design Pattern

  • Durch die herausragende Akzeptanz des GoF Buchs Design Patterns, das sich mit objektorientierte Designpattern beschränkt, wurde der Pattern Fokus gerne auf Design Pattern beschränkt.
  • Das GoF Buch definiert Design Pattern durch "descriptions of communicating objects and classes that are customized to solve a general design problem in a particular context."
  • MOVED TO... Daraus resultierte die Annahme, daß es in Design Pattern ausschließliche um objektorientierte Techniken ginge.
  • MOVED TO... Im nächsten Schritt wurde dann der Begriff Design unterschlagen, so daß Pattern mit Design Pattern gleichgesetzt wurde.
  • Pattern zielen aber auf alle Bereiche der Softwareentwicklung, um nur ein paar zu Nennen:
    • Analysis Pattern von Martin Fowler
    • orgranisatoric pattern
    • development organization
    • software process
    • project planning
    • requirement engineering
    • software configuration managment
    • ...
  • Die Autoren von Patterns of Software Architecture, auch bekannt als "Siemes Gang of Five", erweitert die Gleichsetzung von Design Pattern und objektorientiertem Design, in dem sie drei Typen von Pattern einführt.
  1. Architektur Muster
    • drückt eine fundamentalte strukturelle Organisation oder ein Muster für ein Softwaresystem aus
    • beschreibt ein System von vordefinierten Teilsystemen, der Verantwortlichkeiten und die Regeln, nach denen sie zusammenarbeiten
  2. Entwurfmuster
    • fokusiert diese oben genannten Teilsysteme, das Zusammenspiel der Komponenten in diesem Softwaresystem
    • bescheibt die sich wiederholdende Struktur der in Beziehung stehende Komponenten um ein generelles Design Problem in einem besonderen Kontext zu lösen
  3. Idiome
    • die Implementierung, der soeben genannten Komponenten in einer konkreten Programmiersprache, ist Thema der Idiome
  • Der Übergang vom Idiom über das Entwurfsmuster hin zum Architekturmuster kann am Model-View-Controller Pattern schön festgemacht werden
    • MVC wurde von Smalltalk Entwickler eingeführt um Benutzerschnittstellen in Smalltalk leichter/besser entwerfen zu können
    • in GoF wurde es als Ansammlung von Design Patterns verstanden, um objektoriente Benutzerschnittstellen zu entwerfen
    • POSA schließlich fasste es als Architekturpattern auf, das sich aus Design Patterns ( Beobacher- und Kompositmuster ) zusammensetzt
  • Der Fokus dieser Dreigliederung geht vom Abstrakten zum Konkreten, von der Makroarchitektur über die Mikroarchitekutr hin zur sprachenspezifischen Techniken.
  • Gleichzeitig beschreibt diese Dreigliederung die Konkretisierung des Softwareentwicklungsprozesses vom Grobentwurf über den Entwurf zur Implementierung.

Komponenten eines Patterns

Abgesehen davon, ob das Format eines Pattern der "Alexandrian Form", der "GoF Form", der "Coplien Form" oder der "Portland Form" folgt, sollte in einer Patternbeschreibung folgende Gesichtspunkte erörtert werden.
  1. Name
    • ein aussagekräftiger Name oder Ausdruck
  2. Auch bekannt unter
    • eventuelle Angabe von anderen Namen, unter denen das Pattern auch bekannt ist
  3. Zusammenfassung
    • eine kurzer Überblick, um das Pattern zu klassifizieren
  4. Zweck
    • Was will das Pattern erreichen?
  5. Kontext
    • In welchen Umgebungen kann man das Pattern anwenden?
  6. Interaktionen
    • Welche Komponenten gibt es zu Berücksichtigen?
    • Wie können diese sich oft widersprechenden Einschränkungen ausgelotet werden?
  7. Lösung
    • Die Beschreibung der Umsetzung des Patterns, seiner Struktur, seiner Komponenten und seiner Kollaborateure.
    • Dies wird gerne durch UML - Diagramme unterstüzt.
    • Hier sollten auch noch Punkte wie das Laufzeitverhalten, Implementationsspezifische Details und Variationen des Patterns diskutiert werden.
  8. Beispiel
    • keine Abstraktion ohne leicht verdauliches Beispiel
  9. Konsequenzen
    • Welche Konsequenzen ergaben sich aus der Anwendung des Patterns?
  10. Logische Grundlagen
    • Wie schafft es das Pattern die ganzen Kräfte auszuloten um zu einer Lösung zu kommen?
  11. Verwandte Pattern
    • Dies umfaßt Pattern, die gerne in einem ähnlichen Kontext verwendet werden aber auch Pattern, die eine ähnliche Problematik thematisieren.
  12. Bekannte Verwendungen
    • Wo findet sich das Pattern wieder?
  • Kurzes Beispiel für das Strategy Pattern
    1. Name
      • Strategy Patterns
    2. Auch bekannter unter
      • Policy
    3. Zusammenfassung
      • kapselt Alogrithmen als Objekt um sie Mittels Delegation zur Laufzeit austauschen zu können
    4. Zweck
      • Client ( Applikation ) kann zur Laufzeit entscheiden, wie ( nach welcher Strategie ) seine Anfrage bearbeitet wird
    5. Kontext
      • Mehrere Variation eines Algorithmus sollen dem Klienten transparent zur Verfügng gestellt werden
    6. Interaktion
      • Um die Transparenz zu gewährleisten, verberge die Strategien hinter einem Interface
      • dem Klienten kann im Konstruktor oder auch zur Laufzeit ein neue Strategie übergeben werden
    7. Lösung
      • führe ein Interface ein, vom dem du die ganzen Strategien ableitest
      • stelle jedem Klienten über Delegation die entsprechende Strategie zur Verfügung
    8. Beispiel
      • std::string in C++ setzte sich aus drei Eigenschaften zusammen, die durch einen einfachen typedef bekannt gemacht werden
        • char: elementar Datentyp
        • char_traits: Verhaltseigenschaften ( Sortierung der Charaktertypen, ... )
        • allocator: Speichereigenschaften
           typedef basic_string < char,class T= char_traits<char>,class A = allocator<char> > string         
      • Find Minima von Bruce Eckel
    9. Konsequenzen
      • Alternative zur Unterklassenbildung ( vgl. Templatemethode )
      • keine Bedingungen
      • Klienten müssen von den Strategien wissen
      • zusätzliche Indirektion
      • erhöhte Anzahl an Objekten
    10. Logische Grundlagen
      • durch das kapseln der Algorithmen in Objekte und die Delegation der Algorithmenaufrufe an die Objekte ist diese Flexibilität möglich
    11. Verwandte Pattern
      • Template Methode
        • kapsle die Variabilität nicht in Objekte sondern in virtuelle Funktionen, die dann entsprechend überladen werden müssen
      • Traits
        • verwende Untertypen um ein komplexeren Typ zusammenzubauen ( vgl. std::string )
          • der Unterschied in dem Strategy Pattern und Traits besteht weniger in der Architektur sondern in der Intention des Musters MOVED TO... Stratgie Pattern kapseln Verhalten ( Algorithmen ) hingegen Traits Typen
    12. Bekannte Verwendungen
      • Container in C++

Qualität der Pattern

Doug Lea nennt in seinem Artikel Christoph Alexander: an Introduction to Object-Oriented Designers" folgende Qualitätsmerkmale der Pattern
  • Encapsulation and Abstraction
    • jedes Pattern kapselt das Wissen über das Problem und deren Lösung in einem bestimmten Kontext
    • gleichzeitig stelle es eine Abstraktion über Kontextwissen und Kontextfahrung dar
  • Openess and Variability
    • Pattern sind offen für Erweiterung und Parametrisierung um ein größeres Problem zu lösen
    • darüber hinaus unterstützen Muster Variablität der Implementierung
  • Generativity and Composability
    • Pattern erzeugen einen Kontext für andere Pattern, der sich mit Pattern allgemeiner oder konkreter Struktur gestalten lässt
  • Equilibrium
    • bei dem durch ein Pattern erreichte Lösung soll der Nutzen und die Einschränkungen in einem ausgewogenen Verhältnis zueinander stehen

Intellektuelle Anspruch

"The human element of patterns is what chiefly contributes to their variability and adaptability, and usually requires a greater degree of creativity in their application and combination."
  • James Coplien verwendet in diesem Zusammenhang das Bild eines Schneider, der zwar ein Schnitt besitzt, diesen aber an den Kunden anpassen muß.

Abgrenzung

Algorithmen

  • Viele der bisher genannten Punkte lassen sich auch auf Algorithmen und Datenstrukturen anwenden.
  • Algorithmen fokussieren aber viel feinkörnigere Probleme.
  • Design Pattern kapseln gerne Algorithmen.
  • Während die Intention bei Algorithmen oft auf Optimierung im Ressourcen- und Zeitbereich liegt, thematisieren Pattern gerne allgemeine Architekurbelange mit weitreichenden Konsequenzen.

Frameworks

Framework (GoF): A framework is a set of cooperating classes that make up a reusable design for a specific class of software. A framework provides architectural guidance by partitioning the design into abstract classes and defining their responsibilities and collaborations. A developer customizes a framework to a particular application by subclassing and composing instances of framework classes.
  • Ein Framework bietet also eine Infrastruktur, nicht eine komplete Applikation, die an expliziten Stellen an die eigenen Bedürfnisse angepaßt werden kann.
  • Diese Erweiterbarkeitstellen, auch "plug points" oder "hot spots" werden gerne durch callback, Polymorphismus oder Delegation zur Verfügung gestellt.
  • Eine Framework kapselt die Design Entscheidungen einer Domäne und fördern somit die Design Wiederverwendung über die Code Wiederverwendung.
  • Der klassische Unterschied zwischen einem Framework und einer Bibliothek ist, das das Framework den Kontrollfluß invertiert.
  • Während der Client bei einer Bibliothek Funktionalität dieser aufruft, passt der Frameworknutzer dasselbige an seine Anforderungen an.
  • Dies Verhalten wird durch das Hollywoodprinzip "Dont't call us, we'll call you." charakterisiert.
  • Frameworks stellen die Realisierung von einer oder mehreren Software Pattern Lösungen dar; Pattern hingegen sind Anweisungen, wie diese Lösungen implemtiert werden sollten.
  • Abschliessend noch die Charakterisierung durch GoF:
    • Design patterns are more abstract than frameworks.
    • Design patterns are smaller architectural element than frameworks.
    • Design patterns are less specialized then frameworks.

Systematik

oder Wie finde ich das richtige Pattern zu meinem Problem?

Pattern Language

James Coplien definiert Pattern Language als "A pattern language defines a collection of patterns and the rules to combine them into an architectural style. Pattern languages describe software frameworks or families of releated systems."
  • Eine Pattern languages wird auch gerne als Patternvocabular und deren Grammatik beschrieben, mit der man alle gültige Sätze konstruieren kann.
  • Das Patternvocabular und deren Regeln erlauben es idealerweise, alle Architekturprobleme innerhalb dieser Domäne zu lösen.
  • Das Wissen zu Lösung der Sturkturprobleme der speziellen Domäne ist in der Pattern Language gekapselt.
  • Pattern Languages führen Systemanalytiker, Architekten, Designer und Codierer um ein arbeitsfähiges System zu erzeugen, das die verschiedenen auftretende Pläne beim Entwickeln des Gesamtsystems löst.

Muster System

POSA
Ein Mustersystem für Softwareentwickler ist eine Sammlung von Mustern für Softwarearchitektur, zusammen mit Richtlinien für ihre Implementierung, ihre Kombination und ihren praktischen Einsatz in der Softwareentwicklung.
  • ALERT! Des wesentliche Unterschied zwischen einer Pattern Language und einem Mustersystem besteht darin, das eine Patternlanguage idealerweise versucht eine Domäne vollständig abzudecken, während ein Mustersystem die Softwareentwicklung thematisiert.
  • Mustersystem sollen folgenden Anforderungen genügen
    1. Mustersystem sollten ein genügend große Anzahl von Mustern enthalten.
    2. Alle Muster eines Mustersystems sollten auf einheitliche Art und Weise beschrieben werden.
    3. Ein Mustersystem sollte die vielfältigen Beziehungen zwischen den Mustern aufzeigen.
    4. Ein Mustersystem sollte seine Bestandteile geeignet anordnen.
    5. Ein Mustersystem sollte die Konstruktion eines Softwaresystems unterstüzten.
    6. Ein Mustersystem sollte seine eigene Weiterentwicklung unterstützen.

GoF

  • Das wohl bekannteste Mustersystem stammt von GoF.
    • Sie gruppieren die Muster nach zwei Kriterien
      1. welche Aufgabe haben die Muster
        1. Erzeugungsmuster: unterstüzten die Objekterzeugung
        2. Strukturmuster: fassen Klassen und Objekte zu größeren Strukturen zusammen
        3. Verhaltensmuster: beschreiben die Interaktion zwischen Objekten und deren Kontrollflüsse
      2. welchen Gültigkeitsbereich haben die Muster; d.h. beziehen sich primär auf Klassen oder Objekte
        1. Klassenmuster MOVED TO...statisch
          • legen ihre Struktur durch Vererbung fest
          • sind zur Übersetzungszeit vorgegeben
        2. Objektmuster MOVED TO...dynamisch
          • legen ihre Struktur durch Aggregation und Assoziation fest
          • können zur Laufzeit konfiguriert werden
    • Somit ergibt sich folgende Strukturierung

      GültigkeitsbereichErzeugungsmusterStrukturmusterVerhaltensmuster
      Klassenmuster Fabrikmethode Adapter Interpreter
      Schablonenmethode
      Objektmuster Abstrakte Fabrik
      Erbauer
      Prototyp
      Einzelstück
      Adapter
      Brücke
      Kompositum
      Dekorierer
      Fassade
      Fliegengewicht
      Stellvertreter
      Zuständigkeitkette
      Kommando
      Iterator
      Vermittler
      Memento
      Beobachter
      Zustand
      Strategie
      Besucher
    • die Autoren stellen zwei Sichten auf das Mustersystem um das gesuchte Muster zu finden

      1. Welcher Aspekt variiert bei dem Muster?

        Aufgabe Entwurfsmuster Variierende Aspekte
        Erzeugungsmuster Abstrake Fabrik Familie von Produktobjekten
          Erbauer Erzeugung eines zusammengesetzten Objekts
          Fabrikmethode Unterklasse, von der ein Objekt erzeugt wird
          Protoype Klasse des zu erzeugeenden Objekts
          Singleton Das einzige Exemplar seiner Klasse
        Strukturmuster Adapter Schnittstelle eines Objekts
          Brücke Implementierung eines Objekts
          Dekorierer Zuständigkeit eines Objekts ohne neue Unterklasse
          Fassade Schnittstelle zu einem Subsystem
          Fliegengewicht Speicherkosten eines Objekts
          Kompositum Struktur und Zusammensetzung eins Objekts
          Proxy Zugriff auf eine Objekt sowie seinen Ort
        Verhaltensmuster Befehl Zeitpunkt und Art der Ausführung einer Anfrage
          Beobachter Anzahl der von einem Objekt abhängigen Objekte sowie die Art,
        in der die Objekte aktualisiert werden
          Besucher Operationen, die auf Objekte ohne Änderung ihrer Klasse angewendet werden können
          Interpreter Grammatik und Interpretierung einer Sprache
          Iterator Zugriff und Traversierung der Elemente eines Aggregats
          Memento Umfang und Zeitpunkt der Speicherung primitver Informationen eines Objekts außerhalb von ihm
          Schablonenmethode Schritte eines Algorithmus
          Strategie Ein Algorithmus
          Vermittler Zusammenarbeitende Objekte sowie die Art ihrer Zusammenarbeit
          Zustand Zustände eines Objekts
          Zuständigkeitskette Objekte, die eine Anfrage bearbeiten können
      2. In welcher Beziehung stehen die Muster zueinander?
  • ALERT!Das GoF Mustersystem besitzt nach meiner Ansicht ein paar Nachteile, wenn man versucht, das passende Muster zu seinem Problem zu finden:
    • die Klassifizierung ist zu grob
    • die Unterscheidung Objektmuster, Klassenmuster trägt wenig zur Entscheidung bei, denn:
       class Shape
      virutal Shape* clone() =0 ;
      };
      class Circle: public Shape{
      Shape* clone() { return new Circle; }
      }
      class Ellipse: public Shape{
      Shape* clone() { return new Ellipse; }
      }
      ....
      Circle& cir;
      Ellipse& ell;
      Shape* cirShape= cir.clone();
      Shape* ellShape= ell.clone();
      ...
    • MOVED TO...zwar ist die Fabrikmethode
      clone()
      ein Klassenmuster, eingesetzt wird sie aber über Delegation an Objekte

POSA

  • ein deutlich praktikableres Mustersystem enthält POSA, wobei die neu hinzugekommenen Muster aus dem gleichnamigen Buch stammen
  • POSA verwenden eine Musterkategoriensichtund eine Problemkategoriensicht, um Struktur in dem Musterklassifizierung zu bringen
    • die Musterkategoriensicht beschreibt die Sicht vom Groben zum Konkreten, vom Grobentwurf über den Feinentwurf zur Implementierng hin
    • die Problemkategoriensichtthematisiert das grundlegende Problem und seine Lösung nach folgenden Kategorien
      • vom Chaos zum Struktur: geeignete Zerlegung einer Gesamtaufgabe in Teilaufgaben
      • Verteilte System: Infrastruktur für Systeme, deren Komponenten in verschiedenen Prozessen oder Adreßräumen liegen
      • Interaktive Systeme: System mit Mensch-Computer-Interaktion
      • Adaptierbare Systeme: Infrastruktur, um eine Anwendung erweiterbar und an neue Anforderung anpaßbar zu gestalten
      • Strukturelle Zerlegung: Zerlegung von Subsystemen und komplexe Komponenten in geeignet miteinander kooperierende Komponenten
      • Organisation und Arbeit: Zusammenarbeit von mehreren Komponenten um gemeinsam eine komplexe Dientleisung anzubieten
      • Zugriffskontrolle: Zugriff auf Dienste und Komponenten schützen und konrollieren
      • Management: homogene Menge von Objekten, Diensten und Komponenten in ihrer Gesamtheit behandeln
      • Kommunikation: Kommunikation zwischen Komponenten zu organisieren
      • Ressourcenverwaltung: helfen bei der Verwaltung gemeinsam genutzter Komponenten und Objekte
  • kursiv geschriebene Pattern bezeichnen die GoF Patterns in ihrer geläufigeren, englischsprachigen Bezeichnung

    ProblemkategorieArchitekturmusterEntwurfsmusterIdiome
    Vom Chaos zur Struktur LayersPattern
    Pipes-and-Filters
    Blackboard
    Interpreter  
    Verteilte Systeme Broker
    Pipes-and-Filters
    Microkernel
       
    Interaktive Systeme Model-View-Controller
    Presentation-Abstraction-Control
       
    Adaptierbare Systeme Microkernel
    Reflection
       
    Erzeugung   Abstract-Factory
    Prototyp
    Builder
    Singleton
    Factory-Method
    Strukturelle Zerlegung   Whole-Part
    Composite
     
    Organisation von Arbeit   Master-Slave
    Chain-of-Responsibility
    Command
    Mediator
     
    Zugriffskontrolle   Proxy
    Facade
    Iterator
     
    Variation von Diensten   Bridge
    Strategy
    State
    Template-Method
    Erweiterung von Dienstleistungen   Decorator
    Visitor
     
    Managment   Command-Processor
    View-Handler
    Memento
     
    Adaption   Adapter  
    Kommunikation   Publisher-Subscriber
    Forward-Receiver
    Client-Dispatcher-Server
     
    Ressourcenverwaltung   Flyweight Counted-Pointer
  • folgenden idealisierten Weg empfehlen POSA, um in einer konkreten Situation ein geeignetes Muster auszuwählen
    1. Spezifikation des Problems
    2. Auswahl der Musterkategorie, die der Entwurfsaktivität entspricht
    3. Auswahl der Problemkategorie
    4. Vergleich der Problembeschreibungen
    5. Abwägen der Vor- und Nachteile
    6. Auswahl der passende Variante
    7. Gehe eventuell zurück zur Auswahl der Problemkategorie

Anwendung

  • Schon Christoph Alexander betonte, daß eine Architektur und die darin angewendeten Pattern nicht entworfen wird, sondern daß sich die Architektur sukzessive durch Anwendung von Pattern entwickelt ("Piecemeal Growth").

Pattern schreiben

  • Der Prozeß, Pattern zu entdecken um sie zu dokumentieren wird "pattern mining" oder auch "reverse-architecting" genannt.
  • In POSA werden folgende Kriterien genannt, die man beim Entwickeln von Patterns beachten sollte:
    1. Fokus auf Praktikabilität
    2. Ablehnung von Urheberschaft
    3. Öffentlicher Review
    4. Vorstellung und Diskussion in Workshops
    5. Sorgfältiges Editiern und insbesondere Berücksichtigen der öffentlichen Diskussion durch den Autor

Abschließende Bemerkungen

  • Brad Appleton:
    • "So while the ability to codify patterns as generic software components may be important, even more important is the knowledgte of how/when to apply and combine patterns, in conjunction with the ability to use a shared vocubulary of patterns names ... ."
  • Pattern verkörpern konzentrierte Erfahrungen in der Softwareentwicklung, die man sowohl positv "best practices" als auch negativ "lesson learned" gewonnen hat.

Mentoring

Stay Informed about my Mentoring

 

Rezensionen

Tutorial

Besucher

Heute 696

Gestern 3357

Woche 12259

Monat 39576

Insgesamt 3892290

Aktuell sind 35 Gäste und keine Mitglieder online

Kubik-Rubik Joomla! Extensions

Abonniere den Newsletter (+ pdf Päckchen)

Beiträge-Archiv

Sourcecode

Neuste Kommentare