next up previous
Next: 2.1.0.3 Java. Up: 2.1 Background : Multiple Previous: 2.1.0.1 C++.

2.1.0.2 Eiffel.

In contrast, Eiffel provides a rich set of primitives to program-in an application-specific strategy for multiple inheritance [27]. In particular, it supports:

redefinition:
to override a (potentially inheritable) field/method definition.
renaming:
to remove name clashes making available multiple definitions under different names.
undefinition:
to ``join'' names and to make unavailable certain definitions.
selection:
to pick the code that must be run on a child instance referenced by an entity of a ``repeated'' ancestor type using dynamic binding in case of an ambiguity.

Whereas the flexibility and the expressiveness that Eiffel's design of multiple inheritance endows is widely recognized, it is an open debate whether it commensurates with the additional complexity introduced in the language and its implementation.

Furthermore, Eiffel's select mechanism exhibits a subtle semantic problem of its own. Because it always selects the same code, irrespective of the context of the method invocation, it reinstalls the problem that method renaming was intended to solve: the selected method is executed even in contexts where a method with the same signature but different semantics is expected. A detailed discussion is beyond the scope of this paper and can be found in [22].


next up previous
Next: 2.1.0.3 Java. Up: 2.1 Background : Multiple Previous: 2.1.0.1 C++.
T. K. Prasad