L'idée est de partir d'un type et de le modifier. Par exemple, on peut créer une classe de base, puis faire des classes dérivées.
Ce concept est associé à l'approche orientée objet.
en C++ :
en Java :
abstract class Forme { abstract float aire() ; } class Carre extends Forme{ float cote; float aire() { return cote * cote; } } class Cercle extends Forme{ float rayon; float aire() { return Math.PI*rayon*rayon; } }
Grâce aux fonctions virtuelles, on peut faire un algorithme en n'utilisant que la classe de base qui va automatiquement appeler les fonctions des classes dérivées:
en C++ :
float AireTotal(Forme* tabl[], int nb) { float s=0; for(int i = 0;i<nb; i++) { s+= tabl[i]->Aire(); // le programme sait automatiquement quelle fonction appeler } return s; } // ... Forme* tableau[3] = {new Carre, new Cercle, new Carre}; AireTotal(tableau,3); // ...
en Java :
float aireTotal(Forme[] tabl, int nb) { float s=0; for(int i = 0; i < nb; i++) { s += tabl[i].aire(); // le programme sait automatiquement quelle fonction appeler } return s; } // ... Forme[] tableau = { new Carre(), new Cercle(), new Carre()}; aireT = aireTotal(tableau, 3); //aireT aura été défini comme float // ...