eine pattern sprache zur strukturierung gro er software systeme mit java l.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Eine Pattern-Sprache zur Strukturierung großer Software-Systeme mit Java PowerPoint Presentation
Download Presentation
Eine Pattern-Sprache zur Strukturierung großer Software-Systeme mit Java

Loading in 2 Seconds...

play fullscreen
1 / 34

Eine Pattern-Sprache zur Strukturierung großer Software-Systeme mit Java - PowerPoint PPT Presentation


  • 139 Views
  • Uploaded on

Eine Pattern-Sprache zur Strukturierung großer Software-Systeme mit Java. Arno.Haase@Haase-Consulting.com Arno.Haase@acm.org. Übersicht.  Patterns und Pattern-Sprachen Packages als Kapselungs-Einheiten Patterns zur Gestaltung der Package-Schnittstelle Beziehungen zwischen Packages

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

Eine Pattern-Sprache zur Strukturierung großer Software-Systeme mit Java


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
eine pattern sprache zur strukturierung gro er software systeme mit java

Eine Pattern-Sprache zur Strukturierung großer Software-Systeme mit Java

Arno.Haase@Haase-Consulting.com

Arno.Haase@acm.org

bersicht
Übersicht

 Patterns und Pattern-Sprachen

  • Packages als Kapselungs-Einheiten
  • Patterns zur Gestaltung der Package-Schnittstelle
  • Beziehungen zwischen Packages
  • Diskussion
patterns
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 der

das Problem auftritt.

Problem: beschreibt die widerstrebenden

Kräfte, die eine Lösung beeinflussen.

Lösung: beschreibt, wie diese Forces in

ein Gleichgewicht gebracht werden.

pattern kataloge
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.)
pattern sprachen
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
bersicht6
Übersicht
  • Patterns und Pattern-Sprachen

 Packages als Kapselungs-Einheiten

  • Patterns zur Gestaltung der Package-Schnittstelle
  • Beziehungen zwischen Packages
  • Diskussion
kapselung
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

?

encapsulating package
Encapsulating Package

Problem: In einem großen System werden die Beziehungen der Klassen unübersichtlich.

encapsulating package 2
Encapsulating Package (2)

Lösung: Identifiziere zusammenhängende Gruppen von Klassen und kapsele sie als größere Abstraktionen in Packages.

encapsulating package 3
Encapsulating Package (3)

J Die Anzahl der Teile und ihrer Beziehungen wird kleiner

J Die Architektur des Systems spiegelt sich im Quelltext

J Packagenamen sind Dokumentation

L Ungeschickt geschnittene Packages können später hinderlich sein

L Refactoring über Packagegrenzen hinweg ist aufwendiger

package local class
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.

package local method
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.

package local constructor
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.

package handle

*

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.

verbindung der patterns zu einer sprache
Verbindung der Patterns zu einer Sprache

Encapsulating

Package

Package Local

Class

Package

Handle

Package Local

Constructor

Package Local

Method

bersicht16
Übersicht
  • Patterns und Pattern-Sprachen
  • Packages als Kapselungs-Einheiten

 Patterns zur Gestaltung der Package-Schnittstelle

  • Beziehungen zwischen Packages
  • Diskussion
value based programming
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
value class
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

value class beispiel
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();}

}

homogeneous exception
Homogeneous Exception

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



try {...}

catch (A a) {...}

catch (B b) {...}

catch (C c) {...}

...

homogeneous exception 2
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

zwischenstand pattern sprache
Zwischenstand Pattern-Sprache

Encapsulating

Package

Value Class

Package Local

Class

Package Handle

Package Local

Method

Homogeneous

Exception

Package Local

Constructor

bersicht23
Übersicht
  • Patterns und Pattern-Sprachen
  • Packages als Kapselungs-Einheiten
  • Patterns zur Gestaltung der Package-Schnittstelle

 Beziehungen zwischen Packages

  • Diskussion
facade package
Facade Package

Problem: Ein Encapsulating Package kann so sehr wachsen, daß sein öffentliches Interface unübersichtlich wird.

facade package 2
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.

facade package 3
Facade Package (3)

J Es gibt ein schmaleres Interface, das meist genügt

J Wenn ein Client das urprüngliche, breitere Interface braucht, steht es ihm zur Verfügung

J Die internen Klassen sind besser organisiert, ihre Beziehungen werden dadurch dokumentiert

L Manchmal ist nicht offensichtlich, in welchem Package eine spezielle Klasse ist: Man muß suchen

L Es gibt mehr Packages, die Gesamtkomplexität steigt leicht

interface package
Interface Package

Problem: Wie definiert man austauschbare Implementierungen von Encapsulating Packages, die Clients polymorph verwenden können?

?

interface package 2
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.

<<extend>>

<<extend>>

*

*

<<create>>

<<create>>

Factory

interface package 3
Interface Package (3)

J Es gibt ein sehr wohldefiniertes Interface

J sehr große Flexibilität

J Austauschbarkeit der Implementierungen (sogar zur Laufzeit)

J Einzelne Implementierungen können selektiv die Kapselung durchbrechen (z.B. Oracle-JDBC)

LDeutlich höhere Komplexität, sowohl für Implementierung als auch für Client

L Interface ist sehr aufwendig zu ändern

die pattern sprache
Die Pattern-Sprache

Encapsulating

Package

Facade

Package

Interface

Package

Value Class

Package Local

Class

Package Handle

Factory

Package Local

Method

Homogeneous

Exception

Package Local

Constructor

fazit kapselung mit packages
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...
fazit pattern sprache
Fazit Pattern-Sprache

J 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

J Verweise auf andere Pattern-Sprachen

  • Die einzelne Sprache ist nicht überfrachtet
  • Man kann jede Sprache unabhängig von anderen nutzen
bersicht33
Übersicht
  • Patterns und Pattern-Sprachen
  • Packages als Kapselungs-Einheiten
  • Patterns zur Gestaltung der Package-Schnittstelle
  • Beziehungen zwischen Packages

 Diskussion

wert basierte programmierung nach henney2000
Wert-basierte Programmierungnach [Henney2000]

Whole Value

Value Class

Enumeration

Values

Immutable

Value

Class Factory

Method

Cloneable

Value

Mutable

Companion