SlideShare ist ein Scribd-Unternehmen logo
1 von 13
Downloaden Sie, um offline zu lesen
Polymorphisme : un concept 
polymorphe! 
Human Talks Montpellier - 18 nov. 2014 
Aurélien Regat-Barrel
Polymorphisme et sous-typage 
Le polymorphisme est souvent restreint au seul 
mécanisme de méthode virtuelle en POO : 
● Utilisé pour abstraire le comportement des classes 
● Implique une hiérarchie de classes (sous-typage) 
● Concepts liés : héritage, typage dynamique, vtable 
Mais il en existe d'autres formes !
Polymorphisme ? 
Mais au fait, c'est quoi le polymorphisme ? 
Mot d'origine grecque voulant dire : 
« qui peut prendre plusieurs formes » 
● Capacité d'une expression à être valide avec plusieurs types 
● Entité (symbole) capable d'agir sur des valeurs de différents types 
● Fait de considérer qu'une variable ou valeur peut être de plusieurs 
types possibles 
● ...
Exemples ? 
Commande shell valide sur différents types de fichiers 
Commandes du presse papier (CTRL-C, CTRL-V) 
Compatibilité ascendante : 
● Binaire : versions de dll, kernel, interpréteur... 
● API : POSIX, Win32 
Commandes HTTP valides sur un serveur Apache / IIS…
Un peu d'histoire... 
1967 Christopher Strachey – un des tout 
premiers programmeurs - distingue 
plusieurs formes de polymorphisme. 
La même année : Simula 67, 
premier langage à introduire 
le concept de classe ! 
Begin 
Class Glyph; 
Virtual: Procedure print Is Procedure print; 
Begin 
End; 
Glyph Class Char (c); 
Character c; 
Begin 
Procedure print; 
OutChar(c); 
End;
Première classification (1967) 
Paramétrique : extension automatique du service fourni 
à tout un ensemble de types (généricité). 
Paramétrique 
Ad-hoc 
Polymorphisme 
Surcharge 
Coercition 
Ad-hoc : expliciter toutes les formes possibles des 
arguments 
● nécessite une nouvelle définition pour chaque 
nouveau type
Surcharge (overloading) 
Surcharge des fonctions / méthodes / opérateurs : 
i n t i = 3 + 5; 
double d = 3.7 + 5.9; 
string s = "3" + "5"; 
void f(int); 
void f(double) ; 
f(1); 
f(1.0); 
class A { 
}; 
bool operator==(const A &, const A &); 
A a1; 
A a2; 
if (a1 == a2) { 
}
Coercition (conversion implicite) 
La valeur d'un type est transformée en valeur d'un autre 
type (cast / promotion) : 
double v = 1 + 2.0; 
memcpy(void *, const void*, size_t); 
class A { 
public : 
operator int() const; 
}; 
A a; 
int i = a;
Polymorphisme paramétrique (1) 
Se dit quand le code ne mentionne aucun type spécifique 
et peut donc être utilisé de façon transparente avec 
n'importe quel type. 
// version surchargée 
int min(int32, int32); 
int min(uint32, uint32); 
int min(int64, int64); 
int min(uint64, uint64); 
int min(float, float); 
int min(double, double); 
// version générique 
template<typename T> 
T min(T t1, T t2) { 
return t1 <= t2 ? T1 : t2; 
}
Polymorphisme paramétrique (2) 
Principe : capturer les aspects statiques communs à 
plusieurs algorithmes ou types de données. 
En pratique : on utilise un type comme paramètre d'une 
fonction générique : 
vector<string> v; 
v.insert(v.begin(), "hello"); 
v.insert(v.begin(), 5, "hello"); 
La STL (C++) combine la 
surcharge avec le polymorphisme 
paramétrique.
Deuxième classification (1985) 
1985 : Cardelli et Wegner incluent les constructions 
orientées objet : 
Universel 
Ad-hoc 
Polymorphisme 
Inclusion (POO) 
Paramétrique (généricité) 
Surcharge 
Coercition Nouveau ! 
Ajout du polymorphisme d'inclusion (personnalisation du 
comportement à l'exécution).
Polymorphisme d'inclusion (tadaa!!) 
S'appuie sur l'héritage publique (spécialisation) 
● les types appartiennent à une même hiérarchie de 
classes 
● relation de type « Est-Un » (« Is A ») entre les 
(petits-)enfants et leur(s) parent(s) 
Complexité plus importante à l'exécution 
● la vtable coûte en temps exécution mais aussi 
(surtout?) en espace mémoire...
Devinette ! 
Quelle est la différence entre surcharge et redéfinition ? 
● Surcharge : polymorphisme au moment de la 
compilation 
● Redéfinition : polymorphisme au moment de 
l'exécution 
En fait, la redéfinition est une 
surcharge dynamique !?!

