Le polymorphisme
concept très important en programmation et particulièrement en POO :
du grec, signifie plusieurs (poly) formes (morphos)
définition : un même nom représente plusieurs objets selon le contexte
3 types de polymorphisme
le polymorphisme ad hoc
le polymorphisme d’héritage (Cf. cour 3)
le polymorphisme paramétrique
polymorphisme ad hoc ou surcharge (overloading) : définir plusieurs fonctions de même nom, chacune correspondant à des types de paramètres précis
Recherche fonction surchargée
Fonction à un argument : meilleure correspondance possible
1/ correspondance exacte
2/ promotions numériques
3/ conversions standard (dégradantes)
4/ conversions définies par l’utilisateur arrêt :
au premier niveau où ∃ correspondance unique
si à un même niveau plusieurs correspondances : erreur à la compilation (ambiguïté)
si aucune fonction ne convient : erreur de compilation (fonction inconnue)
Fonctions à plusieurs arguments
1/ le compilateur sélectionne pour chaque argument la (ou les) meilleure(s) fonction(s)
2/ il considère l’intersection des ensembles des meilleures fonctions pour chaque argument Si cette intersection contient une seule fonction, c’est la fonction choisie sinon erreur de compilation Remarque : fonction avec un ou plusieurs arguments par défaut traitée comme plusieurs fonctions différentes avec un nombre croissant d’arguments
PASSAGE DES PARAMETRES D’UNE FONCTION
en C :
par défaut : passage par valeur
argument modifié ou « gros objet » : passage par adresse,
i.e. passage par valeur d’un pointeur sur l’objet
en C++ :
par défaut : idem, passage par valeur
argument modifié ou « gros objet » : passage par références
le compilateur prend en charge la transmission des arguments par adresse
l’utilisateur manipule une variable normal
philosophie C++ : les ptr indiquent une indirection, pas des manipulations pour faire remonter des modifications vers le code appelant
passage par adresse (pointeur)
avantage
l’utilisateur sait que le paramètre effectif peut être modifié car il passe un ptr à l’appel
contrôle des effets de bords indésirés
inconvénients
lourdeur d’écriture, sources d’erreurs
l’utilisateur doit savoir qu’il faut passer un pointeur
utilisation en C
paramètre modifié par une fonction
gros objet passé en paramètre pour éviter une copie
passage par référence
avantage
simplifie l’écriture : on manipule (à l’appel et dans la définition) le nom des variables, pas un ptr
choix au moment de la définition, à l’appel rien à faire de spécial
inconvénients
risque d’effets de bord indésirés si l’utilisateur oublie que le paramètre peut être modifié
essayer d’éviter les fonctions qui modifient leurs paramètres
utilisation en C++ : remplace la passage de paramètre par adresse du C
- Monday
- December 23rd, 2024
- Ajouter un cours