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 Bearbeiten

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 anderen BagOfInt)
  • GetSize: Ermittlung der Anzahl der enthaltenen Zahlen
  • GetAt: 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 Bearbeiten