SlideShare a Scribd company logo
1 of 13
Download to read offline
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 !?!

More Related Content

What's hot

Chp6 - De UML vers C++
Chp6 - De UML vers C++Chp6 - De UML vers C++
Chp6 - De UML vers C++Lilia Sfaxi
 
Improving GStreamer performance on large pipelines: from profiling to optimiz...
Improving GStreamer performance on large pipelines: from profiling to optimiz...Improving GStreamer performance on large pipelines: from profiling to optimiz...
Improving GStreamer performance on large pipelines: from profiling to optimiz...Luis Lopez
 
Chapitre 2 complexité
Chapitre 2 complexitéChapitre 2 complexité
Chapitre 2 complexitéSana Aroussi
 
algo et complexité .pptx
algo et complexité  .pptxalgo et complexité  .pptx
algo et complexité .pptxtarekjedidi
 
Chapitre ii complexité et optimalité
Chapitre ii complexité et optimalitéChapitre ii complexité et optimalité
Chapitre ii complexité et optimalitéSana Aroussi
 
2015 07 14_presentation-pfe-gestion-parc-informatique
2015 07 14_presentation-pfe-gestion-parc-informatique2015 07 14_presentation-pfe-gestion-parc-informatique
2015 07 14_presentation-pfe-gestion-parc-informatiqueUsmiste Rosso
 
Paramétrage et développement spécifique des modules odoo(OpenERP) Partie 1
Paramétrage et développement spécifique des modules odoo(OpenERP) Partie 1Paramétrage et développement spécifique des modules odoo(OpenERP) Partie 1
Paramétrage et développement spécifique des modules odoo(OpenERP) Partie 1Addi Ait-Mlouk
 
Examen principal - Fondement Multimedia - correction
Examen principal - Fondement Multimedia - correctionExamen principal - Fondement Multimedia - correction
Examen principal - Fondement Multimedia - correctionInes Ouaz
 
cours algorithme et structure de données 1er année
cours algorithme et structure de données 1er annéecours algorithme et structure de données 1er année
cours algorithme et structure de données 1er annéeMissaoui Abdelbaki
 
Résumé des miserables (partie:Gavroche)
 Résumé des miserables (partie:Gavroche) Résumé des miserables (partie:Gavroche)
Résumé des miserables (partie:Gavroche)naciri med
 
Cours python avancé
Cours python avancéCours python avancé
Cours python avancépierrepo
 
Cohesion et couplage
Cohesion et couplage Cohesion et couplage
Cohesion et couplage Ahmed HARRAK
 
Cour systeme d'exploitation sghaier anouar
Cour systeme d'exploitation sghaier anouarCour systeme d'exploitation sghaier anouar
Cour systeme d'exploitation sghaier anouarAnouar Sghaier
 
SSH - Secure Shell
SSH - Secure ShellSSH - Secure Shell
SSH - Secure ShellSouhaib El
 

What's hot (20)

DART.pptx
DART.pptxDART.pptx
DART.pptx
 
Chp6 - De UML vers C++
Chp6 - De UML vers C++Chp6 - De UML vers C++
Chp6 - De UML vers C++
 
Improving GStreamer performance on large pipelines: from profiling to optimiz...
Improving GStreamer performance on large pipelines: from profiling to optimiz...Improving GStreamer performance on large pipelines: from profiling to optimiz...
Improving GStreamer performance on large pipelines: from profiling to optimiz...
 
Chapitre 2 complexité
Chapitre 2 complexitéChapitre 2 complexité
Chapitre 2 complexité
 
cours Lunix
cours Lunixcours Lunix
cours Lunix
 
algo et complexité .pptx
algo et complexité  .pptxalgo et complexité  .pptx
algo et complexité .pptx
 
Chapitre ii complexité et optimalité
Chapitre ii complexité et optimalitéChapitre ii complexité et optimalité
Chapitre ii complexité et optimalité
 
Uml
UmlUml
Uml
 
Tp n 4 linux
Tp n 4 linuxTp n 4 linux
Tp n 4 linux
 
2015 07 14_presentation-pfe-gestion-parc-informatique
2015 07 14_presentation-pfe-gestion-parc-informatique2015 07 14_presentation-pfe-gestion-parc-informatique
2015 07 14_presentation-pfe-gestion-parc-informatique
 
Paramétrage et développement spécifique des modules odoo(OpenERP) Partie 1
Paramétrage et développement spécifique des modules odoo(OpenERP) Partie 1Paramétrage et développement spécifique des modules odoo(OpenERP) Partie 1
Paramétrage et développement spécifique des modules odoo(OpenERP) Partie 1
 
Examen principal - Fondement Multimedia - correction
Examen principal - Fondement Multimedia - correctionExamen principal - Fondement Multimedia - correction
Examen principal - Fondement Multimedia - correction
 
cours algorithme et structure de données 1er année
cours algorithme et structure de données 1er annéecours algorithme et structure de données 1er année
cours algorithme et structure de données 1er année
 
Ch 01 poo
Ch 01 pooCh 01 poo
Ch 01 poo
 
Résumé des miserables (partie:Gavroche)
 Résumé des miserables (partie:Gavroche) Résumé des miserables (partie:Gavroche)
Résumé des miserables (partie:Gavroche)
 
Cours python avancé
Cours python avancéCours python avancé
Cours python avancé
 
Cohesion et couplage
Cohesion et couplage Cohesion et couplage
Cohesion et couplage
 
Cour systeme d'exploitation sghaier anouar
Cour systeme d'exploitation sghaier anouarCour systeme d'exploitation sghaier anouar
Cour systeme d'exploitation sghaier anouar
 
SSH - Secure Shell
SSH - Secure ShellSSH - Secure Shell
SSH - Secure Shell
 
Cours s5 réseau FSO
Cours s5 réseau FSOCours s5 réseau FSO
Cours s5 réseau FSO
 

Viewers also liked

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
 

Viewers also liked (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
 

Similar to 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
 

Similar to 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 !?!