Côté langages
283
Côté langages
Java et PHP
En Java et en PHP, la gestion des objetsest réalisée par référence et le polymorphisme est « natif » dans
ces langages. Autrement dit, on se trouve dans la situation décrite ici.
C#
En C#, où les objets sont gérés par référence, on retrouve bien la compatibilité d’affectation nécessaire au
polymorphisme. En revanche, il faut préciser les méthodes qu’on souhaite voir soumises à la ligature
dynamique, à l’aide du mot virtual (on parle alors de « méthodes virtuelles »). De plus, les méthodes
virtuelles redéfinies doivent être qualifiées par override (et non plus par new). On peut donc faire
cohabiter au sein d’une même classe des méthodes à ligature dynamique avec des méthodes à ligature
statique.
C++
En C++, lorsque, comme c’est le cas par défaut, les objets sont gérés par valeur, il n’y a pas de polymorphimse véritable, mais simplement une compatibilité d’affectation (de peu d’intérêt), comme dans :
Point p (3, 8) ;
Pointcol pc (4, 9, 3) ;
.....
p = pc ;
// autorisé : recopie seulement les attributs de pc dans p
pc := p
// interdit
Pour pouvoir appliquer le polymorphisme en C++, il faut :
• manipuler les objets par pointeur, ce qui fournit la compatibilité d’affectation nécessaire,
• déclarer explicitement à l’aide du mot virtual, les méthodes qu’on souhaite voir soumises à la ligature
dynamique ;
Comme en C#, une même classe peut mêler des méthodes soumises à la ligature dynamique avec des
méthodes soumises à une ligature statique.
On notera bien que les méthodes virtuelles sont sans effet sur les objets gérés par valeur
283
Côté langages
Java et PHP
En Java et en PHP, la gestion des objetsest réalisée par référence et le polymorphisme est « natif » dans
ces langages. Autrement dit, on se trouve dans la situation décrite ici.
C#
En C#, où les objets sont gérés par référence, on retrouve bien la compatibilité d’affectation nécessaire au
polymorphisme. En revanche, il faut préciser les méthodes qu’on souhaite voir soumises à la ligature
dynamique, à l’aide du mot virtual (on parle alors de « méthodes virtuelles »). De plus, les méthodes
virtuelles redéfinies doivent être qualifiées par override (et non plus par new). On peut donc faire
cohabiter au sein d’une même classe des méthodes à ligature dynamique avec des méthodes à ligature
statique.
C++
En C++, lorsque, comme c’est le cas par défaut, les objets sont gérés par valeur, il n’y a pas de polymorphimse véritable, mais simplement une compatibilité d’affectation (de peu d’intérêt), comme dans :
Point p (3, 8) ;
Pointcol pc (4, 9, 3) ;
.....
p = pc ;
// autorisé : recopie seulement les attributs de pc dans p
pc := p
// interdit
Pour pouvoir appliquer le polymorphisme en C++, il faut :
• manipuler les objets par pointeur, ce qui fournit la compatibilité d’affectation nécessaire,
• déclarer explicitement à l’aide du mot virtual, les méthodes qu’on souhaite voir soumises à la ligature
dynamique ;
Comme en C#, une même classe peut mêler des méthodes soumises à la ligature dynamique avec des
méthodes soumises à une ligature statique.
On notera bien que les méthodes virtuelles sont sans effet sur les objets gérés par valeur
