Eiffel provides specification constructs such as invariants, pre and postconditions. Modules can be simulated in Eiffel by restricting the export of methods to certain classes. However, software developers working with an object oriented system are frequently led to modify extensively or even to reprogram existing classes so that they fully suit their needs. This variety in the permissible usages of inheritance complicates the task of hierarchy designers and clients. In fact, an important assumption must be satisfied for applying such powerful techniques as inheritance, genericity or delayed binding to application development.
Many tasks require the collaboration of a group of objects.
Redefinition of a partial implementation for efficiency reasons is the only exception. Since such a redefinition must be behaviour preserving, it does, however, not indicate a missing abstraction or an unwanted subclassing pattern. On the other hand, specialization allows for the restriction of a class interface. Many tasks require the collaboration of a group of objects. Many tasks require the collaboration of a group of objects.