„Fragile Base Class Problem“ – Versionsunterschied
[gesichtete Version] | [gesichtete Version] |
K korr. |
K rückgängig gemacht; nein, genau dann nicht. Ist das so unverständlich? Bitte melde Dich auf der Disk. |
||
(25 dazwischenliegende Versionen von 16 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
⚫ | Das '''Fragile Base Class Problem''' (FBC) ist ein Fehlverhalten von [[Software]], das bei der [[Objektorientierung|objektorientierten]] [[Softwareentwicklung]] beim [[Version (Software)|Versionswechsel]] der eingesetzten Basissoftware auftreten kann und mit dem [[Vererbung (Programmierung)|Vererbungsmechanismus]] zusammenhängt. Es kann auftreten, wenn diese Technik der Objektorientierung als Implementierungsvererbung zur Wiederverwendung von [[Quelltext]] eingesetzt wird. |
||
{{Dieser Artikel|erläutert das semantische Fragile Base Class Problem. Für das syntaktischen Fragile Base Class Problem siehe [[Fragile Binary Interface Problem]]}} |
|||
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 [[Klasse (objektorientierte Programmierung)|Klassen]] hieraus ergeben. |
|||
⚫ | Das '''Fragile Base Class Problem''' (FBC) ist ein Fehlverhalten von [[Software]], das bei der [[ |
||
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 <code>BagOfInt</code> veranschaulichen, also ein [[Container (Informatik)|Container]] zur Speicherung ganzer Zahlen. Diese Klasse beinhaltet folgende Funktionalität ([[Methode (Programmierung)|Methoden]]): |
|||
* <code>Add</code>: Hinzufügen eines Elements (einer Zahl) |
|||
* <code>AddAll</code>: Hinzufügen einer Menge von Zahlen (durch Übergabe eines anderen <code>BagOfInt</code>) |
|||
* <code>GetSize</code>: Ermittlung der Anzahl der enthaltenen Zahlen |
|||
* <code>GetAt</code>: 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 <code>TotalizingBagOfInt</code> erweitert, also spezialisiert. Die [[Vererbung (Programmierung)|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 (Programmierung)|Überschreiben]] der Methode <code>Add</code>, in der die Gesamtsumme ständig aktualisiert wird. |
|||
In einer neueren Version entscheidet sich nun der Entwickler der Basisklasse, die Methode <code>AddAll</code> nicht mehr wie bisher auf die Methode <code>Add</code> derselben Klasse zurückzuspielen, sondern die Methode aus Optimierungsgründen anderweitig zu implementieren. |
|||
Nach Austausch der Version der Basisklasse funktioniert nun die spezialisierende Klasse <code>TotalizingBagOfInt</code> nicht mehr, wenn die Methode <code>AddAll</code> 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 == |
== Literatur == |
||
* Leonid Mikhajlov, Emil Sekerinski: [http://www. |
* Leonid Mikhajlov, Emil Sekerinski: [http://www.ifs.uni-linz.ac.at/~ecoop/cd/papers/1445/14450355.pdf ''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 |
* Bernhard Lahres, Gregor Rayman: ''Praxisbuch Objektorientierung. Von den Grundlagen zur Umsetzung''. Galileo Press, Bonn 2006, ISBN 3-89842-624-6 |
||
[[Kategorie:Objektorientierte Programmierung]] |
[[Kategorie:Objektorientierte Programmierung]] |
||
[[en:Fragile base class]] |
Aktuelle Version vom 15. Januar 2017, 11:21 Uhr
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 | Quelltext 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 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
[Bearbeiten | Quelltext bearbeiten]- 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