Weitere ähnliche Inhalte

Was ist angesagt?

Understand more about C
Understand more about CUnderstand more about C
Understand more about CYi-Hsiu Hsu
 
FormationPython2019.pptx
FormationPython2019.pptxFormationPython2019.pptx
FormationPython2019.pptxLamissGhoul1
 
[OOP - Lec 16,17] Objects as Function Parameter and ReturnType
[OOP - Lec 16,17] Objects as Function Parameter and ReturnType[OOP - Lec 16,17] Objects as Function Parameter and ReturnType
[OOP - Lec 16,17] Objects as Function Parameter and ReturnTypeMuhammad Hammad Waseem
 
récursivité algorithmique et complexité algorithmique et Les algorithmes de tri
récursivité algorithmique et complexité algorithmique et Les algorithmes de trirécursivité algorithmique et complexité algorithmique et Les algorithmes de tri
récursivité algorithmique et complexité algorithmique et Les algorithmes de triYassine Anddam
 
Chapitre4: Pointeurs et références
Chapitre4: Pointeurs et références Chapitre4: Pointeurs et références
Chapitre4: Pointeurs et références Aziz Darouichi
 
Systèmes d'Exploitation - chp5-gestion fichiers
Systèmes d'Exploitation - chp5-gestion fichiersSystèmes d'Exploitation - chp5-gestion fichiers
Systèmes d'Exploitation - chp5-gestion fichiersLilia Sfaxi
 
Chapitre5: Classes et objets
Chapitre5: Classes et objetsChapitre5: Classes et objets
Chapitre5: Classes et objetsAziz Darouichi
 
Exercices_Python_Fenni_2023 -corrigé.pdf
Exercices_Python_Fenni_2023 -corrigé.pdfExercices_Python_Fenni_2023 -corrigé.pdf
Exercices_Python_Fenni_2023 -corrigé.pdfsalah fenni
 
Les listes simplement chaînées en langage C
Les listes simplement chaînées en langage CLes listes simplement chaînées en langage C
Les listes simplement chaînées en langage CMohamed Lahby
 
Les fondamentaux de langage C#
Les fondamentaux de langage C#Les fondamentaux de langage C#
Les fondamentaux de langage C#Youness Boukouchi
 
Chapitre 4 Fonctions et procédures.pdf
Chapitre 4 Fonctions et procédures.pdfChapitre 4 Fonctions et procédures.pdf
Chapitre 4 Fonctions et procédures.pdfC00LiMoUn
 

Was ist angesagt? (20)

Understand more about C
Understand more about CUnderstand more about C
Understand more about C
 
FormationPython2019.pptx
FormationPython2019.pptxFormationPython2019.pptx
FormationPython2019.pptx
 
[OOP - Lec 16,17] Objects as Function Parameter and ReturnType
[OOP - Lec 16,17] Objects as Function Parameter and ReturnType[OOP - Lec 16,17] Objects as Function Parameter and ReturnType
[OOP - Lec 16,17] Objects as Function Parameter and ReturnType
 
récursivité algorithmique et complexité algorithmique et Les algorithmes de tri
récursivité algorithmique et complexité algorithmique et Les algorithmes de trirécursivité algorithmique et complexité algorithmique et Les algorithmes de tri
récursivité algorithmique et complexité algorithmique et Les algorithmes de tri
 
Chapitre4: Pointeurs et références
Chapitre4: Pointeurs et références Chapitre4: Pointeurs et références
Chapitre4: Pointeurs et références
 
Np complete
Np completeNp complete
Np complete
 
Systèmes d'Exploitation - chp5-gestion fichiers
Systèmes d'Exploitation - chp5-gestion fichiersSystèmes d'Exploitation - chp5-gestion fichiers
Systèmes d'Exploitation - chp5-gestion fichiers
 
Chapitre5: Classes et objets
Chapitre5: Classes et objetsChapitre5: Classes et objets
Chapitre5: Classes et objets
 
Advanced C - Part 1
Advanced C - Part 1 Advanced C - Part 1
Advanced C - Part 1
 
