Fragile Base Class Problem
Das Fragile Base Class Problem (FBC) ist ein Fehlverhalten von Software, das bei der objektorientierten Softwareentwicklung beim Versionswechsel der eingesetzten Basissoftware auftreten kann und mit dem Vererbungsmechanismus zusammenhängt. Es kann auftreten, wenn diese Technik der Objektorientierung als Implementierungsvererbung zur Wiederverwendung von Quelltext eingesetzt wird.
Die Entwickler einer „zerbrechlichen“ Basisklasse, die keine genaue und vollständige Kenntnis über die Nutzung ihrer Implementierungen haben können, sind bei einer Änderung nicht in der Lage, die negativen Konsequenzen vorauszuahnen, die sich für spezialisierende Klassen hieraus ergeben.
Die Gründe hierfür sind vielfältig, im Wesentlichen liegt ein Missverständnis zwischen den Entwicklern der Basisklasse und denen der verwendenden Spezialisierungen vor. Dies liegt zumeist daran, dass die Funktionalität der Basisklasse und auch das von den Spezialisierungen erwartete Verhalten nicht ausreichend präzise spezifiziert sind.
Beispiel
Ein einfaches Beispiel lässt sich mittels einer Basisklasse BagOfInt
veranschaulichen, also ein Container zur Speicherung ganzer Zahlen. Diese Klasse beinhaltet folgende Funktionalität (Methoden):
Add
: Hinzufügen eines Elements (einer Zahl)AddAll
: Hinzufügen einer Menge von Zahlen (durch Übergabe eines anderenBagOfInt
)GetSize
: Ermittlung der Anzahl der enthaltenen ZahlenGetAt
: Zugriff auf ein bestimmtes Element mittels eines Index
Diese Klasse sei nun Bestandteil einer Klassenbibliothek und wird von einem Entwickler, der diese einsetzt, zu einer Klasse TotalizingBagOfInt
erweitert, also spezialisiert. Die erbende Klasse hat die zusätzliche Eigenschaft, dass sie die Gesamtsumme aller in dem Container enthaltenen Zahlen mitführt. Der Entwickler erreicht dies durch Überschreiben der Methode Add
, in der die Gesamtsumme ständig aktualisiert wird.
In einer neueren Version entscheidet sich nun der Entwickler der Basisklasse, die Methode AddAll
nicht mehr wie bisher auf die Methode Add
derselben Klasse zurückzuspielen, sondern die Methode aus Optimierungsgründen anderweitig zu implementieren.
Nach Austausch der Version der Basisklasse funktioniert nun die spezialisierende Klasse TotalizingBagOfInt
nicht mehr, wenn die Methode AddAll
verwendet wird. Der Entwickler dieser Klasse müsste nun diese Methode auch überschreiben. In der Ursprungsversion tat er das nicht, beispielsweise weil er durch Ausprobieren erkannt hatte, dass es nicht nötig war.
Literatur
- Leonid Mikhajlov, Emil Sekerinski: A Study of The Fragile Base Class Problem (PDF; 355 kB). In: Proceedings of the 12th European Conference on Object-Oriented Programming, Seite 355–382, 1998, ISBN 3-540-64737-6
- Bernhard Lahres, Gregor Rayman: Praxisbuch Objektorientierung. Von den Grundlagen zur Umsetzung. Galileo Press, Bonn 2006, ISBN 3-89842-624-6