Beruflich Dokumente
Kultur Dokumente
Full Download Design Patterns Mit Java 1St Edition Olaf Musch 2 Online Full Chapter PDF
Full Download Design Patterns Mit Java 1St Edition Olaf Musch 2 Online Full Chapter PDF
Olaf Musch
Visit to download the full and correct content document:
https://ebookstep.com/product/design-patterns-mit-java-1st-edition-olaf-musch-2/
More products digital (pdf, epub, mobi) instant
download maybe you interests ...
https://ebookstep.com/product/design-patterns-mit-java-1st-
edition-olaf-musch/
https://ebookstep.com/product/design-patterns-mit-java-1st-
edition-olaf-musch-3/
https://ebookstep.com/product/masterkurs-client-server-
programmierung-mit-java-anwendungen-entwickeln-mit-standard-
technologien-6th-edition-dietmar-abts/
https://ebookstep.com/product/life-patterns-chinese-edition-yang-
zhiping/
Grundkurs JAVA: Die Einführung in das objektorientierte
Programmieren mit Beispielen und Übungsaufgaben 12th
Edition Dietmar Abts
https://ebookstep.com/product/grundkurs-java-die-einfuhrung-in-
das-objektorientierte-programmieren-mit-beispielen-und-
ubungsaufgaben-12th-edition-dietmar-abts/
https://ebookstep.com/product/fpga-hardware-entwurf-schaltungs-
und-system-design-mit-vhdl-und-c-c-frank-kesel/
https://ebookstep.com/product/let-s-play-programmieren-lernen-
mit-java-und-minecraft-plugins-erstellen-ohne-vorkenntnisse-5th-
edition-daniel-braun/
Java Challenge Fit für das Job Interview und die Praxis
mit mehr als 100 Aufgaben und Musterlösungen 1st
Edition Michael Inden
https://ebookstep.com/product/java-challenge-fit-fur-das-job-
interview-und-die-praxis-mit-mehr-als-100-aufgaben-und-
musterlosungen-1st-edition-michael-inden/
https://ebookstep.com/product/die-reformation-voraussetzungen-
und-durchsetzung-olaf-morke/
Olaf Musch
Der Verlag, die Autoren und die Herausgeber gehen davon aus, dass die
Angaben und Informationen in diesem Werk zum Zeitpunkt der
Verö ffentlichung vollstä ndig und korrekt sind. Weder der Verlag noch
die Autoren oder die Herausgeber ü bernehmen, ausdrü cklich oder
implizit, Gewä hr fü r den Inhalt des Werkes, etwaige Fehler oder
Ä ußerungen. Der Verlag bleibt im Hinblick auf geografische
Zuordnungen und Gebietsbezeichnungen in verö ffentlichten Karten
und Institutionsadressen neutral.
Klassenbasiert Objektbasiert
Creational Patterns Factory Method Abstract Factory
(Erzeugungsmuster) Builder
Prototype
Klassenbasiert Objektbasiert
Singleton
Structural Patterns Adapter Adapter
(Strukturmuster) Bridge
Composite
Decorator
Facade
Flyweight
Proxy
Behavioral Patterns Interpreter Chain of Responsibility
(Verhaltensmuster) Template Method Command
Iterator
Mediator
Memento
Observer
State
Strategy
Visitor
Tipp
Setzen Sie Muster aber bitte mit Bedacht ein. Das Wissen ü ber Design
Patterns darf nicht dazu verleiten, dass Sie Ihre Software mit Patterns
spicken. Die meisten Muster verlangen, dass Sie zusä tzliche Klassen
entwickeln. Wenn Sie versuchen, in einer ü berschaubaren
Anwendung mö glichst viele Muster zu realisieren, wird das Ergebnis
ein schlecht wartbares, unnö tig aufgeblä htes System sein. Haben Sie
den Mut, auf ein Muster zu verzichten oder ein Muster sogar zu
entfernen! Muster haben keinen Selbstzweck. Ihr Ziel als
Programmierer sollte es sein, ü bersichtlichen und unspektakulä ren
Programmcode zu erzeugen.
Lassen Sie mich in diesem Zusammenhang noch einen Punkt
erwä hnen: Erweiterungen. Eine Konstante der
Anwendungsentwicklung ist, dass Anforderungen – und damit der
Quellcode – wachsen. Es ist einerseits sinnvoll, Programme so zu
gestalten, dass sie in Zukunft erweitert werden kö nnen. Doch die
Ausrichtung auf kü nftige Anforderungen sollte andererseits sehr
zurü ckhaltend stattfinden. Bedenken Sie, dass Sie im „Hier und Jetzt“
Programme schreiben, die im „Hier und Jetzt“ eingesetzt werden.
Auf der Webseite stackoverflow.com, einer seit 2008 bestehenden
großen Entwickler-Community, habe ich folgende Formulierung
gefunden, die mir sehr gut gefallen hat: „Design Pattern is meant to be
a solution to a problem, not a solution looking for a problem.“1
Tab. 1.2 Kategorien von Entwurfsmustern nach Buschmann et al., Seiten 376 f.
Das von mir verwendete Java Development Kit (JDK) 16 finden Sie
bei https://jdk.java.net/archive/(bei Verfü gbarkeit dieses Buches
im Handel dü rfte es nicht mehr das allerneueste JDK sein). Die
Beispiele sollten aber zumindest unter Java 17 ebenfalls lauffä hig
sein.
1.3 Zusammenfassung
Gehen Sie das Kapitel noch mal stichwortartig durch:
Design Patterns sind bewä hrte Lö sungen fü r eine unbestimmte Zahl
von Problemen, die in dieser oder einer ä hnlichen Form immer
wieder auftreten.
Design Patterns schaffen ein Vokabular, das fü r Programmierer zur
Allgemeinbildung gehö rt.
Design Patterns kann man nicht erfinden, sondern nur entdecken –
genau wie die Zahl Pi.
Die GoF – Gang of Four – hat maßgeblich dazu beigetragen, Design
Patterns in die Softwareentwicklung einzufü hren.
Das Buch der GoF umfasst 23 Patterns, es gibt jedoch sehr viele mehr.
Die GoF hat ihre Patterns in drei Kategorien eingeteilt:
– Erzeugungsmuster beschreiben, wie Objekte effizient erstellt
werden kö nnen,
– Strukturmuster beschreiben, wie Klassen zu sinnvollen grö ßeren
Einheiten zusammengesetzt werden kö nnen,
– Verhaltensmuster beschreiben das Zusammenspiel einzelner
Objekte.
Eine Musterbeschreibung setzt sich aus den folgenden wesentlichen
Elementen zusammen:
– einem einprä gsamen und prä gnanten Namen,
– einem Problemabschnitt, der zeigt, wann das Muster angewandt
wird,
– einem Lö sungsabschnitt, der die beteiligten Einheiten und deren
Zusammenhä nge beschreibt,
– einem Abschnitt zu den Konsequenzen, der auf die Vor- und
Nachteile des Musters eingeht.
Fußnoten
1 https://stackoverflow.c om/questions/11079605/adapter-any-real-example-of-
adapter-pattern#comment14506747_11079605.
© Der/die Autor(en), exklusiv lizenziert durch Springer Fachmedien Wiesbaden
GmbH, ein Teil von Springer Nature 2021
O. Musch, Design Patterns mit Java
https://doi.org/10.1007/978-3-658-35492-3_2
2. Objektorientierte Programmierung
und Entwurfsprinzipien
Olaf Musch1
(1) Braunschweig, Deutschland
Ich habe Ihnen das Beispiel bewusst ü berspitzt vorgestellt, weil ich
Sie davon ü berzeugen mö chte, dass Vererbung Sie in ein sehr starres
System fü hren kann, in dem eine Hierarchie besteht, die weder in der
Breite noch in der Tiefe ü berblickt werden kann. Die Klassen sind so
speziell, dass sie an keiner anderen Stelle wiederverwendet werden
kö nnen.
Das Beispiel wä re mit Komposition sicher sehr viel besser
entwickelt worden. Konkret bedeutet das, dass Sie eine Schnittstelle
Fressverhalten entwickeln, von der die Klassen
Fleischfresser und Vegetarier abgeleitet werden. In diesen
Klassen wird gespeichert, wie viel Fleisch bzw. wie viel Gras pro Tag
vorgesehen ist. Die Kuh muss genauso wie die Taube das Attribut
Fressverhalten fressverhalten = new Vegetarier()
haben. Und folglich werden sowohl der Lö we als auch der Adler das
Attribut Fressverhalten fressverhalten = new
Fleischfresser() bekommen. Das relevante Verhalten wird also
nicht vererbt, sondern in einer eigenen Klasse definiert. Das
Klassendiagramm Abb. 2.2 zeigt das Zusammenspiel.
Hintergrundinformation
Seit Java 8 kö nnen in Interfaces statische und nichtstatische Methoden
definiert werden. Es ist also mö glich, von einem Interface Verhalten zu
„erben“. Der Unterschied zwischen abstrakter Klasse und Interface wird
unschä rfer – auch vor diesem Hintergrund ist es wichtig, den Begriff
der Schnittstelle im Kontext Design Patterns weit auszulegen.
Der Unterschied zwischen abstrakter Klasse und Interface ist, dass
Interfaces Rollen definieren, wä hrend abstrakte Klassen die Aufgabe
haben, eine Vererbungshierarchie zu begrü nden. Interfaces sind im
Gegensatz zu abstrakten Klassen stateless, und wenn Sie in einem
Interface eine Methode definieren, dann geben Sie der
implementierenden Klasse ein Default-Verhalten mit. Sinnvoll ist das,
wenn Sie ein Interface erweitern, aber nicht alle implementierenden
Klassen anpassen wollen oder kö nnen.
Es ist in der Programmierung immer sehr arbeitsaufwä ndig, wenn
ein Interface erweitert wird; alle Klassen, die dieses Interface
implementieren, mü ssen angepasst werden. Mit den Default-Methoden
ist es deutlich einfacher geworden.
Ich blende diesen Aspekt jedoch bewusst aus, um dieses Buch
mö glichst sprach- und versionsunabhä ngig zu halten.
Beim Observer Pattern und auch beim Mediator Pattern werden Sie
eine beliebig große Anzahl von Objekten haben, die miteinander in
Beziehung stehen. Schauen Sie sich dort die Weinhandels-Simulation
an. Sie kö nnen dort die Consumer genauso austauschen wie die
Producer. Fü r den Mediator dort ist es lediglich wichtig, dass er es mit
Objekten vom Typ ConsumerIF oder ProducerIF zu tun hat. Welche
konkrete Klasse sich dahinter verbirgt, ob ein privater Kunde oder ein
Tante-Emma-Laden, spielt keine Rolle. Die Objekte sind lose gekoppelt
und lose Kopplung spricht genau wie hohe Kohä sion fü r ein gutes
Design.
Beim Observer Pattern werden Sie sowohl Studenten als auch
Angestellte in die Rolle „Beobachter“ bringen. Fü r die Eventquellen
wird es lediglich wichtig sein, dass sie mit Objekten kommunizieren,
die der erwarteten Schnittstelle JobObserver entsprechen und die
Methode update() definieren. Sowohl die Anzahl als auch die Art der
konkreten Implementierung der Beteiligten kö nnen in beiden
Projekten variieren. Kann ich Sie davon ü berzeugen, dass Ihre
Implementierung dadurch, dass Sie gegen eine Schnittstelle
programmiert haben, wesentlich an Unabhä ngigkeit und Flexibilitä t
gewinnen wird?
Falls nein, mö chte ich als letztes Beispiel auf das Kapitel zum
Iterator verweisen. Sie werden sich dort mit Listen beschä ftigen. Es gibt
eine Vielzahl von Listen: ArrayList, LinkedList und viele weitere
aus der Klassenbibliothek sowie natü rlich die Listen, die Sie selbst
programmieren. Alle diese Listen implementieren das Interface List.
Wenn eine Methode nun eine Liste – allgemein gesprochen ein Objekt
vom Typ List – zurü ckgibt, mü ssen Sie sich keine Gedanken ü ber die
dahinterstehende Implementierung machen. Die Methode getList()
im unten stehenden Beispiel gibt irgendeine Liste zurü ck, deren Klasse
Sie nicht kennen. Die Methode testeListe() ruft die Methode
getList() auf und lä sst sich eine Liste zurü ckgeben.
Danach wird auf dem zurü ckgegebenen Objekt die Methode
size() aufgerufen, die in der Schnittstelle List vorgeschrieben ist. An
keiner Stelle innerhalb der Test-Methode ist es relevant, ob Sie sich die
Grö ße einer ArrayList, einer LinkedList oder einer sonstigen
anderen Liste zurü ckgeben lassen.
List liste;
void testeListe() {
liste = getList();
System.out.println(„Anzahl Elemente:“ + liste.size() );
}
List getList() {
// ... gibt irgendein Objekt vom Typ „List“ zurück
}
Sie entwickeln guten Code, wenn Sie sich an das Prinzip halten, das
die GoF formuliert hat: „Programmiere auf eine Schnittstelle hin,
nicht auf eine Implementierung“.
Family Oleaceæ
The rare fitness of this simile might pass unheeded if we did not
study trees first and poetry afterwards.
In Europe ash seeds were used for medicine. They were called
lingua avis by the old apothecaries, on account of a fancied
resemblance to the tongues of birds; young ash seeds were also
pickled and used in salads. Evelyn says the wood “is of all others the
sweetest of our forest fuelling, and the fittest for ladies’ chambers.”
The horsechestnuts, the maples, and the ashes are the three
genera of large trees which have opposite leaf-scars.
Chapter V
THE WALNUTS AND HICKORIES
1. Butternut. 2. Black Walnut. 3. Pignut Hickory. 4. Mockernut
Hickory. 5. Shagbark Hickory. 6. Bitternut Hickory.
Chapter V
THE WALNUTS AND HICKORIES
Family Juglandaceæ
Among all the native trees, the butternut is perhaps the most
interesting for winter study. The naked buds, the irregular leaf-scars,
with horseshoe bundle-scars, the superposed buds containing the
lateral branches and the queerly marked buds of the staminate
flowers, the chambered pith, and the little fringes of down on the
stems, every structural detail of this tree is interesting and unusual.
The butternut is one of the few trees among the Juglandaceæ which
is not tall and beautiful in outline. It is a low tree, with wide-
spreading, rather straggling branches, frequently ill shapen and
uncouth in appearance. It is usually associated in our minds with
country lanes, and growing by the walls and fences bordering open
pastures and farm lands, and in these surroundings it seems
pleasing and appropriate; but when we find it planted in parks and
cultivated grounds it seems commonplace and insignificant. It is
found in all the New England States, in New York, and in
Pennsylvania. Very large specimens grow in the valley of the
Connecticut River.
The wood of the butternut is light brown in color, it is light, soft, and
easily worked, and is much used for furniture, gunstocks, and for the
interior finish of houses. The inner bark is used medicinally, and a
dye is made from the bark and nutshells. An excellent pickle is made
from the young nuts, and the kernels are sweet and edible, although
rather rich and oily. Professor Gray tried the experiment of making
sugar from the sap of the butternut. He found that it took four trees to
yield nine quarts of sap (one and a quarter pounds of sugar), the
amount that one sugar maple yields.
The generic name, Juglans, comes from Jovis glans, the nut of
Jove, in reference to the excellence of the fruit, and the specific
name, cinerea (ash-colored), probably alludes to the color of the
bark.
A large tree, 50 to 120 feet high, with spreading
Black Walnut branches and rough bark, darker in color than that
Juglans nigra of the butternut. The buds are gray instead of light
brown like those of the butternut, and they are
shorter. The twigs are smooth in winter, without hair, and the pith is
chambered. Alternate, conspicuous leaf-scars. Characteristic
difference between the two trees is that the fringe of hair over the
leaf-scar in the butternut is absent in the black walnut.
The black walnut is a striking contrast to the butternut. It is tall and
erect, with a broad, spacious head and vigorous, wide-spreading
branches. The bark is much darker and rougher than that of the
butternut, and the buds are smaller, and gray rather than yellowish in
color, like those of the other species.