Eine Pattern-Sprache zur Strukturierung großer Software-Systeme mit Java
description
Transcript of Eine Pattern-Sprache zur Strukturierung großer Software-Systeme mit Java
![Page 2: Eine Pattern-Sprache zur Strukturierung großer Software-Systeme mit Java](https://reader036.fdocument.pub/reader036/viewer/2022062519/56814e21550346895dbb86d6/html5/thumbnails/2.jpg)
2
Übersicht
Patterns und Pattern-Sprachen
• Packages als Kapselungs-Einheiten
• Patterns zur Gestaltung der Package-Schnittstelle
• Beziehungen zwischen Packages
• Diskussion
![Page 3: Eine Pattern-Sprache zur Strukturierung großer Software-Systeme mit Java](https://reader036.fdocument.pub/reader036/viewer/2022062519/56814e21550346895dbb86d6/html5/thumbnails/3.jpg)
3
Patterns
• Ein Pattern ist eine wiederverwendbare Lösung für ein Problem in einem Kontext. Nicht nur die Lösung sondern auch eine Beschreibung
des Designraums.
Kontext: definiert die Designsituation, in derdas Problem auftritt.
Kontext: definiert die Designsituation, in derdas Problem auftritt.
Problem: beschreibt die widerstrebendenKräfte, die eine Lösung beeinflussen.
Problem: beschreibt die widerstrebendenKräfte, die eine Lösung beeinflussen.
Lösung: beschreibt, wie diese Forces inein Gleichgewicht gebracht werden.
Lösung: beschreibt, wie diese Forces inein Gleichgewicht gebracht werden.
![Page 4: Eine Pattern-Sprache zur Strukturierung großer Software-Systeme mit Java](https://reader036.fdocument.pub/reader036/viewer/2022062519/56814e21550346895dbb86d6/html5/thumbnails/4.jpg)
4
Pattern-Kataloge
• Ein Pattern-Katalog ist eine Sammlung von Patterns Nicht notwendigerweise miteinander verbunden
• Gruppierung ist möglich nach der Problemdomäne (Finanzwirtschaft,
Telekommunikation, ...) Lösungsdomäne (Java, C++, RDBMS, ...)
• Beispiel: „Design Patterns“ (Gamma et al.)
![Page 5: Eine Pattern-Sprache zur Strukturierung großer Software-Systeme mit Java](https://reader036.fdocument.pub/reader036/viewer/2022062519/56814e21550346895dbb86d6/html5/thumbnails/5.jpg)
5
Pattern-Sprachen
• Pattern-Sprachen beschreiben einen größeren Bereich im Lösungsraum
• Viele kleine Patterns mit ihren Beziehungen Oft führt ein Pattern ganz natürlich zu einem
anderen Die Lösung des einen Patterns gehört zum
Kontext des nächsten
• Das Ganze ist mehr als die Summe seiner Teile
![Page 6: Eine Pattern-Sprache zur Strukturierung großer Software-Systeme mit Java](https://reader036.fdocument.pub/reader036/viewer/2022062519/56814e21550346895dbb86d6/html5/thumbnails/6.jpg)
6
Übersicht
• Patterns und Pattern-Sprachen
Packages als Kapselungs-Einheiten
• Patterns zur Gestaltung der Package-Schnittstelle
• Beziehungen zwischen Packages
• Diskussion
![Page 7: Eine Pattern-Sprache zur Strukturierung großer Software-Systeme mit Java](https://reader036.fdocument.pub/reader036/viewer/2022062519/56814e21550346895dbb86d6/html5/thumbnails/7.jpg)
7
Kapselung
• Kapselung ist die Trennung von Schnittstelle (inkl. Kontrakt) und Implementierung „Was ich nicht weiß, macht mich nicht heiß“:
Kapselung vereinfacht Arbeitsteilung Dokumentiert Systemstruktur „Divide et impera“: Gesamtkomplexität ist reduziert
• Klassen: Kapselung im Kleinen
?
![Page 8: Eine Pattern-Sprache zur Strukturierung großer Software-Systeme mit Java](https://reader036.fdocument.pub/reader036/viewer/2022062519/56814e21550346895dbb86d6/html5/thumbnails/8.jpg)
8
Encapsulating Package
Problem: In einem großen System werden die Beziehungen der Klassen unübersichtlich.
![Page 9: Eine Pattern-Sprache zur Strukturierung großer Software-Systeme mit Java](https://reader036.fdocument.pub/reader036/viewer/2022062519/56814e21550346895dbb86d6/html5/thumbnails/9.jpg)
9
Encapsulating Package (2)
Lösung: Identifiziere zusammenhängende Gruppen von Klassen und kapsele sie als größere Abstraktionen in Packages.
![Page 10: Eine Pattern-Sprache zur Strukturierung großer Software-Systeme mit Java](https://reader036.fdocument.pub/reader036/viewer/2022062519/56814e21550346895dbb86d6/html5/thumbnails/10.jpg)
10
Encapsulating Package (3)
Die Anzahl der Teile und ihrer Beziehungen wird kleiner
Die Architektur des Systems spiegelt sich im Quelltext
Packagenamen sind Dokumentation
Ungeschickt geschnittene Packages können später hinderlich sein
Refactoring über Packagegrenzen hinweg ist aufwendiger
![Page 11: Eine Pattern-Sprache zur Strukturierung großer Software-Systeme mit Java](https://reader036.fdocument.pub/reader036/viewer/2022062519/56814e21550346895dbb86d6/html5/thumbnails/11.jpg)
11
Package Local Class
Problem: Wenn potentiell jede Klasse eines Encapsulating Package von außen verwendet wird, erhöht das die Komplexität.
Lösung: Definiere explizit ein öffentliches Interface und reduziere die Sichtbarkeit aller übrigen Klassen auf Default Visibility.
![Page 12: Eine Pattern-Sprache zur Strukturierung großer Software-Systeme mit Java](https://reader036.fdocument.pub/reader036/viewer/2022062519/56814e21550346895dbb86d6/html5/thumbnails/12.jpg)
12
Package Local Method
Problem: Bei manchen Klassen gehört nur ein Teil der Methoden zum öffentlichen Interface eines Encapsulating Package.
Lösung: Setze die übrigen Methoden auf Default Visibility.
![Page 13: Eine Pattern-Sprache zur Strukturierung großer Software-Systeme mit Java](https://reader036.fdocument.pub/reader036/viewer/2022062519/56814e21550346895dbb86d6/html5/thumbnails/13.jpg)
13
Package Local Constructor
Problem: Wie kann ein Encapsulating Package die Erzeugung von Objekten eines Typs kontrollieren?
Lösung: Gib dem entsprechenden Konstruktor – bzw. allen – Default Visibility.
![Page 14: Eine Pattern-Sprache zur Strukturierung großer Software-Systeme mit Java](https://reader036.fdocument.pub/reader036/viewer/2022062519/56814e21550346895dbb86d6/html5/thumbnails/14.jpg)
14
Package Handle
Problem: Ein Encapsulating Package benötigt als Ganzes (nichtstatischen) Zustand.
Lösung: Definiere eine Klasse, die als Handle auf den Zustand dient. Deren Instanzen dienen Clients als Referenz auf Package-Instanzen und typischen Ausgangspunkt der Navigation darin.
*
![Page 15: Eine Pattern-Sprache zur Strukturierung großer Software-Systeme mit Java](https://reader036.fdocument.pub/reader036/viewer/2022062519/56814e21550346895dbb86d6/html5/thumbnails/15.jpg)
15
Verbindung der Patterns zu einer Sprache
Encapsulating Package
Package Local Class
Package LocalMethod
Package LocalConstructor
Package Handle
![Page 16: Eine Pattern-Sprache zur Strukturierung großer Software-Systeme mit Java](https://reader036.fdocument.pub/reader036/viewer/2022062519/56814e21550346895dbb86d6/html5/thumbnails/16.jpg)
16
Übersicht
• Patterns und Pattern-Sprachen
• Packages als Kapselungs-Einheiten
Patterns zur Gestaltung der Package-Schnittstelle
• Beziehungen zwischen Packages
• Diskussion
![Page 17: Eine Pattern-Sprache zur Strukturierung großer Software-Systeme mit Java](https://reader036.fdocument.pub/reader036/viewer/2022062519/56814e21550346895dbb86d6/html5/thumbnails/17.jpg)
17
Value Based Programming
• Wertsemantik: Zustand spielt zentrale Rolle, Identität ist unwichtig
• In Schnittstellen von Packages herrscht oft Bedarf an spezifischen Typen mit Wertsemantik, z.B. Geschlecht und Körpertemperatur in einem medizinischen System.
• Java unterstützt nicht direkt die Definition eigener Typen mit Wertsemantik; primitive Typen und „Konstanten-Interfaces“ sind schlechter Ersatz
![Page 18: Eine Pattern-Sprache zur Strukturierung großer Software-Systeme mit Java](https://reader036.fdocument.pub/reader036/viewer/2022062519/56814e21550346895dbb86d6/html5/thumbnails/18.jpg)
18
Value Class
Problem: Wie lassen sich neue Typen mit Wertsemantik definieren?
Lösung: Definiere Klassen, in denen die wertbezogenen Methoden von Object überschrieben sind. Mache die Klasse entweder unveränderlich oder implementiere Mechanismen zum einfachen kopieren.
Einstieg in andere Patternsprache
![Page 19: Eine Pattern-Sprache zur Strukturierung großer Software-Systeme mit Java](https://reader036.fdocument.pub/reader036/viewer/2022062519/56814e21550346895dbb86d6/html5/thumbnails/19.jpg)
19
Value Class: Beispiel
public class Temperatur { private final float _gradCelsius;
public Temperatur (final float gradCelsius) { _gradCelsius = gradCelsius; }
public float getGradCelsius () {return _gradCelsius;}
public boolean equals (final Object obj) { if (! (obj instanceof Temperatur)) return false; return (((Temperatur)obj)._gradCelsius == _gradCelsius); }
public int hashCode () {return new Float (_gradCelsius).hashCode();}}
public class Temperatur { private final float _gradCelsius;
public Temperatur (final float gradCelsius) { _gradCelsius = gradCelsius; }
public float getGradCelsius () {return _gradCelsius;}
public boolean equals (final Object obj) { if (! (obj instanceof Temperatur)) return false; return (((Temperatur)obj)._gradCelsius == _gradCelsius); }
public int hashCode () {return new Float (_gradCelsius).hashCode();}}
![Page 20: Eine Pattern-Sprache zur Strukturierung großer Software-Systeme mit Java](https://reader036.fdocument.pub/reader036/viewer/2022062519/56814e21550346895dbb86d6/html5/thumbnails/20.jpg)
20
Problem: Geworfene Exceptions sind Teil der Schnittstelle eines Encapsulating Package
• Intern auftretende Exceptions können oft nicht lokal behandelt werden
• Einfache Propagation offenbart Implementierungsdetails, koppelt Clients an Interna
• Viele verschiedene Exceptions im Interface erschweren das Fangen und die Behandlung
Homogeneous Exception
try {...} catch (A a) {...}catch (B b) {...}catch (C c) {...}...
try {...} catch (A a) {...}catch (B b) {...}catch (C c) {...}...
![Page 21: Eine Pattern-Sprache zur Strukturierung großer Software-Systeme mit Java](https://reader036.fdocument.pub/reader036/viewer/2022062519/56814e21550346895dbb86d6/html5/thumbnails/21.jpg)
21
Homogeneous Exception (2)
Lösung: Definiere eine einzige Exception, in die alle auftretenden Exceptions konvertiert werden. Methoden des öffentlichen Interface deklarieren typischerweise nur diese Exception.
• Eine Differenzierung kann über Unterklassen oder über Zustand der Exception erfolgen, je nach dem erwarteten Muster der Behandlung
• Information über die ursprüngliche Exception (insbesondere der Stacktrace) wird durch Logging oder Wrapping bewahrt
Einstieg in andere Pattern-Sprache
![Page 22: Eine Pattern-Sprache zur Strukturierung großer Software-Systeme mit Java](https://reader036.fdocument.pub/reader036/viewer/2022062519/56814e21550346895dbb86d6/html5/thumbnails/22.jpg)
22
Zwischenstand Pattern-Sprache
Encapsulating Package
Package Local Class
Package LocalMethod
Package LocalConstructor
HomogeneousException
Value Class Package Handle
![Page 23: Eine Pattern-Sprache zur Strukturierung großer Software-Systeme mit Java](https://reader036.fdocument.pub/reader036/viewer/2022062519/56814e21550346895dbb86d6/html5/thumbnails/23.jpg)
23
Übersicht
• Patterns und Pattern-Sprachen
• Packages als Kapselungs-Einheiten
• Patterns zur Gestaltung der Package-Schnittstelle
Beziehungen zwischen Packages
• Diskussion
![Page 24: Eine Pattern-Sprache zur Strukturierung großer Software-Systeme mit Java](https://reader036.fdocument.pub/reader036/viewer/2022062519/56814e21550346895dbb86d6/html5/thumbnails/24.jpg)
24
Facade Package
Problem: Ein Encapsulating Package kann so sehr wachsen, daß sein öffentliches Interface unübersichtlich wird.
![Page 25: Eine Pattern-Sprache zur Strukturierung großer Software-Systeme mit Java](https://reader036.fdocument.pub/reader036/viewer/2022062519/56814e21550346895dbb86d6/html5/thumbnails/25.jpg)
25
Facade Package (2)
Lösung: Lagere seltener von Clients benötigte Funktionalität in andere Packages aus. Das ursprüngliche Package fungiert dann als Facade für die anderen.
![Page 26: Eine Pattern-Sprache zur Strukturierung großer Software-Systeme mit Java](https://reader036.fdocument.pub/reader036/viewer/2022062519/56814e21550346895dbb86d6/html5/thumbnails/26.jpg)
26
Facade Package (3)
Es gibt ein schmaleres Interface, das meist genügtWenn ein Client das urprüngliche, breitere
Interface braucht, steht es ihm zur Verfügung Die internen Klassen sind besser organisiert, ihre
Beziehungen werden dadurch dokumentiert
Manchmal ist nicht offensichtlich, in welchem Package eine spezielle Klasse ist: Man muß suchen
Es gibt mehr Packages, die Gesamtkomplexität steigt leicht
![Page 27: Eine Pattern-Sprache zur Strukturierung großer Software-Systeme mit Java](https://reader036.fdocument.pub/reader036/viewer/2022062519/56814e21550346895dbb86d6/html5/thumbnails/27.jpg)
27
Interface Package
?
Problem: Wie definiert man austauschbare Implementierungen von Encapsulating Packages, die Clients polymorph verwenden können?
![Page 28: Eine Pattern-Sprache zur Strukturierung großer Software-Systeme mit Java](https://reader036.fdocument.pub/reader036/viewer/2022062519/56814e21550346895dbb86d6/html5/thumbnails/28.jpg)
28
Interface Package (2)
Lösung: Definiere ein Interface-Package, das die gemeinsame Schnittstelle enthält. Diese Schnittstelle enthält alle spezifischen Parametertypen und Exceptions.
Eine Factory instanziiert die gewünschte Implementierung und liefert einen Package Handle auf sie.
Factory
* *<<create>> <<create>>
<<extend>><<extend>>
![Page 29: Eine Pattern-Sprache zur Strukturierung großer Software-Systeme mit Java](https://reader036.fdocument.pub/reader036/viewer/2022062519/56814e21550346895dbb86d6/html5/thumbnails/29.jpg)
29
Interface Package (3)
Es gibt ein sehr wohldefiniertes Interface sehr große FlexibilitätAustauschbarkeit der Implementierungen (sogar
zur Laufzeit)Einzelne Implementierungen können selektiv die
Kapselung durchbrechen (z.B. Oracle-JDBC)
Deutlich höhere Komplexität, sowohl für Implementierung als auch für Client
Interface ist sehr aufwendig zu ändern
![Page 30: Eine Pattern-Sprache zur Strukturierung großer Software-Systeme mit Java](https://reader036.fdocument.pub/reader036/viewer/2022062519/56814e21550346895dbb86d6/html5/thumbnails/30.jpg)
31
Die Pattern-Sprache
Encapsulating Package
Package Local Class
Package LocalMethod
Package LocalConstructor
HomogeneousException
Value Class Factory
InterfacePackage
Facade Package
Package Handle
![Page 31: Eine Pattern-Sprache zur Strukturierung großer Software-Systeme mit Java](https://reader036.fdocument.pub/reader036/viewer/2022062519/56814e21550346895dbb86d6/html5/thumbnails/31.jpg)
32
Fazit Kapselung mit Packages
• Java-Packages erlauben die Kapselung von Systemteilen mit grober Granularität explizite Trennung von Schnittstelle und
Implementierung Instanzen und nichtstatischer Zustand Polymorphie Keine Implementierungsvererbung...
![Page 32: Eine Pattern-Sprache zur Strukturierung großer Software-Systeme mit Java](https://reader036.fdocument.pub/reader036/viewer/2022062519/56814e21550346895dbb86d6/html5/thumbnails/32.jpg)
33
Fazit Pattern-Sprache
Viele kleine Patterns mit Beziehungen Das Diagramm gibt einen schnellen Überblick Die Sprache liefert verschiedene Blickwinkel auf das
Gesamtproblem Alternativen und Varianten werden diskutiert Bewährte Design-Lösungen werden dokumentiert Navigation vom Einstiegspunkt her ist natürlich
Verweise auf andere Pattern-Sprachen Die einzelne Sprache ist nicht überfrachtet Man kann jede Sprache unabhängig von anderen nutzen
![Page 33: Eine Pattern-Sprache zur Strukturierung großer Software-Systeme mit Java](https://reader036.fdocument.pub/reader036/viewer/2022062519/56814e21550346895dbb86d6/html5/thumbnails/33.jpg)
34
Übersicht
• Patterns und Pattern-Sprachen
• Packages als Kapselungs-Einheiten
• Patterns zur Gestaltung der Package-Schnittstelle
• Beziehungen zwischen Packages
Diskussion
![Page 34: Eine Pattern-Sprache zur Strukturierung großer Software-Systeme mit Java](https://reader036.fdocument.pub/reader036/viewer/2022062519/56814e21550346895dbb86d6/html5/thumbnails/34.jpg)
35
Wert-basierte Programmierungnach [Henney2000]
Whole Value
Class FactoryMethod
EnumerationValues
Value Class
ImmutableValue
CloneableValue
MutableCompanion