- Fragile base class
The fragile base class problem is a fundamental architectural problem of
object-oriented programming systems where base classes (superclasses) are considered "fragile" because seemingly safe modifications to a base class, when inherited by the derived classes, may cause the derived classes to malfunction. The programmer cannot determine whether a base class change is safe simply by examining in isolation the methods of the base class.One possible solution is to make instance variables private to their defining class and force subclasses to use accessors to modify superclass states. A language could also make it so that subclasses can control which inherited methods are exposed publicly. These changes prevent subclasses from relying on implementation details of superclasses and allow subclasses to expose only those superclass methods that are applicable to itself.
Also, in general, programmers should program to interfaces rather than concrete implementations.
Solutions
* Ruby has Mixins and
Monkey patch ing
*Objective-C has Categories
*Component Pascal deprecates Supercalls
* Java allows inheritance to be prohibited by labeling the class declaration with the keyword "final". In the book "Effective Java", authorJoshua Bloch writes (in item 17) that programmers should "Design and document for inheritance or else prohibit it".See also
*
Fragile binary interface problem
*Implementation inheritance
*Inheritance semantics
*Software brittleness
* Virtual Inheritance (object-oriented programming)External links
* [http://www.cas.mcmaster.ca/~emil/publications/fragile/ A Study of The Fragile Base Class Problem] - Scientific description and analysis of the fragile base class problem by Leonid Mikhailov and Emil Sekerinski
* [http://www.javaworld.com/javaworld/jw-08-2003/jw-0801-toolbox.html Why Extends is Evil] - An example in Java
* [http://java.sun.com/docs/books/effective/toc.html Item 17: Design and document for inheritance or else prohibit it]
Wikimedia Foundation. 2010.