Die Geschichte der Patterns in der Softwareentwicklung
Der Begriff Design Patterns wurde bereits im Jahr 1977 von Christopher Alexander geprägt und später von Größen wie Ward Cunningham und Kent Beck ausgebaut.
Die meisten Softwareentwickler gehen davon aus, dass das Buch "Design Patterns: Elements of Reusable Object-Oriented Software", das 1994 veröffentlicht wurde, die Geburtsstunde der Patterns ist. Nein. Der Begriff wurde bereits im Jahr 1977 von Christopher Alexander geprägt.
Ich beginne meinen geschichtlichen Abstecher mit wichtigen Personen und deren Büchern beginnen. Dieser Umweg ist aber keineswegs vollständig.
Geschichte der Patterns
Christopher Alexander
Die Idee der Muster geht auf Christopher Alexander [1] zurück. Er prägte in seinen Büchern "Notes on the Synthesis of Form, A City is Not a Tree [2]", "The Timeless Way of Building [3]", "The Oregon Experiment [4]", "The Nature of Order [5]" und vor allem in seinem Buch "A Pattern Language: Town, Buildings, Construction [6]" Begriffe wie Pattern, Forces oder Pattern Languages. Christopher Alexander war ein Architekt, der sich auf die Innenarchitektur, aber auch auf Stadtplanung konzentrierte. Sein Hauptanliegen war es, eine Architektur zu schaffen, die sich an den Bedürfnissen der Menschen orientiert. Er entwickelte mit seinen Kollegen im Center for Environmental Structure in Berkley mehr als 250 Muster für Entwurfsprobleme. Jedes bestand aus einem Problem, einer Diskussion des Problems mit einer Illustration und einer Lösung. Ich schätze, das kommt den meisten bekannt vor.
Ward Cunningham und Kent Beck
Ward Cunningham und Kent Beck haben sich von den Ideen von Christoph Alexander inspirieren lassen und diese auf die Softwareentwicklung übertragen. Im Jahr 1987 veröffentlichten sie ihr Buch "Using Pattern Languages for Object-Oriented Program [7]s", eine Pattern-Sprache, die die Entwicklung von Benutzeroberflächen in Smalltalk vereinfachen sollte. Sie schufen das erste Mustersystem für die Gestaltung von Benutzeroberflächen. Hier sind vier ihrer Muster:
- Window-per-Task: Ein separates Fenster für jede Aufgabe
- Few-Panes: Entwicklung eines separaten Bereichs im Fenster für jede Ansicht der Aufgabe
- Standard-Panes: Gestaltung der Funktionsbereiche nach den gleichen Prinzipien
- Nouns and Verbs: Handlungsanweisungen (Verben) gehören ins Menü
Ich möchte betonen, dass Ward Cunningham und Kent Beck zwei der einflussreichsten Köpfe der Softwareentwicklung sind.
Ward Cunningham:
- Pionier der Software-Entwurfsmuster
- Erfinder des Wiki
- hat zusammen mit Kent Beck CRC-Karten populär gemacht; CRC steht für Class Resonsibility Card
Kent Beck:
- Pionier der Software-Entwurfsmuster
- schrieb das Unit-Test-Framework sUnit für Smalltalk
- entwickelte zusammen mit Erich Gamma [10]das Junit-Unit-Test-Framework für Java
- machte CRC Karten zusammen mit Ward Cunningham bekannt
- entwickelte Extreme Programming (XP)
James Coplien
James Coplien veröffentlichte 1991 das Buch "Advanced C++ Programming Styles and Idioms [11]". Sein Buch ist ein Katalog von C++-Idiomen wie
- Handle/Body: Trennung von Schnittstelle und Implementierung
- Envelope/Letter: bindet die gemeinsame Semantik von Schnittstelle und Implementierung zusammen
- Virtual Constructor: Aufbau einer Hierarchie eines bekannten abstrakten Typs, aber eines unbekannten konkreten Typs
- Konkreter Datentyp: bestimmt, ob ein Objekt auf dem Heap oder im aktuellen Scope erzeugt werden soll
- Algebraische Hierarchie: strukturiert die Klasse nach algebraischen Typen
- Nicht-hierarchische Addition: behandelt arithmetische Operationen zwischen Typen, die nicht in den jeweils anderen Typ überführt werden können
Erich Gamma
Erich Gamma [12] promovierte 1991 in Zürich über den Einsatz von Mustern in der Softwareentwicklung: "Objektorientierte Software-Entwicklung am Beispiel von ET++". ET++ ist eine portable C++-Klassenbibliothek für die Entwicklung interaktiver grafischer Anwendungen. Gammas Dissertation wurde zur Grundlage seines gemeinsam mit drei Koautoren verfassten Buches "Design Patterns: Elements of Reusable Object-Oriented Software [13]". Die drei Koautoren sind Richard Helm [14], Ralph Johnson [15]und John Vlissides [16]. Alle Vier bilden zusammen die bekannte Gang of Four (GoF).
Erich Gamma ist auch dafür bekannt, dass er zusammen mit Kent Beck das Junit Unit Test Framework für Java entwickelt hat und federführend an der Entwicklung des Eclipse [17]Frameworks beteiligt war.
Die Hillside Group
1993 luden Grady Booch [18] und Kent Beck mehrere Protagonisten aus der objektorientierten Szene in eine Berghütte in Colorado ein. Eines der Themen war die Verschmelzung der Ideen von Christopher Alexander mit den neueren Arbeiten von Erich Gamma als Grundlage für Design Patterns. Die Gründung einer gemeinnützigen Organisation, die sich mit Software Patterns beschäftigt, erhielt den Namen Hillside Group. Bis heute spielt diese Gruppe eine zentrale Rolle in der Pattern-Community. Aus ihr sind zahlreiche Konferenzen zum Thema hervorgegangen, die sogenannten PLoPs (Pattern Languages of Programming). Wer nach weiteren Informationen zu Patterns, Büchern oder Konferenzen zum Thema suchst, sollte sie bei der Hillside Group [19]suchen.
Design Patterns: Elemente von wiederverwendbarer objektorientierter Software
Im Jahr 1994 veröffentlichten Erich Gamma [20], Richard Helm [21], Ralph Johnson [22]und John Vlissides [23]. ihr bahnbrechendes Buch "Design Patterns: Elements of Reusable Object-Oriented Software [24]". Es enthält 23 objektorientierte Muster, die in Erzeugungs- , Struktur- und Verhaltensmuster unterteilt sind. Dieses Buch markiert den Beginn der weltweiten Verbreitung von Mustern und gilt als das wichtigste Buch zu Softwaredesign. Bis heute wurden mehr als 500.000 Exemplare verkauft.
Pattern-Oriented Software Architecture, Band 1
Frank Buschmann, Regine Meunier, Hans Rohnert, Peter Sommerlad und mein Heise-Blog-Kollege Michael Stal [25] von der Siemens AG veröffentlichten 1996 das Buch "Pattern-Oriented Software Architecture, Volume 1 [26]". Ihr sehr einflussreiches Buch stellt die Weiterentwicklung des Pattern-Ansatzes zu einem System von Patterns dar, mit dem große Anwendungen beschrieben und dokumentiert werden können. Pattern-Oriented Software Architecture (POSA) besteht aus 17 Architekturmustern, Entwurfsmustern und Idiomen. Die gesamte POSA-Reihe, die von 1996 bis 2007 veröffentlicht wurde, umfasst fünf Bände.
Wie geht's weiter?
In meinem nächsten Artikel stelle ich die unterschiedlichen Klassifizierungen von Mustern in den Büchern "Design Patterns: Elements of Reusable Object-Oriented Software [27]" und "Pattern-Oriented Software Architecture, Volume 1 [28]" vor.
Urlaubspause
In den nächsten zwei Wochen lege ich eine kleine Urlaubspause ein. Mein nächster Beitrag wird daher am 1. August 2022 erscheinen. (rme [29])
URL dieses Artikels:
https://www.heise.de/-7166631
Links in diesem Artikel:
[1] https://en.wikipedia.org/wiki/Christopher_Alexander
[2] https://en.wikipedia.org/wiki/Notes_on_the_Synthesis_of_Form
[3] https://en.wikipedia.org/wiki/The_Timeless_Way_of_Building
[4] https://en.wikipedia.org/wiki/The_Oregon_Experiment
[5] https://en.wikipedia.org/wiki/The_Nature_of_Order
[6] https://en.wikipedia.org/wiki/A_Pattern_Language
[7] http://c2.com/doc/oopsla87.html
[8] https://commons.wikimedia.org/w/index.php?curid=17697618
[9] https://commons.wikimedia.org/w/index.php?curid=2938419
[10] https://en.wikipedia.org/wiki/Erich_Gamma
[11] https://archive.org/details/advancedcbsprogr00copl
[12] https://en.wikipedia.org/wiki/Erich_Gamma
[13] https://archive.org/details/advancedcbsprogr00copl
[14] https://de.wikipedia.org/wiki/Richard_Helm
[15] https://de.wikipedia.org/wiki/Ralph_Johnson
[16] https://de.wikipedia.org/wiki/John_Vlissides
[17] https://en.wikipedia.org/wiki/Eclipse_(software)
[18] https://en.wikipedia.org/wiki/Grady_Booch
[19] https://hillside.net/patterns
[20] https://en.wikipedia.org/wiki/Erich_Gamma
[21] https://de.wikipedia.org/wiki/Richard_Helm
[22] https://de.wikipedia.org/wiki/Ralph_Johnson
[23] https://de.wikipedia.org/wiki/John_Vlissides
[24] https://archive.org/details/advancedcbsprogr00copl
[25] https://www.heise.de/developer/Der_Pragmatische_Architekt-2732748.html
[26] https://en.wikipedia.org/wiki/Pattern-Oriented_Software_Architecture
[27] https://archive.org/details/advancedcbsprogr00copl
[28] https://en.wikipedia.org/wiki/Pattern-Oriented_Software_Architecture
[29] mailto:rme@ix.de
Copyright © 2022 Heise Medien