homeSoftwaredesign Softwaredesign: Brücke Prof. Dr. Uwe Schmidt FH Wedel

Brücke

weiter

weiter

Brücke

Klassifizierung
objektbasiertes Strukturmuster
weiter
Zweck
Entkoppeln von Konzept und Implementierung(en), so dass beide unabhängig voneinander variiert werden können
weiter
Alias
handle / body
weiter
Motivation
Vermeidung von "mehrdimensionalen" Hierarchien
sonst: Explosion der # der Klassen
Code-misch-masch
weiter
Anwendbarkeit
Vermeidung von dauerhafter Verbindung zwischen Konzept und Implementierung
Implementierung dynamisch auswählen
Implementierung dynamisch auswechseln
Konzept und Implementierung besitzen Unterklassen
Änderung der Implementierung erfordert keine Recompilation der Anwendung
Vermeidung der Explosion der # der Klasen
weiter
Struktur
Strukturdiagramm
weiter
Teilnehmer
  Konzept
Schnittstellendefinition
Referenz auf Implementierung
  SpezialKonzept[1-2]
Verfeinerung, Konkretisierung des Konzepts
  Implementierer
Schnittstelle für alle konkreten Implementierer
  Implementierer[A-B]
konkrete Implementierer
weiter
Konsequenzen
Entkopplung von Konzept und Implementierung
Implementierung kann zur Laufzeit konfiguriert werden
Erweiterbarkeit beider Hierarchien unabhängig voneinander
alle Operationen müssen auf Konzept Operationen zurückgeführt werden
schlechte Schnittstelle --> schlechte Performance
weiter
Implementierung
nur ein Implementierer --> abstrakte Klasse kann entfallen
Erzeugung des richtigen Implementierer-Objekts mit Erzeugungsmuster Abstrakte Fabrik
weiter
Beispiele
in Java: Figuren zeichnen (s.u.)
weiter
Bekannte Verwendungen
libg++
Set <--> SetImpl
weiter
verwandte Muster
zum Erzeugen und Konfigurieren
weiter
ähnliche Struktur
aber anderes Anwendungsfeld
Verhaltensmuster
kann benutzt werden zum "double dispatch"
weiter

weiter

Beispiele für das Brückenmuster

auf verschiedenen Ausgabegeräten
weiter
1. Hierarchie
Figuren: Punkte, Linien, Kreise, ...
weiter
2. Hierarchie
Geräte: X-Fenster, Plotter, PostScript, ...
weiter
Diagramm
weiter
Probleme
mit der Schnittstelle
weiter
merke
Geräteschnittstelle zu schmal
extrem:
void zeichenPunkt(Punkt p)
zu viel Arbeit in Figuren-Klassen
zu ineffizient
weiter
merke
Geräteschnittstelle zu breit
zu viel Arbeit in Geräte-Klassen
zu viel Arbeit für ein neues Gerät
weiter
Ursache
allgemeines Problem
void zeichen(Figur f, Gerät g)
weiter
merke
Verzweigen (über dynamisches Binden) nicht nur über den 1. Parameter (OOP: this), sondern über mehrere.
weiter
merke
Brücke ist manchmal eine Lösung, aber nicht immer.
weiter
2. Beispiel
Unterschiedliche Implementierung von Zahlen
mit beliebig mischbaren Operanden bei der Arithmetik.
weiter
Spezifikation
merke
Brückenmuster ungeeignet
weiter
Diagramm
weiter
schlecht
Lösung in Java mit instanceof-Tests für die Verzweigung über den 2. Parameter
Die Klasse GanzeZahl für die Arithmetik mit einer ganzen Zahl als 1. Parameter.
gut
Lösung ohne instanceof-Tests und mit double dispatch: Klasse Zahl und Subklassen
weiter
merke
Explosion der # der Hilfs-Methoden:
x + y --> n2 Additions-Methoden
weiter
merke
im Beispiel:
3 Subklassen
3 abstrakte Hilfmethoden
3 Unterklassen mit Implementierungen der Hilfsmethoden
9 Methoden
weiter
double dispatch
oder allgemein multiple dispatch (mehrfaches Verteilen) bedeutet das dynamische Binden über zwei oder mehrere Parameter. Dieses kann in C++ und Java nur simuliert werden durch mehrfaches Hintereinanderschalten von einfachem dynamischem Binden.
schlecht
Konsequenz: In C++ und Java viele Hilfsmethoden notwendig.
gut
Es gibt experimentelle OO-Sprachen, die multiple dispatch unterstützen.
ein Verhaltensmuster für double dispatch

Letzte Änderung: 13.04.2012
© Prof. Dr. Uwe Schmidt
Prof. Dr. Uwe Schmidt FH Wedel