Exercices_Python_Fenni_2023 -corrigé.pdf
Exercices_Python_Fenni_2023 -corrigé.pdfExercices_Python_Fenni_2023 -corrigé.pdf
Exercices_Python_Fenni_2023 -corrigé.pdf
 
Les listes simplement chaînées en langage C
Les listes simplement chaînées en langage CLes listes simplement chaînées en langage C
Les listes simplement chaînées en langage C
 
Operator overloading
Operator overloadingOperator overloading
Operator overloading
 
Introduction à Python
Introduction à PythonIntroduction à Python
Introduction à Python
 
Ch2_ la récursivité.pdf
Ch2_ la récursivité.pdfCh2_ la récursivité.pdf
Ch2_ la récursivité.pdf
 
Cours c++
Cours c++Cours c++
Cours c++
 
C material
C materialC material
C material
 
Tsp is NP-Complete
Tsp is NP-CompleteTsp is NP-Complete
Tsp is NP-Complete
 
Les fondamentaux de langage C#
Les fondamentaux de langage C#Les fondamentaux de langage C#
Les fondamentaux de langage C#
 
Chapitre 4 Fonctions et procédures.pdf
Chapitre 4 Fonctions et procédures.pdfChapitre 4 Fonctions et procédures.pdf
Chapitre 4 Fonctions et procédures.pdf
 
C Programming - Refresher - Part II
C Programming - Refresher - Part II C Programming - Refresher - Part II
C Programming - Refresher - Part II
 

Andere mochten auch

654321… i love you princess azerty : ou une stratégie des mots de passe à la ...
654321… i love you princess azerty : ou une stratégie des mots de passe à la ...654321… i love you princess azerty : ou une stratégie des mots de passe à la ...
654321… i love you princess azerty : ou une stratégie des mots de passe à la ...PacLog Solutions
 
Gagner sa vie sans "travailler"
Gagner sa vie sans "travailler"Gagner sa vie sans "travailler"
Gagner sa vie sans "travailler"Camille Roux
 
Design emotionnel
Design emotionnelDesign emotionnel
Design emotionnelmatparisot
 
Programmation orientée objet avancée
Programmation orientée objet avancéeProgrammation orientée objet avancée
Programmation orientée objet avancéeMahfoud EL HOUDAIGUI
 
Théorie de normalisation-base de données
Théorie de normalisation-base de donnéesThéorie de normalisation-base de données
Théorie de normalisation-base de donnéesYassine Badri
 
Utc apm human talks compiegne
Utc apm human talks compiegneUtc apm human talks compiegne
Utc apm human talks compiegneArthur Van Ceulen
 
Bank Kyc - Recherche des structures capitalistiques des clients-commerçants d...
Bank Kyc - Recherche des structures capitalistiques des clients-commerçants d...Bank Kyc - Recherche des structures capitalistiques des clients-commerçants d...
Bank Kyc - Recherche des structures capitalistiques des clients-commerçants d...Daniel Benoilid
 
Je suis charlie par andré
Je suis charlie par andréJe suis charlie par andré
Je suis charlie par andréOlivier Soury
 
11800462 scenario presentation_fcpr
11800462 scenario presentation_fcpr11800462 scenario presentation_fcpr
11800462 scenario presentation_fcprbmethcapital
 
Laviehumaine
LaviehumaineLaviehumaine
Laviehumainelyago
 
La Mente Y La Realidad
La Mente Y La RealidadLa Mente Y La Realidad
La Mente Y La RealidadEuler
 
ELEMENTOS PROYECTO INVESTIGACION
ELEMENTOS PROYECTO INVESTIGACIONELEMENTOS PROYECTO INVESTIGACION
ELEMENTOS PROYECTO INVESTIGACIONEuler
 
Proyecto haarp y la atmosfera
Proyecto haarp y la atmosferaProyecto haarp y la atmosfera
Proyecto haarp y la atmosferaEuler
 
Le Bonus Viral
Le Bonus ViralLe Bonus Viral
Le Bonus ViralKRDS
 
9 Tablas Y Graficos III
9 Tablas Y Graficos III9 Tablas Y Graficos III
9 Tablas Y Graficos IIIJuan Timana
 

Andere mochten auch (20)

654321… i love you princess azerty : ou une stratégie des mots de passe à la ...
654321… i love you princess azerty : ou une stratégie des mots de passe à la ...654321… i love you princess azerty : ou une stratégie des mots de passe à la ...
654321… i love you princess azerty : ou une stratégie des mots de passe à la ...
 
