Classes abstraites, interfaces et héritage multiple
CHAPITRE 14
298
Bien entendu, il faut prévoir un mécanisme d’appel des constructeurs, ce qui ne présente pas
de difficultés. En revanche, certaines situations peuvent poser problème. Considérons par
exemple cette situation :
Ici, on voit que, en quelque sorte, D hérite deux fois de A. Dans ces conditions, les méthodes
et les attributs de A apparaissent deux foix dans D. En ce qui concerne les méthodes, cela est
manifestement inutile, mais sans importance puisqu’elles ne sont pas dupliquées. En revanche, en ce qui concerne les attributs, il faudra disposer d’un mécanisme permettant de choisir
de les dupliquer ou non. Dans le cas où on les duplique, il faudra être capable d’identifier
ceux obtenus par l’intermédiaire de B de ceux obtenus par l’intermédiaire de C. Conceptuellement, on voit que les choses ne sont pas particulièrement claires.
A
B
C
D
Côté langages
Classes abstraites et méthodes retardées
Java, C# et PHP disposent des notions de classes abstraites et de méthodes retardées (qu’ils nomment
toutefois abstraites), telles que nous les avons exposées ici.
En revanche, C++ ne dispose que de la notion de méthode virtuelle pure. Il s’agit d’une méthode déclarée
virtuelle, dont le corps est remplacé par la mention «=0», comme dans :
class A
{ public :
virtual void f () = 0 ;
// méthode virtuelle pure
.....
}
CHAPITRE 14
298
Bien entendu, il faut prévoir un mécanisme d’appel des constructeurs, ce qui ne présente pas
de difficultés. En revanche, certaines situations peuvent poser problème. Considérons par
exemple cette situation :
Ici, on voit que, en quelque sorte, D hérite deux fois de A. Dans ces conditions, les méthodes
et les attributs de A apparaissent deux foix dans D. En ce qui concerne les méthodes, cela est
manifestement inutile, mais sans importance puisqu’elles ne sont pas dupliquées. En revanche, en ce qui concerne les attributs, il faudra disposer d’un mécanisme permettant de choisir
de les dupliquer ou non. Dans le cas où on les duplique, il faudra être capable d’identifier
ceux obtenus par l’intermédiaire de B de ceux obtenus par l’intermédiaire de C. Conceptuellement, on voit que les choses ne sont pas particulièrement claires.
A
B
C
D
Côté langages
Classes abstraites et méthodes retardées
Java, C# et PHP disposent des notions de classes abstraites et de méthodes retardées (qu’ils nomment
toutefois abstraites), telles que nous les avons exposées ici.
En revanche, C++ ne dispose que de la notion de méthode virtuelle pure. Il s’agit d’une méthode déclarée
virtuelle, dont le corps est remplacé par la mention «=0», comme dans :
class A
{ public :
virtual void f () = 0 ;
// méthode virtuelle pure
.....
}
