Erhalten Sie Zugang zu diesem und mehr als 300000 Büchern ab EUR 5,99 monatlich.
Dieses Buch ist ein moderner Klassiker zum Thema Entwurfsmuster. Mit dem einzigartigen Von-Kopf-bis-Fuß-Lernkonzept gelingt es den Autoren, die anspruchsvolle Materie witzig, leicht verständlich und dennoch gründlich darzustellen. Jede Seite ist ein Kunstwerk für sich, mit vielen visuellen Überraschungen, originellen Comic-Zeichnungen, humorvollen Dialogen und geistreichen Selbstlernkontrollen. Spätestens, wenn es heißt "Spitzen Sie Ihren Bleistift", wird Leser:innen klar, dass bei diesem Buch Mitmachen gefragt ist.
Das ist nicht nur unterhaltsam, sondern auch effektiv: Komplexe Sachverhalte lassen sich nach Erkenntnis der modernen Lernwissenschaft am gründlichsten über mehrere verschiedene Kanäle verstehen. Das Buch verspricht Ihnen daher nicht nur Spaß beim Lernen, Sie werden nach der Lektüre auch die Herausforderungen des Softwaredesigns meistern können.
Sie lesen das E-Book in den Legimi-Apps auf:
Seitenzahl: 452
Das E-Book (TTS) können Sie hören im Abo „Legimi Premium” in Legimi-Apps auf:
Eric FreemanElisabeth Robson
mitKathy SierraBert Bates
Deutsche Übersetzung von
Jørgen W. Lang
Eric Freeman, Elisabeth Robson, Kathy Sierra und Bert Bates
Lektorat: Alexandra Follenius
Übersetzung: Jørgen W. Lang
Korrektorat: Sibylle Feldmann, www.richtiger-text.de
Satz: Ulrich Borstelmann, www.borstelmann.de
Herstellung: Stefanie Weidner
Umschlaggestaltung: Ellie Volckhausen, Michael Oréal, www.oreal.de
Bibliografische Information der Deutschen Nationalbibliothek
Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über http://dnb.d-nb.de abrufbar.
ISBN:
Print 978-3-96009-162-2
PDF 978-3-96010-503-9
ePub 978-3-96010-504-6
mobi 978-3-96010-505-3
3. Auflage 2022, Übersetzung der 2. englischen Auflage
Translation Copyright für die deutschsprachige Ausgabe © 2021 by dpunkt.verlag GmbH
Wieblinger Weg 17
69123 Heidelberg
Authorized German translation of the English edition of Head First Design Patterns, ISBN 978-1-492-07800-5 © 2021 Eric Freeman and Elisabeth Robson. This translation is published and sold by permission of O’Reilly Media, Inc., which owns or controls all rights to publish and sell the same.
Dieses Buch erscheint in Kooperation mit O’Reilly Media, Inc. unter dem Imprint »O’REILLY«.
O’REILLY ist ein Markenzeichen und eine eingetragene Marke von O’Reilly Media, Inc. und wird mit Einwilligung des Eigentümers verwendet.
Bei der Erstellung dieses Buchs wurden keinerlei Enten oder Truthähne verletzt.
Die Mitglieder der »Gang of Four« haben uns die Erlaubnis erteilt, ihre Fotos in diesem Buch abzudrucken. Doch, sie sehen wirklich so gut aus.
Hinweis:
Dieses Buch wurde auf PEFC-zertifiziertem Papier aus nachhaltiger Waldwirtschaft gedruckt.
Der Umwelt zuliebe verzichten wir zusätzlich auf die Einschweißfolie.
Schreiben Sie uns:
Falls Sie Anregungen, Wünsche und Kommentare haben, lassen Sie es uns wissen: [email protected].
Die vorliegende Publikation ist urheberrechtlich geschützt. Alle Rechte vorbehalten. Die Verwendung der Texte und Abbildungen, auch auszugsweise, ist ohne die schriftliche Zustimmung des Verlags urheberrechtswidrig und daher strafbar. Dies gilt insbesondere für die Vervielfältigung, Übersetzung oder die Verwendung in elektronischen Systemen.
Es wird darauf hingewiesen, dass die im Buch verwendeten Soft- und Hardware-Bezeichnungen sowie Markennamen und Produktbezeichnungen der jeweiligen Firmen im Allgemeinen warenzeichen-, marken- oder patentrechtlichem Schutz unterliegen.
Alle Angaben und Programme in diesem Buch wurden mit größter Sorgfalt kontrolliert. Weder Autor noch Verlag noch Übersetzer können jedoch für Schäden haftbar gemacht werden, die in Zusammenhang mit der Verwendung dieses Buches stehen.
5 4 3 2 1 0
Zu diesem Buch – sowie zu vielen weiteren O’Reilly-Büchern – können Sie auch das entsprechende E-Book im PDF-Format herunterladen. Werden Sie dazu einfach Mitglied bei oreilly.plus:+:
www.oreilly.plus
Für die Gang of Four, deren Fachwissen und deren Erfahrung beim Beschreiben und Erklären von Entwurfsmustern die Welt des Softwaredesigns für immer verändert und das Leben von Entwicklern weltweit verbessert haben.
Aber mal im Ernst – wann kommt die zweite Auflage eures Buchs? Schließlich ist es erst fünfundzwanzig Jahre her!
Eric wurde von seiner Mitstreiterin bei der Entwicklung der Von-Kopf-bis-Fuß-Reihe, Kathy Sierra, bezeichnet als »eines dieser seltenen Individuen, die fließend die Sprache, Praxis und Kultur verschiedener Lebenswelten wie die der Hipster-Hacker, Unternehmensdirektoren, Ingenieure und Think-Tanks beherrschen«.
Von Haus aus ist Eric Informatiker, seinen Doktortitel erlangte er an der Yale University. Beruflich war er als CTO von Disney Online & Disney.com bei der Walt Disney Company tätig.
Aktuell ist er Kodirektor der Head-First-Reihe, die in Deutschland als Von-Kopf-bis-Fuß-Reihe bekannt ist. Bei der von ihm mitgegründeten Online-Lernplattform WickedlySmart widmet er seine Zeit der Erstellung von Print- und Video-Inhalten, die über die führenden Bildungskanäle vertrieben werden.
Erics Bücher in der Von-Kopf-bis-Fuß-Reihe Bücher umfassen die Themen Entwurfsmuster, HTML & CSS, JavaScript- und HTML5-Programmierung sowie das Programmierenlernen.
Eric lebt in Austin, Texas.
Elisabeth ist Softwareentwicklerin, Autorin und IT-Trainerin. Seit ihren Studententagen an der Yale University, wo sie ihren Master in Informatik erworben hat, ist sie mit Leib und Seele Informatikerin.
Aktuell ist sie Mitbegründerin von WickedlySmart, wo sie Bücher, Artikel, Videos und mehr erstellt. Zuvor hat sie als Director of Special Projects bei O’Reilly Media Präsenz-Workshops und Onlinekurse zu einer Vielzahl von technischen Themen gestaltet und eine Leidenschaft für das Entwerfen von Lehrsystemen entwickelt, die Menschen helfen, Technologien zu verstehen.
Wenn sie nicht vor ihrem Computer sitzt, geht Elisabeth, stets die Kamera in Griffweite, in die freie Natur, um zu wandern oder Rad oder Kajak zu fahren, oder sie widmet sich der Gartenarbeit.
Kathy interessiert sich für Lerntheorie seit ihrer Zeit als Spieleentwicklerin für Virgin, MGM und Amblin’ und als Dozentin für New Media Authoring an der UCLA. Sie war Master-Java-Trainerin für Sun Microsystems, und sie gründete JavaRanch.com (jetzt CodeRanch.com), das in den Jahren 2003 und 2004 den Jolt Cola Productivity Award gewann.
Im Jahr 2015 erhielt sie den Electronic Frontier Foundation’s Pioneer Award für ihre Arbeit zur Schaffung kompetenter Nutzer und den Aufbau nachhaltiger Gemeinschaften.
In jüngster Zeit konzentriert sich Kathy auf modernste Bewegungswissenschaften und das Coaching zum Erwerb von Fähigkeiten, bekannt als Ecological Dynamics oder »Eco-D«. Ihre Arbeit, bei der sie Eco-D für das Training von Pferden einsetzt, führt zu einem weitaus humaneren Ansatz in der Reitkunst, was die einen erfreut (und die anderen, traurigerweise, verwirrt). Die Pferde, die das Glück haben, dass ihre Besitzer Kathys Ansatz anwenden, sind zufriedener, autonomer, gesünder und sportlicher als ihre traditionell trainierten Artgenossen.
Sie können Kathy Sierra auf Instagram folgen: @pantherflows.
Bevor Bert Autor wurde, war er Entwickler, spezialisiert auf KI der alten Schule (hauptsächlich Expertensysteme), Echtzeit-Betriebssysteme und komplexe Planungssysteme.
Im Jahr 2003 schrieben Bert und Kathy Head First Java und starteten die Head-First-Reihe. Seitdem hat er weitere Java-Bücher geschrieben und Sun Microsystems und Oracle bei vielen ihrer Java-Zertifizierungen beraten. Außerdem hat er Hunderte von Autor:innen und Lektor:innen darin geschult, Bücher zu schreiben, die gute Lerninhalte bieten.
Bert ist Go-Spieler und hat 2016 mit Entsetzen und Faszination zugesehen, wie AlphaGo Lee Sedol besiegt hat. In letzter Zeit nutzt er Eco-D (Ecological Dynamics), um sein Golfspiel zu verbessern und seinen Papagei Bokeh zu trainieren.
Bert und Kathy haben das Privileg, Beth und Eric seit 16 Jahren zu kennen, und die Head-First-Reihe hat das große Glück, sie zu den wichtigsten Mitwirkenden zu zählen.
Sie können Bert unter CodeRanch.com eine Nachricht schicken.
Jørgen W. Lang lebt und arbeitet als freier Autor (»CSS Kochbuch«) und Übersetzer in Oldenburg/Niedersachsen. Mitte der Neunzigerjahre des vergangenen Jahrhunderts begann er, sich mit dem damals noch jungen World Wide Web und seinen Möglichkeiten zu beschäftigen. Pünktlich zum Jahrtausendwendejahr erschien seine erste Übersetzung für den O’Reilly Verlag. Mittlerweile ist der Umfang auf mehr als 10.000 Seiten angewachsen.
Mit großer Energie und Ausdauer bringt Jørgen seit fast schon zwei Jahrzehnten Webseiten bei, das zu tun, was von ihnen erwartet wird – unabhängig davon, auf welchem Gerät sie betrachtet werden (elektrische Zahnbürsten ausgenommen).
Das zweite Standbein von Jørgen Lang ist die Musik. Außerhalb der Welt der semantischen Elemente, Selektoren und Objekte hat er sich einen Namen als hervorragender Gitarrist, Sänger, Komponist und Arrangeur gemacht und kann auf eine Vielzahl veröffentlichter Alben und mehrere Hundert Konzerte in aller Welt (z. B. für die UNESCO in Seoul) zurückblicken.
Eine Herausforderung bei der Übersetzung von »Head First Design Patterns« war, möglichst alle verwendeten Bilder und Metaphern ins Deutsche zu übertragen, bei den Fachausdrücken aber auf in der Praxis ungebräuchliche Übersetzungen zu verzichten. So werden wir im Buch zwar Fabriken bauen, aber unser Entwurfsmuster heißt Factory, wir werden Beobachter entsenden, das Entwurfsmuster aber Observer nennen. Wir hoffen, dass unsere deutschen Leserinnen und Leser die Entwurfsmuster so leichter vor Augen haben, aber dennoch wissen, wie der Profi diese Muster in der Praxis bezeichnet.
Einführung
1
Willkommen bei den Entwurfsmustern: Einführung in Entwurfsmuster
2
Ihre Objekte auf dem Laufenden halten: Das Observer-Muster
3
Objekte dekorieren: Das Decorator-Muster
4
In der OO-Bäckerei …: Das Factory-Muster
5
Einmalige Objekte: Das Singleton-Muster
6
Aufrufe verkapseln: Das Command-Muster
7
Anpassungsfähigkeit beweisen: Die Adapter- und Facade-Muster
8
Algorithmen verkapseln: Das Template Method-Muster
9
Erfolgreiche Collections: Die Iterator- und Composite-Muster
10
Der (Zu-)Stand der Dinge: Das State-Muster
11
Objektzugriff kontrollieren: Das Proxy-Muster
12
Muster von Mustern: Zusammengesetzte Muster
13
Muster in der wahren Welt: Schöner leben mit Mustern
14
Anhang: Übrig gebliebene Muster
Einführung
Ihr mustergültiges Gehirn. Sie versuchen, etwas zu lernen, und Ihr Hirn tut sein Bestes, damit das Gelernte nicht hängen bleibt. Es denkt nämlich: »Wir sollten lieber ordentlich Platz für wichtigere Dinge lassen, z. B. für das Wissen, welche Tiere einem gefährlich werden könnten, oder dass es eine ganz schlechte Idee ist, nackt Snowboard zu fahren.« Tja, wie schaffen wir es nun, Ihr Gehirn davon zu überzeugen, dass Ihr Leben davon abhängt, etwas über Entwurfsmuster zu wissen?
Für wen ist dieses Buch?
Wir wissen, was Sie gerade denken
Und wir wissen, was Ihr Gehirn gerade denkt
Metakognition: Nachdenken übers Denken
Machen Sie sich Ihr Hirn untertan
Fachgutachter
Danksagungen
Einführung in Entwurfsmuster
1Willkommen bei den Entwurfsmustern
Irgendjemand hat Ihr Problem schon gelöst. In diesem Kapitel lernen Sie, warum (und wie) Sie die Weisheit und die Lehren anderer Entwickler nutzen können, die die gleichen Designprobleme bereits hatten und die Reise überlebt haben. Bevor dieses Kapitel zu Ende ist, kümmern wir uns um die Verwendung und die Vorteile der Entwurfsmuster, sehen uns ein paar grundsätzliche objektorientierte (OO-)Designprinzipien an und gehen mit Ihnen zusammen ein Beispiel für die Funktionsweise von Entwurfsmustern durch. Die beste Möglichkeit, die Muster zu verwenden, ist, sie in Ihr Gehirn zu laden und dann die Stellen in Ihren Designs und bestehenden Programmen zu erkennen, an denen der Einsatz sinnvoll ist. Im Gegensatz zur Codewiederverwendung können Sie mit Entwurfsmustern die Erfahrung anderer Menschen wiederverwenden.
Es begann mit einer einfachen SimUDuck-App
Aber jetzt sollen die Enten FLIEGEN können
Aber irgendetwas ging furchtbar schief …
Joe denkt über Vererbung nach …
Wie wäre es mit einem Interface?
Was würden Sie an Joes Stelle tun?
Die einzige Konstante in der Softwareentwicklung
Das Problem eingrenzen
Veränderliches und Unveränderliches voneinander trennen
Das Entenverhalten entwerfen
Das Entenverhalten implementieren
Das Entenverhalten integrieren
Den Entencode testen
Verhalten dynamisch festlegen
Das große Ganze: Verkapseltes Verhalten
HAT-EIN ist besser als IST-EIN
Da wir gerade von Entwurfsmustern sprechen …
Im Bistro um die Ecke aufgeschnappt …
Im Büro nebenan aufgeschnappt …
Die Stärke eines gemeinsamen Mustervokabulars
Wie setze ich Entwurfsmuster ein?
Werkzeuge für Ihren Entwurfs-Werkzeugkasten
Das Observer-Muster
2Ihre Objekte auf dem Laufenden halten
Sie wollen interessante Ereignisse doch nicht verpassen, oder? Es gibt ein Muster, das unsere Objekte auf dem Laufenden hält, wenn etwas für sie Wichtiges passiert, und zwar eins der am häufigsten verwendeten und nützlichsten Entwurfsmuster überhaupt: das Observer-Muster. In diesem Kapitel sehen wir uns alle möglichen interessanten Eigenschaften dieses Musters an, wie Eins-zu-viele-Beziehungen und lose Kopplungen. Mit dem Observer-Muster im Gepäck sind Sie der Star jeder Muster-Party!
Die Wetterstation im Überblick
Willkommen zum Observer-Muster
Die Observer-Muster-Definition
Die Macht der losen Kopplung
Die Wetterstation entwerfen
Die Wetterstation implementieren
Die Wetterstation hochfahren
Das Observer-Muster in freier Wildbahn
Die lebensverändernde Applikation programmieren
Inzwischen bei Weather-O-Rama
Probefahrt für den neuen Code
Werkzeuge für Ihren Entwurfs-Werkzeugkasten
Die Entwurfsprinzipien-Challenge
Das Decorator-Muster
3Objekte dekorieren
Nennen wir dieses Kapitel einfach »Vererbst du noch, oder designst du schon?«. Hier werfen wir einen weiteren Blick auf das typische Überstrapazieren von Vererbung. Sie werden lernen, wie Sie Ihre Klassen zur Laufzeit mit einer Form der Objektkomposition dekorieren können. Warum? Sobald Sie die Dekoration beherrschen, können Sie Ihren Objekten (oder denen anderer Leute) neue Verantwortung geben, ohne hierfür den Code der zugrunde liegenden Klassen ändernzu müssen.
Willkommen bei Starbuzz Coffee
Das Offen/Geschlossen-Prinzip
Wir stellen vor: das Decorator-Muster
Eine Getränkebestellung mit Dekoratoren aufbauen
Die Definition des Decorator-Musters
Unsere Getränke dekorieren
Den Starbuzz-Code schreiben
Getränke programmieren
Zutaten programmieren
Den Kaffee servieren
Dekoratoren in freier Wildbahn: Java I/O
Die java.io-Klassen dekorieren
Einen eigenen Java-I/O-Dekorator schreiben
Unseren neuen Java-I/O-Dekorator testen
Werkzeuge für Ihren Entwurfs-Werkzeugkasten
Das Factory-Muster
4In der OO-Bäckerei …
Machen Sie sich bereit, ein paar lose gekoppelte OO-Entwürfe zu backen. Zur Erstellung von Objekten gehört mehr, als einfach den new-Operator einzusetzen. Sie werden lernen, dass Instanziierung nicht in der Öffentlichkeit durchgeführt werden sollte und oft zu Kopplungsproblemen führen kann. Und das wollen wir nun wirklich nicht, oder? Finden Sie heraus, wie das Factory-Muster Sie vor peinlichen Abhängigkeiten bewahren können.
Das Veränderliche finden
Die Objekterstellung verkapseln
Eine einfache Pizzafabrik erstellen
Die einfache Fabrik definieren
Ein Framework für die Pizzeria
Den Subklassen die Entscheidung überlassen
Eine Fabrikmethode deklarieren
Jetzt ist es endlich Zeit, das Factory Method-Muster kennenzulernen
Ein paralleler Blick auf Hersteller und Produkte
Die Definition des Factory Method-Musters
Ein Blick auf Objektabhängigkeiten
Das Prinzip der Umkehrung der Abhängigkeiten
Das Prinzip anwenden
Zutatenfamilien
Die Zutatenfabriken bauen
Die Pizzas überarbeiten …
Unsere Pizzerien überarbeiten
Was haben wir getan?
Die Definition des Abstract Factory-Musters
Factory Method und Abstract Factory im Vergleich
Werkzeuge für Ihren Entwurfs-Werkzeugkasten
Das Singleton-Muster
5Einmalige Objekte
Unser nächster Halt ist das Singleton-Muster, unsere Fahrkarte für die Erstellung einmaliger Objekte, von denen es immer nur eine Instanz gibt. Es wird Sie freuen, zu erfahren, dass das Singleton-Muster, bezogen auf sein Klassendiagramm, das einfachste Muster von allen ist. Tatsächlich enthält es nur eine einzige Klasse! Aber machen Sie es sich nicht zu bequem. Trotz des einfachen Klassendesigns müssen wir für seine Implementierung einige tiefgehende objektorientierte Überlegungen anstellen. Also, setzen Sie Ihre Denkmütze auf, und los geht’s.
Die Implementierung des klassischen Singleton-Musters im Detail
Die Schokoladenfabrik
Definition des Singleton-Musters
Brüssel, wir haben ein Problem …
Mit Multithreading umgehen
Können wir das Multithreading verbessern?
Inzwischen in der Schokoladenfabrik …
Werkzeuge für Ihren Entwurfs-Werkzeugkasten
Das Command-Muster
6Aufrufe verkapseln
In diesem Kapitel heben wir die Verkapselung auf ein ganz neues Niveau: Wir werden Methodenaufrufe verkapseln. Ja, richtig gehört: Methodenaufrufe. Damit können wir Teile von Berechnungen »einfrieren«, wodurch sich das aufrufende Objekt nicht um die Details der Berechnung kümmern muss. Es nutzt einfach die eingefrorene Methode für die Erfüllung seiner Aufgabe. Mit diesen verkapselten Methodenaufrufen sind aber noch ganz andere schlaue Dinge möglich. Wir können sie beispielsweise zur Protokollierung nutzen oder sie wiederverwenden, um eine »Rückgängig«-Funktionalität zu implementieren.
Ein Blick auf die Drittherstellerklassen
Inzwischen im Bistro …
Vom Bistro zum Command-Muster
Unser erstes Command-Objekt
Das Command-Objekt verwenden
Befehle den Plätzen zuweisen
Die Fernsteuerung implementieren
Die Befehle implementieren
Die Fernsteuerung auf Herz und Nieren testen
Zeit für die Dokumentation …
Was machen wir hier?
Zeit, den Rückgängig-Knopf auf seine Qualität zu testen!
Zustände für die Implementierung der »Rückgängig«-Funktion verwenden
Die Deckenventilator-Befehle mit einer »Rückgängig«-Funktion versehen
Jede Fernsteuerung braucht einen Partymodus!
Einen Makro-Befehl benutzen
Viele Verwendungsmöglichkeiten für das Command-Muster: Warteschlangen für Befehle
Weitere Anwendungen des Command-Musters: Aufträge protokollieren
Das Command-Muster in der wahren Welt
Werkzeuge für Ihren Entwurfs-Werkzeugkasten
Die Adapter- und Facade-Muster
7Anpassungsfähigkeit beweisen
In diesem Kapitel versuchen wir so unmögliche Dinge wie die Quadratur des Kreises. Klingt ausgeschlossen? Aber nicht mit Entwurfsmustern. Erinnern Sie sich noch an das Decorator-Muster? Wir haben Objekte verpackt, um sie mit Verantwortlichkeiten zu versehen. Diesmal verpacken wir Objekte, damit ihre Schnittstellen wie etwas aussehen, das sie nicht sind. So können wir Designs, die bestimmte Schnittstellen erwarten, an Klassen anpassen, die eine andere Schnittstelle implementieren. Und das ist noch nicht alles. Wenn wir schon dabei sind, sehen wir uns gleich noch ein anderes Muster an, das Objekte verpackt, um ihre Schnittstelle zu vereinfachen.
Überall Adapter
Objektorientierte Adapter
Probelauf für den Adapter
Das Adapter-Muster erklärt
Die Definition des Adapter-Musters
Objekt- und Klassen-Adapter
Adapter im echten Leben
Einen Enumerator an einen Iterator anpassen
Unser eigenes Heimkino
Einen Film ansehen (auf die harte Tour)
Licht, Kamera, Facade!
Die Heimkino-Facade konstruieren
Die vereinfachte Schnittstelle implementieren
Einen Film anschauen (auf die sanfte Tour)
Die Definition des Facade-Musters
Das Prinzip der Verschwiegenheit
Wie man KEINE Freunde gewinnt und KEINE Objekte beeinflusst
Das Facade-Muster und das Prinzip der Verschwiegenheit
Werkzeuge für Ihren Entwurfs-Werkzeugkasten
Das Template Method-Muster
8Algorithmen verkapseln
Wir sind auf dem Verkapselungstrip. Was haben wir schon alles verkapselt? Objekterstellung, Methodenaufrufe, komplexe Schnittstellen, Enten, Pizzas – was kommt wohl als Nächstes? In diesem Kapitel gehen wir der Verkapselung von Algorithmenteilen auf den Grund, damit Subklassen sich bei Bedarf jederzeit direkt in eine Berechnung einklinken können. Außerdem lernen wir ein Entwurfsprinzip kennen, das von Hollywood inspiriert ist. Na dann mal los …
Zeit für mehr Koffein
Ein paar Kaffee- und Tee-Klassen zusammenrühren (in Java)
Kaffee und Tee abstrahieren
Das Design verbessern
prepareRecipe() abstrahieren
Was haben wir getan?
Willkommen beim Template Method-Muster
Was hat uns das Template Method-Muster gebracht?
Die Definition des Template Method-Musters
Eingehängt in die Template Method …
Den Hook verwenden
Das Hollywood-Prinzip und das Template Method-Muster
Template-Methoden in freier Wildbahn
Mit dem Template Method-Muster sortieren
Was ist compareTo()?
Enten mit Enten vergleichen
Ein paar Enten sortieren
Das Making-of der Entensortiermaschine
Swinging mit Frames
Eigene Listen mit AbstractList
Werkzeuge für Ihren Entwurfs-Werkzeugkasten
Die Iterator- und Composite-Muster
9Erfolgreiche Collections
Es gibt viele Möglichkeiten, Objekte in einer Collection zu speichern. Zum Beispiel in einem Array, einem Stack, einer Liste oder einer HashMap – Sie haben die Wahl. Dabei hat jede Form ihre Vor- und Nachteile. Irgendwann werden Ihre Clients allerdings über diese Objekte iterieren wollen. Und wollen Sie ihnen dann Ihre Implementierung offenbaren? Hoffentlich nicht! Das wäre einfach nicht professionell. Aber keine Sorge. Ihre Karriere ist nicht gefährdet. In diesem Kapitel werden Sie sehen, wie Ihre Clients über Ihre Objekte iterieren können, ohne zu wissen, wie sie gespeichert sind. Außerdem lernen Sie, wie man Super Collections von Objekten erstellt, die mit einem einzigen Satz einige eindrucksvolle Datenstrukturen überspringen können. Und als wäre das noch nicht genug, werden Sie auch noch das eine oder andere über Objektverantwortlichkeit lernen.
Große Neuigkeiten: Das Restaurant und das Pfannkuchenhaus von Objectville fusionieren
Sehen wir uns die Gerichte an
Die Spezifikation implementieren: unser erster Versuch
Können wir die Iteration verkapseln?
Willkommen zum Iterator-Muster
DinerMenu mit einem Iterator versehen
Die Restaurant-Speisekarte mit einem Iterator überarbeiten
Den Kellnerin-Code aufmöbeln
Den Code testen
Unser aktueller Entwurf auf dem Prüfstand …
Aufräumen mit java.util.Iterator
Die Definition des Iterator-Musters
Die Struktur des Iterator-Musters
Das Prinzip der einzelnen Verantwortlichkeit
Willkommen zu Javas Iterable-Interface
Javas erweiterte for-Schleife
Ein Blick auf die Speisekarte des Cafés
Iteratoren und Collections
Die Definition des Composite-Musters
Speisekarten mit dem Composite-Muster entwerfen
MenuComponent implementieren
Das Gericht (MenuItem) implementieren
Die Komposita-Speisekarte implementieren
Werkzeuge für Ihren Entwurfs-Werkzeugkasten
Das State-Muster
10Der (Zu-)Stand der Dinge
Eine kaum bekannte Tatsache: Die Strategy- und das State-Muster sind Zwillinge, die bei der Geburt getrennt wurden. Vielleicht denken Sie, dass beide ein ähnliches Leben führen. In Wirklichkeit hat Strategy jedoch ein unglaublich erfolgreiches Unternehmen rund um austauschbare Algorithmen aufgebaut, während State den vermutlich edleren Weg gewählt hat. Es hilft anderen Objekten, ihr Verhalten zu kontrollieren, indem es ihren inneren Zustand verändert. So unterschiedlich die Wege der beiden auch scheinen – hinter den Kulissen ist ihr Design fast identisch. Wie das sein kann und worum es beim State-Muster wirklich geht, werden wir herausfinden. Am Ende des Kapitels sehen wir uns dann an, welche Beziehung beide Muster tatsächlich zueinander haben.
Ein echter Java-Plombenzieher
Kurze Einführung in Zustandsautomaten
Den Code schreiben
Interner Testlauf
Sie haben es geahnt – ein Änderungswunsch!
ZUSTÄNDE wie bei Hempels unterm Sofa …
Der neue Entwurf
Das Interface State und die Klassen definieren
Umbau des Kaugummiautomaten
Ein Blick auf die komplette Klasse GumballMachine …
Weitere Zustände implementieren
Die Definition des State-Musters
Wir müssen uns wieder dem 1-von-10-Kaugummispiel widmen
Das Spiel fertigstellen
Demo für den CEO von Mighty Gumball, Inc.
Stimmt alles?
Das haben wir fast vergessen!
Werkzeuge für Ihren Entwurfs-Werkzeugkasten
Das Proxy-Muster
11Objektzugriff kontrollieren
Haben Sie schon einmal »guter Bulle, böser Bulle« gespielt? Sie sind der gute Polizist und stellen alle Ihre Dienste auf eine nette und freundliche Weise bereit. Wenn Sie aber nicht wollen, dass jeder ungefragt Ihre Dienste nutzt, übernimmt der böse Polizist die Zugangskontrolle für Sie. Denn genau das tun Proxies (»Stellvertreter«): Sie kontrollieren und verwalten den Zugriff. Wie Sie sehen werden, gibt es viele Möglichkeiten, Proxies als Vertreter für andere Objekte zu nutzen. Proxies sind dafür bekannt, dass sie für die von ihnen vertretenen Objekte komplette Methodenaufrufe über das Internet abwickeln. Außerdem nehmen sie bekanntermaßen den Platz einiger ziemlich fauler Objekte ein.
Den Überwachungscode schreiben
Den Überwachungscode testen
Einführung in entfernte Methodenaufrufe
Den Kaugummiautomaten (GumballMachine) als entfernten Dienst einrichten
Bei der RMI-Registry anmelden …
Die Definition des Proxy-Musters
Bereitmachen für den virtuellen Proxy
Den virtuellen Proxy für die Albencover entwerfen
Den Bild-Proxy schreiben
Partnervermittlung für Geeks in Objectville
Die Person implementieren
Fünf-Minuten-Drama: Subjekte schützen
Das große Ganze: Einen dynamischen Proxy für Person erstellen
Der Proxy-Zoo
Werkzeuge für Ihren Entwurfs-Werkzeugkasten
Der Code für den Albumcover-Viewer
Zusammengesetzte Muster
12Muster von Mustern
Wer hätte gedacht, dass Muster auch zusammenarbeiten können? Sie haben bereits die erbitterten Kamingespräche miterlebt (und dabei haben wir Ihnen die Seiten mit dem »Pattern Death Match« noch gar nicht gezeigt, die wir auf Druck des Verlegers wieder entfernen mussten). Wer hätte gedacht, dass Muster eigentlich sogar recht gut miteinander auskommen können? Ob Sie’s glauben oder nicht – einige der mächtigsten OO-Entwürfe verwenden Kombinationen mehrerer Muster. Machen Sie sich bereit für die nächste Stufe Ihrer Entwurfsmuster-Fähigkeiten: zusammengesetzte Muster (»Compound-Muster«)
Mustergültige Zusammenarbeit
Ein Wiedersehen mit den Enten
Was haben wir getan?
Ein Blick aus der VogelEntenperspektive: das Klassendiagramm
Der König der zusammengesetzten Muster
Willkommen zu Model-View-Controller
Genauer hingesehen …
MVC als eine Reihe von Mustern verstehen
MVC, um den Beat zu steuern
Erstellung der Einzelteile
Ein Blick auf die konkrete Klasse BeatModel
Der View
Den View implementieren
Und damit zum Controller
Die Einzelteile zusammensetzen …
Strategy erforschen
Das Model adaptieren
Noch ein Probelauf …
Werkzeuge für Ihren Entwurfs-Werkzeugkasten
Schöner leben mit Mustern
13Muster in der wahren Welt
Und damit sind Sie bereit für eine strahlende neue Welt voller Entwurfsmuster. Aber bevor Sie all die neuen Chancen nutzen, müssen wir uns noch um ein paar Details kümmern, die Ihnen draußen in der wahren Welt begegnen können, wo die Dinge etwas komplexer sind als hier in Objectville. Auf den folgenden Seiten haben wir für Sie einen kleinen Reiseführer (oder Leitfaden) vorbereitet, der Sie beim Übergang begleiten wird …
Definition von Entwurfsmustern
Ein genauerer Blick auf die Entwurfsmusterdefinition
Möge die Macht mit Ihnen sein
Sie wollen also eigene Entwurfsmuster schreiben
Entwurfsmuster ordnen
In Mustern denken
Denk-Muster
Vergessen Sie nicht die Macht des gemeinsamen Vokabulars
Spritztour durch Objectville mit der Gang of Four
Ihre Reise hat gerade erst begonnen!
Der Muster-Zoo
Mit Anti-Mustern das Böse auslöschen
Werkzeuge für Ihren Entwurfs-Werkzeugkasten
Abschied von Objectville …
14Anhang: Übrig gebliebene Muster
Nicht jeder kann der Beliebteste sein. Seit der Erstveröffentlichung von Design Patterns: Elements of Reusable Object-Oriented Software hat sich viel verändert. Entwickler haben diese Muster tausendfach verwendet. Die in diesem Anhang vorgestellten Muster sind Vollmitglieder der offiziellen GoF-Musterfamilie, werden aber nicht so oft genutzt wie die bisher gezeigten. Trotzdem sind sie auf ihre eigene Art großartig, und wenn die Situation es erfordert, können Sie sie einsetzen, ohne sich dafür zu schämen. In diesem Anhang wollen wir Ihnen einen Überblick darüber geben, worum es bei diesen Mustern geht.
Bridge
Builder
Chain of Responsibility
Flyweight
Interpreter
Mediator
Memento
Prototype
Visitor
iIndex
In diesem Abschnitt beantworten wir die brennende Frage: »Warum STEHT so was in einem Buch über Entwurfsmuster?«
Wenn Sie alle diese Fragen mit »Ja« beantworten können …
Möchten Sie Entwurfsmuster
lernen, verstehen, behalten und
anwenden,
einschließlich der OO-Entwurfsprinzipien, auf denen Entwurfsmuster basieren?
Ziehen Sie eine anregende Unterhaltung beim Abend-essen einer trockenen, langweiligen Vorlesung vor?
… ist dieses Buch etwas für Sie.
Wenn Sie eine dieser Fragen mit »Ja« beantworten müssen …
Ist die
objektorientierte Programmierung
komplettes Neuland für Sie?
Sind Sie ein Top-OO-Entwickler, der ein
Buch zum
Nachschlagen
sucht?
Sind Sie ein Softwarearchitekt auf der Suche nach
Enterprise-
Entwurfsmustern?
Haben Sie
Angst, etwas Neues auszuprobieren?
Ist Ihnen eine Wurzelkanalbehandlung lieber, als Streifen kombiniert mit Karos zu tragen? Glauben Sie, dass ein Technikfachbuch, in dem Java-Komponenten vermenschlicht werden, nicht seriös sein kann?
… ist dieses Buch nicht das richtige für Sie.
»Kann das wirklich ein seriöses Programmierlehrbuch sein?«
»Was sollen all die Abbildungen?«
»Kann ich das auf diese Weise wirklich lernen?«
Ihr Gehirn lechzt nach Neuem. Es ist ständig dabei, Ihre Umgebung abzusuchen, und es wartet auf etwas Ungewöhnliches. So ist es nun einmal gebaut, und es hilft Ihnen zu überleben.
Also, was macht Ihr Gehirn mit all den gewöhnlichen, normalen Routinesachen, denen Sie begegnen? Es tut alles in seiner Macht Stehende, damit es dadurch nicht bei seiner eigentlichen Arbeit gestört wird: Dinge zu erfassen, die wirklich wichtig sind. Es gibt sich nicht damit ab, Langweiliges zu speichern, sondern lässt dieses gar nicht erst durch den »Dies-ist-offensichtlich-nicht-wichtig«-Filter.
Woher weiß Ihr Gehirn denn, was wichtig ist? Nehmen Sie an, Sie machen einen Tagesausflug und ein Tiger springt vor Ihnen aus dem Gebüsch: Was passiert dabei in Ihrem Kopf und Ihrem Körper?
Neuronen feuern. Gefühle werden angekurbelt. Chemische Substanzen durchfluten Sie.
Und so weiß Ihr Gehirn:
Aber nun stellen Sie sich vor, Sie sind zu Hause oder in einer Bibliothek. In einer sicheren, warmen, tigerfreien Zone. Sie lernen. Bereiten sich auf eine Prüfung vor. Oder Sie versuchen, sich in irgendein schwieriges Thema einzuarbeiten, von dem Ihr Chef glaubt, Sie bräuchten dafür eine Woche oder höchstens zehn Tage.
Da ist nur ein Problem: Ihr Gehirn versucht, Ihnen einen großen Gefallen zu tun. Es versucht, dafür zu sorgen, dass diese offensichtlich unwichtigen Inhalte nicht knappe Ressourcen verstopfen. Ressourcen, die besser dafür verwendet würden, die wirklich wichtigen Dinge zu speichern. Wie Tiger. Wie die Gefahren des Feuers. Wie die Notwendigkeit, schnell das Browserfenster mit dem YouTube-Video zu einer Alien-Entführung zu verbergen, wenn Ihr Chef die Nase ins Büro steckt.
Und es gibt keine einfache Möglichkeit, Ihrem Gehirn zu sagen: »Hey, Gehirn, vielen Dank, aber egal, wie langweilig dieses Buch auch ist und wie klein der Ausschlag auf meiner emotionalen Richterskala gerade ist, ich will wirklich, dass du diesen Kram behältst.«
Wir stellen uns unsere Leser:innen als aktiv Lernende vor.
Also, was ist nötig, damit Sie etwas lernen? Erst einmal müssen Sie es aufnehmen und dann dafür sorgen, dass Sie es nicht wieder vergessen. Es geht nicht darum, Fakten in Ihren Kopf zu schieben. Nach den neuesten Forschungsergebnissen der Kognitionswissenschaft, der Neurobiologie und der Lernpsychologie gehört zum Lernen viel mehr als nur Text auf einer Seite. Wir wissen, was Ihr Gehirn anmacht.
Einige der Lernprinzipien dieser Buchreihe:
Bilder einsetzen. An Bilder kann man sich viel besser erinnern als an Worte allein und lernt so viel effektiver (bis zu 89 % Verbesserung bei Abrufbarkeitsund Lerntransferstudien). Außerdem werden die Dinge dadurch verständlicher. Text in oder neben die Grafiken setzen, auf die sie sich beziehen, anstatt darunter oder auf eine andere Seite. Die Leserinnen und Leser werden auf den Bildinhalt bezogene Probleme dann mit doppelt so hoher Wahrscheinlichkeit lösen können.
Verwenden Sie einen gesprächsorientierten Stil mit persönlicher Ansprache. Nach neueren Untersuchungen haben Studierende nach dem Lernen bei Tests um bis zu 40 % besser abgeschnitten, wenn der Inhalt Leser:innen direkt in der ersten Person und im lockeren Stil angesprochen hat statt in einem formalen Ton. Halten Sie keinen Vortrag, sondern erzählen Sie Geschichten. Benutzen Sie eine zwanglose Sprache. Nehmen Sie sich selbst nicht zu ernst. Würden Sie einer anregenden Unterhaltung beim Abendessen mehr Aufmerksamkeit schenken oder einem Vortrag?
Bringen Sie die Lernenden dazu, intensiver nachzudenken. Mit anderen Worten: Falls Sie nicht aktiv Ihre Neuronen strapazieren, passiert in Ihrem Gehirn nicht viel. Ein Leser oder eine Leserin muss motiviert, begeistert und neugierig sein und angeregt werden, Probleme zu lösen, Schlüsse zu ziehen und sich neues Wissen anzueignen. Und dafür brauchen Sie Herausforderungen, Übungen, zum Nachdenken anregende Fragen und Tätigkeiten, die beide Seiten des Gehirns und mehrere Sinne einbeziehen.
Ziehen Sie die Aufmerksamkeit der Lernenden auf sich – und behalten Sie sie. Wir alle haben schon Erfahrungen dieser Art gemacht: »Ich will das wirklich lernen, aber ich kann einfach nicht über Seite 1 hinaus wach bleiben.« Ihr Gehirn passt auf, wenn Dinge ungewöhnlich, interessant, merkwürdig, auffällig, unerwartet sind. Ein neues, schwieriges, technisches Thema zu lernen, muss nicht langweilig sein. Wenn es das nicht ist, lernt Ihr Gehirn viel schneller.
Sprechen Sie Gefühle an. Wir wissen, dass Ihre Fähigkeit, sich an etwas zu erinnern, wesentlich von dessen emotionalem Gehalt abhängt. Sie erinnern sich an das, was Sie bewegt. Sie erinnern sich, wenn Sie etwas fühlen. Nein, wir erzählen keine herzzerreißenden Geschichten über einen Jungen und seinen Hund. Was wir erzählen, ruft Überraschungs-, Neugier-, Spaß- und Was-soll-das?-Emotionen hervor und dieses Hochgefühl, das Sie beim Lösen eines Puzzles empfinden oder wenn Sie etwas lernen, das alle anderen schwierig finden. Oder wenn Sie merken, dass Sie etwas können, das dieser »Ich-binein-besserer-Techniker-als-du«-Typ aus der Technikabteilung nicht kann.
Wenn Sie wirklich lernen möchten, und zwar schneller und nachhaltiger, dann schenken Sie Ihrer Aufmerksamkeit Aufmerksamkeit. Denken Sie darüber nach, wie Sie denken. Lernen Sie, wie Sie lernen.
Die meisten von uns haben in ihrer Jugend keine Kurse in Metakognition oder Lerntheorie gehabt. Es wurde von uns erwartet, dass wir lernen, aber nur selten wurde uns auch beigebracht, wie man lernt.
Wir nehmen aber an, dass Sie wirklich etwas über Entwurfsmuster lernen möchten, wenn Sie dieses Buch in den Händen halten. Und wahrscheinlich möchten Sie nicht viel Zeit aufwenden. Und Sie wollen sich an das erinnern, was Sie lesen, und es anwenden können. Und deshalb müssen Sie es verstehen. Wenn Sie so viel wie möglich von diesem Buch profitieren wollen oder von irgendeinem anderen Buch oder einer anderen Lernerfahrung, übernehmen Sie Verantwortung für Ihr Gehirn. Ihr Gehirn im Zusammenhang mit diesem Lernstoff.
Der Trick besteht darin, Ihr Gehirn dazu zu bringen, neuen Lernstoff als etwas wirklich Wichtiges anzusehen. Als entscheidend für Ihr Wohlbefinden. So wichtig wie einen Tiger. Andernfalls stecken Sie in einem dauerhaften Kampf, in dem Ihr Gehirn sein Bestes gibt, um die neuen Inhalte davon abzuhalten, hängen zu bleiben.
Da gibt es den langsamen, ermüdenden Weg oder den schnelleren, effektiveren Weg. Der langsame Weg geht über bloße Wiederholung. Natürlich ist Ihnen klar, dass Sie lernen und sich sogar an die langweiligsten Themen erinnern können, wenn Sie sich dieselbe Sache immer wieder einhämmern. Wenn Sie nur oft genug wiederholen, sagt Ihr Gehirn: »Er hat zwar nicht das Gefühl, dass das wichtig ist, aber er sieht sich dieselbe Sache immer und immer wieder an – dann muss sie wohl wichtig sein.«
Der schnellere Weg besteht darin, alles zu tun, was die Gehirnaktivität erhöht, vor allem verschiedene Arten von Gehirnaktivität. Eine wichtige Rolle dabei spielen die auf der vorhergehenden Seite erwähnten Dinge – alles Dinge, die nachweislich dabei helfen, dass Ihr Gehirn für Sie arbeitet. So hat sich z. B. in Untersuchungen gezeigt: Wenn Wörter in den Abbildungen stehen, die sie beschreiben (und nicht irgendwo anders auf der Seite, z. B. in einer Bildunterschrift oder im Text), versucht Ihr Gehirn, herauszufinden, wie die Wörter und das Bild zusammenhängen, und dadurch feuern mehr Neuronen. Und je mehr Neuronen feuern, umso größer ist die Chance, dass Ihr Gehirn mitbekommt: Bei dieser Sache lohnt es sich, aufzupassen, und vielleicht auch, sich daran zu erinnern.
Ein lockerer Sprachstil hilft, denn Menschen tendieren zu höherer Aufmerksamkeit, wenn ihnen bewusst ist, dass sie ein Gespräch führen – man erwartet dann ja von ihnen, dass sie dem Gespräch folgen und sich beteiligen. Das Erstaunliche daran ist: Es ist Ihrem Gehirn ziemlich egal, dass die »Unterhaltung« zwischen Ihnen und einem Buch stattfindet! Wenn der Schreibstil dagegen formal und trocken ist, hat Ihr Gehirn den gleichen Eindruck wie bei einem Vortrag, bei dem in einem Raum passive Zuhörer sitzen. Nicht nötig, wach zu bleiben.
Aber Abbildungen und ein lockerer Sprachstil sind erst der Anfang.
Wir haben Bilder verwendet, weil Ihr Gehirn auf visuelle Eindrücke eingestellt ist, nicht auf Text. Soweit es Ihr Gehirn betrifft, sagt ein Bild wirklich mehr als 1.024 Worte. Und dort, wo Text und Abbildungen zusammenwirken, haben wir den Text in die Bilder eingebettet, denn Ihr Gehirn arbeitet besser, wenn der Text innerhalb der Sache steht, auf die er sich bezieht, und nicht in einer Bildunterschrift oder irgendwo vergraben im Text.
Wir haben Redundanz eingesetzt, d. h. dasselbe auf unterschiedliche Art und mit verschiedenen Medientypen ausgedrückt, damit Sie es über mehrere Sinne aufnehmen. Das erhöht die Chance, dass die Inhalte an mehr als nur einer Stelle in Ihrem Gehirn verankert werden.
Wir haben Konzepte und Bilder in unerwarteter Weise eingesetzt, weil Ihr Gehirn auf Neuigkeiten programmiert ist. Und wir haben Bilder und Ideen mit zumindest etwasemotionalemCharakter verwendet, weil Ihr Gehirn darauf eingestellt ist, auf die Biochemie von Gefühlen zu achten. An alles, was ein Gefühl in Ihnen auslöst, können Sie sich mit höherer Wahrscheinlichkeit erinnern, selbst wenn dieses Gefühl nicht mehr ist als ein bisschen Belustigung, Überraschung oder Interesse.
Die Meisterin der Muster
Wir haben einen umgangssprachlichen Stil mit direkter Anrede benutzt, denn Ihr Gehirn ist von Natur aus aufmerksamer, wenn es Sie in einer Unterhaltung wähnt, als wenn es davon ausgeht, dass Sie passiv einer Präsentation zuhören – sogar dann, wenn Sie lesen.
Wir haben mehr als 100 Aktivitäten für Sie vorgesehen, denn Ihr Gehirn lernt und behält von Natur aus besser, wenn Sie Dinge tun, als wenn Sie nur darüber lesen. Und wir haben die Übungen zwar anspruchsvoll, aber doch lösbar gemacht, denn so ist es den meisten Lesern am liebsten.
Punkt für Punkt
Wir haben mehrere unterschiedliche Lernstile eingesetzt, denn vielleicht bevorzugen Sie ein Schritt-für-Schritt-Vorgehen, während ein anderer erst einmal den groben Zusammenhang verstehen und ein Dritter einfach nur ein Codebeispiel sehen möchte. Aber ganz abgesehen von den jeweiligen Lernvorlieben profitiert jeder davon, wenn er die gleichen Inhalte in unterschiedlicher Form präsentiert bekommt.
Wir liefern Inhalte für beide Seiten Ihres Gehirns, denn je mehr Sie von Ihrem Gehirn einsetzen, umso wahrscheinlicher werden Sie lernen und behalten, und umso länger bleiben Sie konzentriert. Wenn Sie mit einer Seite des Gehirns arbeiten, bedeutet das häufig, dass sich die andere Seite des Gehirns ausruhen kann; so können Sie über einen längeren Zeitraum produktiver lernen.
Und wir haben Geschichten und Übungen aufgenommen, die mehr als einen Blickwinkel repräsentieren, denn Ihr Gehirn lernt von Natur aus intensiver, wenn es gezwungen ist, selbst zu analysieren und zu beurteilen.
Wir haben Herausforderungen eingefügt: in Form von Übungen und indem wir Fragen stellen, auf die es nicht immer eine eindeutige Antwort gibt, denn Ihr Gehirn ist darauf eingestellt, zu lernen und sich zu erinnern, wenn es an etwas arbeiten muss. Überlegen Sie: Ihren Körper bekommen Sie ja auch nicht in Form, wenn Sie die Menschen auf dem Sportplatz nur beobachten. Aber wir haben unser Bestes getan, um dafür zu sorgen, dass Sie – wenn Sie schon hart arbeiten – an den richtigenDingen arbeiten. Dass Sie nicht einen einzigen Dendriten darauf verschwenden, ein schwer verständliches Beispiel zu verarbeiten oder einen schwierigen, mit Fachbegriffen gespickten oder übermäßig gedrängten Text zu analysieren.
Wir haben Menschen eingesetzt. In Geschichten, Beispielen, Bildern usw. – denn Sie sind ein Mensch. Und Ihr Gehirn schenkt Menschen mehr Aufmerksamkeit als Dingen.
So, wir haben unseren Teil der Arbeit geleistet. Der Rest liegt bei Ihnen. Diese Tipps sind ein Anfang; hören Sie auf Ihr Gehirn und finden Sie heraus, was bei Ihnen funktioniert und was nicht. Probieren Sie neue Wege aus.
Schneiden Sie dies aus und heften Sie es an Ihren Kühlschrank.
Immer langsam. Je mehr Sie verstehen, umso weniger müssen Sie auswendig lernen.
Lesen Sie nicht nur. Halten Sie inne und denken Sie nach. Wenn das Buch Sie etwas fragt, springen Sie nicht einfach zur Antwort. Stellen Sie sich vor, dass Sie das wirklich jemand fragt. Je gründlicher Sie Ihr Gehirn zum Nachdenken zwingen, umso größer ist die Chance, dass Sie lernen und behalten.
Bearbeiten Sie die Übungen. Machen Sie sich selbst Notizen.
Wir haben sie entworfen, aber wenn wir sie auch für Sie lösen würden, wäre dass, als würde ein anderer Ihr Training für Sie absolvieren. Und sehen Sie sich die Übungen nicht einfach nur an.Benutzen Sie einen Bleistift. Es deutet vieles darauf hin, dass körperliche Aktivität beim Lernen den Lernerfolg erhöhen kann.
Lesen Sie die Abschnitte »Es gibt keine Dummen Fragen«.
Und zwar alle. Das sind keine Zusatzanmerkungen – sie gehören zum Kerninhalt! Überspringen Sie sie nicht.
Lesen Sie dies als Letztes vor dem Schlafengehen. Oder lesen Sie danach zumindest nichts Anspruchsvolles mehr.
Ein Teil des Lernprozesses (vor allem die Übertragung in das Langzeitgedächtnis) findet erst statt, nachdem Sie das Buch zur Seite gelegt haben. Ihr Gehirn braucht Zeit für sich, um weitere Verarbeitung zu leisten. Wenn Sie in dieser Zeit etwas Neues aufnehmen, geht ein Teil dessen, was Sie gerade gelernt haben, verloren.
Trinken Sie Wasser. Viel.
Ihr Gehirn arbeitet am besten in einem schönen Flüssigkeitsbad. Austrocknung (zu der es schon kommen kann, bevor Sie überhaupt Durst verspüren) beeinträchtigt die kognitive Funktion.
Reden Sie drüber. Laut.
Sprechen aktiviert einen anderen Teil des Gehirns. Wenn Sie etwas verstehen wollen oder Ihre Chancen verbessern möchten, sich später daran zu erinnern, sagen Sie es laut. Noch besser: Versuchen Sie, es jemand anderem laut zu erklären. Sie lernen dann schneller und haben vielleicht Ideen, auf die Sie beim bloßen Lesen nie gekommen wären.
Hören Sie auf Ihr Gehirn.
Achten Sie darauf, Ihr Gehirn nicht zu überladen. Wenn Sie merken, dass Sie etwas nur noch überfliegen oder dass Sie das gerade erst Gelesene vergessen haben, ist es Zeit für eine Pause. Ab einem bestimmten Punkt lernen Sie nicht mehr schneller, indem Sie mehr hineinzustopfen versuchen; das kann sogar den Lernprozess stören.
Aber bitte mit
Gefühl!
Ihr Gehirn muss wissen, dass es um etwas Wichtiges geht. Lassen Sie sich in die Geschichten hineinziehen. Erfinden Sie eigene Bildunterschriften für die Fotos. Über einen schlechten Scherz zu stöhnen, ist immer noch besser, als gar nichts zu fühlen.
Entwerfen Sie etwas!
Wenden Sie das hier Gelernte auf einen Entwurf an, an dem Sie gerade arbeiten, oder gestalten Sie ein älteres Projekt damit um. Tun Sie irgendetwas, um weitere Erfahrungen zu sammeln, die über die Übungen und Aktivitäten in diesem Buch hinausgehen. Sie brauchen dazu nur einen Bleistift und ein Problem, das es zu lösen gilt … ein Problem, das von einem oder mehreren Entwurfsmustern profitieren würde.
Dies ist ein Lehr- und Lernbuch, kein Nachschlagewerk. Wir haben absichtlich alles weggelassen, das dem Lernen im Weg stehen könnte, egal woran wir gerade im Buch arbeiten. Beim ersten Durchlesen müssen Sie am Anfang beginnen, weil das Buch an einigen Stellen davon ausgeht, dass sie bestimmte Dinge bereits gesehen und gelernt haben.
Auch wenn Sie UML wahrscheinlich schon einmal begegnet sind, wird es in diesem Buch nicht behandelt und ist auch keine Voraussetzung. Keine Sorge, wenn Ihnen UML vollkommen neu ist. Wir geben Ihnen unterwegs die nötigen Hinweise. Das heißt, Sie müssen sich nicht gleichzeitig über Entwurfsmuster und UML den Kopf zerbrechen. Unsere Diagramme sind im »UML-Stil« gehalten. Das heißt, wir versuchen, möglichst nah am echten UML zu bleiben, werden die Regeln hier und da aber auch brechen – meistens aus rein egoistischen und künstlerischen Gründen.
Inzwischen gibt es eine Menge Entwurfsmuster: Die ursprünglichen Grundmuster (auch als GoF-Muster – »Gang of Four« – bezeichnet), Enterprise-Java-Muster, architektonische Muster, Gamedesignmuster und viele mehr. Allerdings war es uns wichtig, dass das Buch weniger wiegt als die Person, die es liest. Daher konzentrieren wir uns hier auf die wirklich wichtigen objektorientierten Kernmuster und sorgen dafür, dass Sie wirklich, wahrhaftig und vollständig verstehen, wie und wann sie benutzt werden. Im Anhang dieses Buchs finden Sie einen Überblick über einige andere Muster (die Sie wahrscheinlich deutlich seltener nutzen werden – wenn überhaupt). Auf jeden Fall werden Sie nach der Lektüre von Entwurfsmuster von Kopf bis Fuß in der Lage sein, einen beliebigen Musterkatalog in die Hand zu nehmen und schnell loszulegen.
Die Übungen und Aktivitäten sind keine Extras, sondern gehören zum Kerninhalt dieses Buchs. Einige Übungen dienen der Erinnerung, andere dem Verständnis, und einige helfen Ihnen, das Gelernte anzuwenden. Überspringen Sie die Übungen nicht. Allein die Kreuzworträtsel sind freiwillig. Allerdings geben sie Ihrem Gehirn Gelegenheit, die Wörter in einem anderen Kontext wahrzunehmen.
Wenn wir sagen, dass »ein Objekt durch Komposition mit einem anderen Objekt zusammengefügt« wurde, meinen wir damit, dass eine HAT-EIN-Beziehung zwischen ihnen besteht. So wurde dieser Begriff traditionell und auch im GoF-Buch verwendet (was das ist, erfahren Sie später). In UML wurde dieser Begriff dann später in verschiedene Kompositionstypen aufgegliedert. Aber auch wenn Sie UML-Experte sind, werden Sie das Buch lesen und den Begriff »Komposition« jeweils leicht in den genaueren Fachbegriff übersetzen können.
Ein wesentliches Anliegen eines Von Kopf bis Fuß-Buchs ist: Wir wollen, dass Sie es wirklich kapieren. Und wir wollen, dass Sie sich am Ende des Buchs an das Gelernte erinnern. Beständigkeit und Erinnern ist bei den meisten Referenzbüchern nicht das Ziel, aber in diesem Buch geht es ums Lernen. Deshalb werden Sie einige der hier gezeigten Konzepte mehr als einmal zu Gesicht bekommen.
Unsere Leserinnen und Leser berichten uns, dass sie es frustrierend finden, sich durch 200 Zeilen Code graben zu müssen, um die beiden Zeilen zu finden, die sie wirklich verstehen müssen. Die meisten Beispiele in diesem Buch werden mit so wenig Kontext wie möglich gezeigt, damit der Teil, den Sie lernen sollen, klar und einfach ist. Sie dürfen nicht erwarten, dass der Code robust oder gar vollständig ist. Die Beispiele in diesem Buch wurden speziell für Lehrzwecke geschrieben und sind nicht immer voll funktionsfähig (obwohl wir versucht haben, das so weit wie möglich sicherzustellen).
In manchen Fällen haben wir nicht alle nötigen Importanweisungen abgedruckt. Wir gehen davon aus, dass Sie als Java-Programmierer wissen, dass ArrayList in java.util zu finden ist. Wenn die Importe nicht Teil der Kern-JSE-API sind, erwähnen wir das. Außerdem haben wir den gesamten Quellcode zum Herunterladen bereitgestellt. Sie finden ihn unter:
http://wickedlysmart.com/head-first-design-patterns
Da wir uns auf den Lernaspekt des Codes konzentrieren wollen, haben wir unsere Klassen auch nicht in Pakete gesteckt (mit anderen Worten, sie liegen alle im Java-Standardverzeichnis). In der realen Welt empfehlen wir das allerdings nicht – wenn Sie sich die Codebeispiele herunterladen, werden Sie feststellen, dass dort alle Klassen in Paketen organisiert sind.
Für manche dieser Übungen gibt es keine richtige Lösung, und bei anderen gehört es zum Lernprozess der Kopfnuss-Aktivitäten, dass Sie selbst überlegen, ob und wann Ihre Lösungen richtig sind. Bei einigen Kopfnuss-Übungen finden Sie Hinweise, die Sie in die richtige Richtung lenken.
Jef Cumps
Valentin Crettaz
Barney Marispini
Dirk Schreckmann
Jason Menard
Julian Setiawan
David Powers
Trisha Gee
An O’Reilly:
Unser besonderer Dank geht an Mike Loukides bei O’Reilly, der alles ins Leben gerufen und geholfen hat, aus dem »Head First«-Konzept eine Buchreihe zu entwickeln (»Head First« heißt die amerikanische Reihe, aus der dieses Buch stammt). Und ein großes Dankeschön auch an die treibende Kraft hinter Head First, Tim O’Reilly. Dank ebenfalls an die kluge Head First-»Serienmutter« Kyle Hart, an »InDesign-König« Ron Bilodeau, an Rockstar Ellie Volckhausen für ihr geniales Titeldesign, an Melanie Yarbrough für das Hüten der Herstellung, an Colleen Gorman für das gnadenlose Sprachkorrektorat und an Bob Pfahler für einen deutlich verbesserten Index. Vielen Dank schließlich an Mike Hendrickson und Meghan Blanchette dafür, dass sie sich für dieses Entwurfsmusterbuch eingesetzt und das Team zusammengestellt haben.
An unsere tapferen Fachgutachter:
Ganz besonders dankbar sind wir unserem Chef-Reviewer Johannes deJong. Du bist unser Held, Johannes. Überaus dankbar sind wir auch für die Beiträge des Co-Managers im Javaranch-Gutachterteam, des verstorbenen Philippe Maquet. Du ganz persönlich hast das Leben Tausender Entwickler bereichert und einen unauslöschlichen Eindruck in ihrem (und in unserem) Leben hinterlassen. Jef Cumps hat ein beängstigendes Talent, Probleme in unseren Rohfassungen der Kapitel zu finden, was für das Buch eine große Rolle gespielt hat. Danke, Jef ! Valentin Crettaz (unser AOP-Fachmann), der schon seit dem allerersten Buch der Reihe dabei ist, hat uns (wie immer) gezeigt, wie sehr wir doch auf sein Fachwissen und seinen Einblick angewiesen sind. Du bist spitze, Valentin (aber leg die Krawatte ab!).
Zwei Neulinge im Head First-Fachgutachterteam, Barney Marispini und Ike Van Atta, haben ganz hervorragende Arbeit für das Buch geleistet – ihr habt uns wirklich entscheidende Rückmeldungen gegeben. Danke, dass ihr zum Team gestoßen seid.
Ausgezeichnete fachliche Hilfe haben wir auch von den Javaranch-Moderatoren und -Gurus Mark Spritzler, Jason Menard, Dirk Schreckmann, Thomas Paul und Margarita Isaeva erhalten. Und wie immer danken wir besonders dem Obercowboy von javaranch.com, Paul Wheaton.
Danke auch an die Teilnehmer der Endrunde im Javaranch-Wettbewerb »Pick the Head First Design Patterns Cover«. Der Gewinner, Si Brewster, hat uns mit seinem Beitrag überzeugt, die Frau auszuwählen, die Sie jetzt auf unserem Einband sehen. In der Endrunde waren außerdem Andrew Esse, Gian Franco Casula, Helen Crosbie, Pho Tek, Helen Thomas, Sateesh Kommineni und Jeff Fisher.
Für die Aktualisierung in 2014 danken wir: George Hoffer, Ted Hill, Todd Bartoszkiewicz, Sylvain Tenier, Scott Davidson, Kevin Ryan, Rich Ward, Mark Francis Jaeger, Mark Masse, Glenn Ray, Bayard Fetler, Paul Higgins, Matt Carpenter, Julia Williams, Matt McCullough und Mary Ann Belarmino.
An O’Reilly:
Zuallererst ist da Mary Treseler. Sie ist die Superheldin, ohne die gar nichts läuft. Wir sind ihr auf ewig für alles dankbar, was sie für O’Reilly, Head First und die Autoren tut. Melissa Duffield und Michele Cronin haben viele Wege freigeräumt, die zu dieser zweiten Auflage geführt haben. Ein großes Dankeschön auch an Rachel Monaghan, die unserem Text mit ihrem Sprachkorrektorat zu neuem Glanz verholfen hat. Kristen Brown sorgte dafür, dass dieses Buch online und im Druck gut aussieht. Die Magie von Ellie Volckhausen hat dieser zweiten Auflage zu einem neuen Cover verholfen. Vielen Dank an euch alle!
An unsere Fachgutachter für die zweite Auflage:
Wir danken unseren Fachgutachtern für die zweite Auflage dafür, dass sie diese Aufgabe 15 Jahre später übernommen haben. David Powers ist unser Gutachter der Wahl (ja unser – denken Sie nicht einmal daran, ihn zu bitten, Ihr Buch zu begutachten), weil ihm einfach nichts entgeht. Mit seinen detaillierten Kommentaren, Vorschlägen und Rückmeldungen ging George Heineman weit über das normale Maß hinaus und bekommt dafür den MVP-Award (Most Valuable Player) für diese Auflage. Trisha Gee und Julian Setiawan halfen mit ihren unschätzbar wertvollen Java-Kenntnissen dabei, all die peinlichen und schauderhaften Java-Fehler zu vermeiden. Herzlichen Dank an euch alle!
Ein besonderes Dankeschön geht an Erich Gamma, der weit über seine Aufgabe als Gutachter hinausgegangen ist (er hat sogar ein Vorabmanuskript mit in den Urlaub genommen). Erich, dein Interesse an diesem Buch hat uns inspiriert, und dein technisches Gutachten hat es enorm verbessert. Vielen Dank auch an die gesamte Gang of Four für ihre Unterstützung, ihr Interesse und für einen besonderen Auftritt in Objectville. Weiteren Dank schulden wir Ward Cunningham und der Patterns-Community, die das Portland Pattern Repository angelegt haben, das uns beim Schreiben dieses Buchs eine Ressource von unschätzbarem Wert war.
Ein großes Dankeschön an Mike Loukides, Mike Hendrickson und Meghan Blanchette. Mike L. hat uns bei jedem Schritt dieses Wegs begleitet. Mike, deine fundierten Rückmeldungen haben geholfen, diesem Buch eine Form zu geben, und dein Ansporn brachte uns vorwärts. Mike H., danke für deine Beständigkeit über fünf Jahre, in denen du versucht hast, uns zum Schreiben eines Entwurfsmusterbuchs zu bewegen: Wir haben es schließlich geschafft und sind froh, dass wir auf Head First gewartet haben.
Es braucht ein ganzes Dorf, um so ein Fachbuch zu schreiben: Bill Pugh und Ken Arnold halfen mit ihrem Fachwissen zu Singleton. Joshua Marinacci unterstützte uns mit Tipps und Ratschlägen zu Swing. John Brewers »Why a Duck?«-Artikel diente als Inspiration für SimUDuck (zum Glück mag auch er Enten). Dan Friedman inspirierte uns mit dem Beispiel zum Kleinen Singleton. Daniel Steinberg diente als unser »technischer Verbindungsoffizier« und als unser emotionales Unterstützernetzwerk. Danke auch an James Dempsey von Apple für die Erlaubnis, seinen MVC-Song zu benutzen. Und danke an Richard Warburton, der sicherstellte, dass unsere Java-8-Code-Updates für die aktualisierte Version dieses Buchs auf dem neuesten Stand waren.
Zum Schluss ein persönliches Dankeschön an das Javaranch-Gutachterteam für ihre erstklassigen Reviews und die herzliche Unterstützung. In diesem Buch steckt mehr von euch, als ihr denkt.
Das Schreiben eines »Von Kopf bis Fuß«-Buchs ist ein wilder Ritt mit zwei erstaunlichen Tour-Guides: Kathy Sierra und Bert Bates. Wenn man mit Kathy und Bert zusammenarbeitet, schmeißt man alle Konventionen zum Schreiben von Büchern über Bord und betritt eine Welt voller Geschichten, Lerntheorie, Kognitionswissenschaft und Popkultur, in der es grundsätzlich um die Leserinnen und Leser geht.
Irgendjemand hat Ihr Problem schon gelöst. In diesem Kapitel lernen Sie, warum (und wie) Sie die Weisheit und die Lehren anderer Entwickler nutzen können, die die gleichen Designprobleme bereits hatten und die Reise überlebt haben. Bevor dieses Kapitel zu Ende ist, kümmern wir uns um die Verwendung und die Vorteile der Entwurfsmuster, sehen uns ein paar grundsätzliche objektorientierte (OO-)Designprinzipien an und gehen mit Ihnen zusammen ein Beispiel für die Funktionsweise von Entwurfsmustern durch. Die beste Möglichkeit, die Muster zu verwenden, ist, sie in Ihr Gehirn zu laden und dann die Stellen in Ihren Designs und bestehenden Programmen zu erkennen, an denen der Einsatz sinnvoll ist. Im Gegensatz zur Codewiederverwendung können Sie mit Entwurfsmustern die Erfahrung anderer Menschen wiederverwenden.
Joe arbeitet für ein Unternehmen, das das extrem erfolgreiche Ententeich-Simulationsspiel SimUDuck herstellt. Das Spiel kann viele Entenarten beim Schwimmen und Quaken zeigen. Die ursprünglichen Entwickler des Systems setzten klassische OO-Techniken ein. Sie erstellten eine Duck-(»Ente«-)Superklasse, von der alle anderen Ententypen erbten.
Im vergangenen Jahr sah sich das Unternehmen einem wachsenden Druck von Mitbewerbern ausgesetzt. Nach einem einwöchigen Brainstorming beim Golfen waren sich die Chefs darüber einig, dass die Zeit reif sei für eine große Innovation. Sie brauchten etwas wirklich Eindrucksvolles, das sie in der folgenden Woche bei der in Maui/Hawaii stattfindenden Aktionärsversammlung vorzeigen konnten.
Die Geschäftsleitung hat entschieden, dass fliegende Enten genau das Richtige sind, um die Mitbewerber aus dem Feld zu drängen. Und natürlich hat Joes Manager bestätigt, das sei überhaupt kein Problem. Joe werde in einer Woche schon irgendwas aus dem Hut zaubern. »Schließlich«, sagte Joes Chef, »ist er OO-Programmierer. So schwer kann das ja nicht sein.«
Was ist passiert?
Joe hatte übersehen, dass nicht alle Subklassen von Duck fliegen dürfen. Das neue Verhalten, um das Joe die Superklasse Duck erweitert hatte, war nun auch in Subklassen verfügbar, die es eigentlich nicht hätten haben sollen. Plötzlich konnten in SimUDuck auch leblose Objekte fliegen.
Ein lokalisiertes Code-Update hatte nicht lokale Nebenwirkungen (fliegende Gummienten)!
Spitzen Sie Ihren Bleistift
Welche der folgenden Punkte sind Nachteile beim Einsatz von Vererbung, um das Verhalten der Enten zu implementieren? (Kreuzen Sie alle zutreffenden Punkte an.)
A. Code wird in Subklassen dupliziert.B. Änderungen des Laufzeitverhaltens sind schwierig.C. Wir können Enten nicht das Tanzen beibringen.D. Es ist schwer, alle Verhaltensweisen der Enten genau zu kennen.E. Enten können nicht gleichzeitig fliegen und quaken.F. Änderungen können sich unbeabsichtigt auf andere Enten auswirken.Joe begriff, dass Vererbung offenbar nicht die Antwort war. Er hatte nämlich gerade ein Memo erhalten, in dem die Geschäftsleitung mitteilte, dass das Produkt alle sechs Monate aktualisiert werden soll (wie genau, war noch nicht entschieden). Joe wusste, dass sich die Spezifikationen ständig ändern würden und dass er möglicherweise gezwungen wäre, die fly()- und quack()-Methoden für jede einzelne Duck-Subklasse im Programm zu überschreiben … für immer.
Er brauchte also einen besseren Weg, das Fliegen und Quaken nur für bestimmte (aber nicht alle) Enten anzupassen.
Was halten SIE von diesem Design?
Wir wissen, dass nicht alle Subklassen fliegen oder quaken sollen. Vererbung ist also die falsche Antwort. Wenn die Subklassen das Flyable- bzw. das Quackable-Interface implementieren, lösen wir immerhin einen Teil des Problems (keine fliegenden Gummienten mehr). Gleichzeitig wird die Codewiederverwendbarkeit für dieses Verhalten komplett zerstört, und wir tauschen einen Wartungsalptraum nur durch einen anderen aus. Und natürlich kann es verschiedene Arten von Flugverhalten unter den flugfähigen Enten geben …
An dieser Stelle warten Sie vermutlich auf ein Entwurfsmuster, das auf einem weißen Ross angaloppiert kommt und Rettung bringt. Aber wo bleibt da der Spaß? Nein. Wir finden unsere Lösung auf die altmodische Art – indem wir gute alte OO-Designprinzipien anwenden.
Okay, worauf können Sie sich in der Softwareentwicklung immer verlassen?
Egal woran Sie arbeiten und was oder in welcher Sprache Sie programmieren – was ist die einzig wahre Konstante, die sich niemals ändert?
(Benutzen Sie einen Spiegel, um die Antwort zu lesen)
Ganz gleich, wie gut Ihr Programm entworfen ist: Im Laufe der Zeit muss es wachsen, sich verändern und schließlich sterben.
Spitzen Sie Ihren Bleistift
Viele Dinge können Veränderungen bewirken. Notieren Sie einige Gründe dafür, dass Sie den Code Ihrer Applikation ändern mussten (um Ihnen ein Beispiel zu geben, haben wir ein paar unserer eigenen Gründe schon aufgeschrieben.) Vergleichen Sie Ihre Antworten mit der Lösung am Ende des Kapitels, bevor Sie weitermachen.
Meine Kunden oder Benutzer haben sich für etwas anderes oder neue Funktionalitäten entschieden.
Mein Unternehmen ist zu einem anderen Datenbankanbieter gewechselt. Außerdem haben dessen Daten ein anderes Format. Argh!
Wir wissen also, dass Vererbung hier nicht so gut funktioniert, weil sich das Verhalten der Enten über die Subklassen verändert und nicht alle