Gagner sa vie sans "travailler"
Gagner sa vie sans "travailler"Gagner sa vie sans "travailler"
Gagner sa vie sans "travailler"
 
Design emotionnel
Design emotionnelDesign emotionnel
Design emotionnel
 
Polymorphisme
PolymorphismePolymorphisme
Polymorphisme
 
Programmation orientée objet avancée
Programmation orientée objet avancéeProgrammation orientée objet avancée
Programmation orientée objet avancée
 
POO
POOPOO
POO
 
Théorie de normalisation-base de données
Théorie de normalisation-base de donnéesThéorie de normalisation-base de données
Théorie de normalisation-base de données
 
Utc apm human talks compiegne
Utc apm human talks compiegneUtc apm human talks compiegne
Utc apm human talks compiegne
 
Bank Kyc - Recherche des structures capitalistiques des clients-commerçants d...
Bank Kyc - Recherche des structures capitalistiques des clients-commerçants d...Bank Kyc - Recherche des structures capitalistiques des clients-commerçants d...
Bank Kyc - Recherche des structures capitalistiques des clients-commerçants d...
 
Je suis charlie par andré
Je suis charlie par andréJe suis charlie par andré
Je suis charlie par andré
 
Haiti
HaitiHaiti
Haiti
 
11800462 scenario presentation_fcpr
11800462 scenario presentation_fcpr11800462 scenario presentation_fcpr
11800462 scenario presentation_fcpr
 
Laviehumaine
LaviehumaineLaviehumaine
Laviehumaine
 
Manoj Certificates & Diplômes
Manoj Certificates & DiplômesManoj Certificates & Diplômes
Manoj Certificates & Diplômes
 
La Mente Y La Realidad
La Mente Y La RealidadLa Mente Y La Realidad
La Mente Y La Realidad
 
Our Genres: AWMS
Our Genres: AWMSOur Genres: AWMS
Our Genres: AWMS
 
ELEMENTOS PROYECTO INVESTIGACION
ELEMENTOS PROYECTO INVESTIGACIONELEMENTOS PROYECTO INVESTIGACION
ELEMENTOS PROYECTO INVESTIGACION
 
Proyecto haarp y la atmosfera
Proyecto haarp y la atmosferaProyecto haarp y la atmosfera
Proyecto haarp y la atmosfera
 
Le Bonus Viral
Le Bonus ViralLe Bonus Viral
Le Bonus Viral
 
9 Tablas Y Graficos III
9 Tablas Y Graficos III9 Tablas Y Graficos III
9 Tablas Y Graficos III
 

Ähnlich wie Polymorphisme : un concept polymorphe !

Partie 2: Types, Variables, Opérateurs — Programmation orientée objet en C++
Partie 2: Types, Variables, Opérateurs — Programmation orientée objet en C++Partie 2: Types, Variables, Opérateurs — Programmation orientée objet en C++
Partie 2: Types, Variables, Opérateurs — Programmation orientée objet en C++Fabio Hernandez
 
02 Spécificité du C++ COURS SYS SYSSSSSS
02 Spécificité du C++  COURS SYS SYSSSSSS02 Spécificité du C++  COURS SYS SYSSSSSS
02 Spécificité du C++ COURS SYS SYSSSSSSAyoubElmrabet6
 
Cours de C++, en français, 2002 - Cours 1.5
Cours de C++, en français, 2002 - Cours 1.5Cours de C++, en français, 2002 - Cours 1.5
Cours de C++, en français, 2002 - Cours 1.5Laurent BUNIET
 
System c eniso_jan_fev_07
System c eniso_jan_fev_07System c eniso_jan_fev_07
System c eniso_jan_fev_07haythem_2015
 
CPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCSiratiSoufiane
 
intro-csharp developement master 2 IF APP
intro-csharp developement master 2 IF APPintro-csharp developement master 2 IF APP
intro-csharp developement master 2 IF APPfrwebhelp
 
Développement Web- PHP (partie I).pdf
Développement Web- PHP (partie I).pdfDéveloppement Web- PHP (partie I).pdf
Développement Web- PHP (partie I).pdfYasushiTsubakik
 
Les structures en c++ (1)
Les structures en c++ (1)Les structures en c++ (1)
Les structures en c++ (1)Wael Ismail
 
Les structures en c++
Les structures en c++Les structures en c++
Les structures en c++Wael Ismail
 
