Modulare Software – Die Brücke angewendet auf das Transportgut: Verschiedene Lösungsvorschläge
Die Aufgabe eines wiederverwendbaren Transportsystems ist es, den Transport von Transportgütern zu verwalten. Dazu benötigt und definiert die Transportverwaltung die Fachklasse Transportgut. In der Außenwelt, also den Systemen und Komponenten, in denen die Komponente Transportverwaltung eingesetzt wird, existieren aber konkrete Transportgüter wie Paletten, Behälter, Kartons, usw.
Implementierung eines Interfaces
Eine Lösungsmöglichkeit wäre nun, dass eine Komponente abstrakt definiert, wie ein Transportgut aus ihrer Sicht auszusehen hat – in Java etwa durch ein Interface. Alle konkreten Transportgüter müssten dieses Interface implementieren. Damit wäre einerseits die Struktur in allen Systemen gleich, die die Komponente Transportverwaltung verwenden. Andrerseits müsste jede konkrete Implementierung dann auch die innere Struktur und Funktionsweise der Transportverwaltung kennen, um das definierte Interface sinnvoll zu implementieren.
Selbst eine Implementierung durch Kopieren des Sourcecodes von einer Vorlage birgt Fehlerquellen und führt außerdem zu einer unerwünschten Vervielfältigung und Varianz der Sourcen.
Abstrakte Oberklasse
Eine andere Alternative zum Interface ist die Möglichkeit, eine abstrakte Oberklasse als Wurzel für alle konkreten Transportgüter zu definieren und damit auch die Interna der Transportverwaltung in der Oberklasse zu implementieren. Damit würde die mehrfache Implementierung pro konkreter Transportgutklasse entfallen, auch das Problem mangelnder Kapselung wäre gelöst.
Allerdings könnte ein konkretes Transportgut dann ausschließlich Transportgut sein und nicht gleichzeitig z.B. Bestandseinheit, da eine Mehrfachvererbung in Java (aus guten Gründen) nicht möglich ist. Eine Bestandseinheit ist in diesem Zusammenhang eine abstrakte Definition der Komponente Bestandsverwaltung, die, ähnlich wie die Komponente Transportverwaltung mit dem Transportgut, nun mit der abstrakten Oberklasse „Bestandseinheit“ definiert hat, wie eine Bestandseinheit auszusehen hat.
Die beste Lösung liegt in der Trennung von Abstraktion (Definition) und Implementierung.
Bildquelle: © In the skies – Fotolia.com