01 - Introduction à Python chaines de caractères.pdf
01 - Introduction à Python chaines de caractères.pdf01 - Introduction à Python chaines de caractères.pdf
01 - Introduction à Python chaines de caractères.pdfMARYAM510573
 
Les nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ ModerneLes nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ ModerneMicrosoft
 
Partie 12: Polymorphisme — Programmation orientée objet en C++
Partie 12: Polymorphisme — Programmation orientée objet en C++Partie 12: Polymorphisme — Programmation orientée objet en C++
Partie 12: Polymorphisme — Programmation orientée objet en C++Fabio Hernandez
 
Chap1 Introduction à python
Chap1 Introduction à pythonChap1 Introduction à python
Chap1 Introduction à pythonMariem ZAOUALI
 
Les nouveautés de Groovy 2 -- Mix-IT 2013
Les nouveautés de Groovy 2 -- Mix-IT 2013Les nouveautés de Groovy 2 -- Mix-IT 2013
Les nouveautés de Groovy 2 -- Mix-IT 2013Guillaume Laforge
 
Boosted Java to Native Interface (JNI)
Boosted Java to Native Interface (JNI)Boosted Java to Native Interface (JNI)
Boosted Java to Native Interface (JNI)Innobec
 

Ähnlich wie Polymorphisme : un concept polymorphe ! (20)

Partie 2: Types, Variables, Opérateurs — Programmation orientée objet en C++
Partie 2: Types, Variables, Opérateurs — Programmation orientée objet en C++Partie 2: Types, Variables, Opérateurs — Programmation orientée objet en C++
Partie 2: Types, Variables, Opérateurs — Programmation orientée objet en C++
 
02 Spécificité du C++ COURS SYS SYSSSSSS
02 Spécificité du C++  COURS SYS SYSSSSSS02 Spécificité du C++  COURS SYS SYSSSSSS
02 Spécificité du C++ COURS SYS SYSSSSSS
 
Cours de C++, en français, 2002 - Cours 1.5
Cours de C++, en français, 2002 - Cours 1.5Cours de C++, en français, 2002 - Cours 1.5
Cours de C++, en français, 2002 - Cours 1.5
 
System c eniso_jan_fev_07
System c eniso_jan_fev_07System c eniso_jan_fev_07
System c eniso_jan_fev_07
 
CPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
 
langage C++
langage C++langage C++
langage C++
 
Chapitre 02 : Variables, Expressions et Instructions
Chapitre 02 : Variables, Expressions et InstructionsChapitre 02 : Variables, Expressions et Instructions
Chapitre 02 : Variables, Expressions et Instructions
 
intro-csharp developement master 2 IF APP
intro-csharp developement master 2 IF APPintro-csharp developement master 2 IF APP
intro-csharp developement master 2 IF APP
 
Php4 Mysql
Php4 MysqlPhp4 Mysql
Php4 Mysql
 
Développement Web- PHP (partie I).pdf
Développement Web- PHP (partie I).pdfDéveloppement Web- PHP (partie I).pdf
Développement Web- PHP (partie I).pdf
 
Les structures en c++ (1)
Les structures en c++ (1)Les structures en c++ (1)
Les structures en c++ (1)
 
Les structures en c++
Les structures en c++Les structures en c++
Les structures en c++
 
Csharp2014
Csharp2014Csharp2014
Csharp2014
 
01 - Introduction à Python chaines de caractères.pdf
01 - Introduction à Python chaines de caractères.pdf01 - Introduction à Python chaines de caractères.pdf
01 - Introduction à Python chaines de caractères.pdf
 
Les nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ ModerneLes nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ Moderne
 
Partie 12: Polymorphisme — Programmation orientée objet en C++
Partie 12: Polymorphisme — Programmation orientée objet en C++Partie 12: Polymorphisme — Programmation orientée objet en C++
Partie 12: Polymorphisme — Programmation orientée objet en C++
 
Chap1 Introduction à python
Chap1 Introduction à pythonChap1 Introduction à python
Chap1 Introduction à python
 
Les nouveautés de Groovy 2 -- Mix-IT 2013
Les nouveautés de Groovy 2 -- Mix-IT 2013Les nouveautés de Groovy 2 -- Mix-IT 2013
Les nouveautés de Groovy 2 -- Mix-IT 2013
 
Boosted Java to Native Interface (JNI)
Boosted Java to Native Interface (JNI)Boosted Java to Native Interface (JNI)
Boosted Java to Native Interface (JNI)
 
cours1.ppt
cours1.pptcours1.ppt
cours1.ppt
 

Polymorphisme : un concept polymorphe !

  • 1. Polymorphisme : un concept polymorphe! Human Talks Montpellier - 18 nov. 2014 Aurélien Regat-Barrel
  • 2. Polymorphisme et sous-typage Le polymorphisme est souvent restreint au seul mécanisme de méthode virtuelle en POO : ● Utilisé pour abstraire le comportement des classes ● Implique une hiérarchie de classes (sous-typage) ● Concepts liés : héritage, typage dynamique, vtable Mais il en existe d'autres formes !
  • 3. Polymorphisme ? Mais au fait, c'est quoi le polymorphisme ? Mot d'origine grecque voulant dire : « qui peut prendre plusieurs formes » ● Capacité d'une expression à être valide avec plusieurs types ● Entité (symbole) capable d'agir sur des valeurs de différents types ● Fait de considérer qu'une variable ou valeur peut être de plusieurs types possibles ● ...
  • 4. Exemples ? Commande shell valide sur différents types de fichiers Commandes du presse papier (CTRL-C, CTRL-V) Compatibilité ascendante : ● Binaire : versions de dll, kernel, interpréteur... ● API : POSIX, Win32 Commandes HTTP valides sur un serveur Apache / IIS…
  • 5. Un peu d'histoire... 1967 Christopher Strachey – un des tout premiers programmeurs - distingue plusieurs formes de polymorphisme. La même année : Simula 67, premier langage à introduire le concept de classe ! Begin Class Glyph; Virtual: Procedure print Is Procedure print; Begin End; Glyph Class Char (c); Character c; Begin Procedure print; OutChar(c); End;
  • 6. Première classification (1967) Paramétrique : extension automatique du service fourni à tout un ensemble de types (généricité). Paramétrique Ad-hoc Polymorphisme Surcharge Coercition Ad-hoc : expliciter toutes les formes possibles des arguments ● nécessite une nouvelle définition pour chaque nouveau type
  • 7. Surcharge (overloading) Surcharge des fonctions / méthodes / opérateurs : i n t i = 3 + 5; double d = 3.7 + 5.9; string s = "3" + "5"; void f(int); void f(double) ; f(1); f(1.0); class A { }; bool operator==(const A &, const A &); A a1; A a2; if (a1 == a2) { }
  • 8. Coercition (conversion implicite) La valeur d'un type est transformée en valeur d'un autre type (cast / promotion) : double v = 1 + 2.0; memcpy(void *, const void*, size_t); class A { public : operator int() const; }; A a; int i = a;
  • 9. Polymorphisme paramétrique (1) Se dit quand le code ne mentionne aucun type spécifique et peut donc être utilisé de façon transparente avec n'importe quel type. // version surchargée int min(int32, int32); int min(uint32, uint32); int min(int64, int64); int min(uint64, uint64); int min(float, float); int min(double, double); // version générique template<typename T> T min(T t1, T t2) { return t1 <= t2 ? T1 : t2; }
  • 10. Polymorphisme paramétrique (2) Principe : capturer les aspects statiques communs à plusieurs algorithmes ou types de données. En pratique : on utilise un type comme paramètre d'une fonction générique : vector<string> v; v.insert(v.begin(), "hello"); v.insert(v.begin(), 5, "hello"); La STL (C++) combine la surcharge avec le polymorphisme paramétrique.
  • 11. Deuxième classification (1985) 1985 : Cardelli et Wegner incluent les constructions orientées objet : Universel Ad-hoc Polymorphisme Inclusion (POO) Paramétrique (généricité) Surcharge Coercition Nouveau ! Ajout du polymorphisme d'inclusion (personnalisation du comportement à l'exécution).
  • 12. Polymorphisme d'inclusion (tadaa!!) S'appuie sur l'héritage publique (spécialisation) ● les types appartiennent à une même hiérarchie de classes ● relation de type « Est-Un » (« Is A ») entre les (petits-)enfants et leur(s) parent(s) Complexité plus importante à l'exécution ● la vtable coûte en temps exécution mais aussi (surtout?) en espace mémoire...
  • 13. Devinette ! Quelle est la différence entre surcharge et redéfinition ? ● Surcharge : polymorphisme au moment de la compilation ● Redéfinition : polymorphisme au moment de l'exécution En fait, la redéfinition est une surcharge dynamique !?!