SlideShare uma empresa Scribd logo
1 de 13
Baixar para ler 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 !?!

Mais conteúdo relacionado

Mais procurados

Mise en oeuvre des Frameworks de Machines et Deep Learning pour les Applicati...
Mise en oeuvre des Frameworks de Machines et Deep Learning pour les Applicati...Mise en oeuvre des Frameworks de Machines et Deep Learning pour les Applicati...
Mise en oeuvre des Frameworks de Machines et Deep Learning pour les Applicati...
ENSET, Université Hassan II Casablanca
 

Mais procurados (20)

Introduction aux bases de données
Introduction aux bases de donnéesIntroduction aux bases de données
Introduction aux bases de données
 
Mise en oeuvre des Frameworks de Machines et Deep Learning pour les Applicati...
Mise en oeuvre des Frameworks de Machines et Deep Learning pour les Applicati...Mise en oeuvre des Frameworks de Machines et Deep Learning pour les Applicati...
Mise en oeuvre des Frameworks de Machines et Deep Learning pour les Applicati...
 
Introduction aux architectures des SI
Introduction aux architectures des SI Introduction aux architectures des SI
Introduction aux architectures des SI
 
Programmation orientée objet avancée
Programmation orientée objet avancéeProgrammation orientée objet avancée
Programmation orientée objet avancée
 
Fascicule de tp atelier développement web
Fascicule de tp atelier développement webFascicule de tp atelier développement web
Fascicule de tp atelier développement web
 
applications-reparties
applications-repartiesapplications-reparties
applications-reparties
 
Exercice 1 java Héritage
Exercice 1 java HéritageExercice 1 java Héritage
Exercice 1 java Héritage
 
Architectures n-tiers
Architectures n-tiersArchitectures n-tiers
Architectures n-tiers
 
Développement d'un site web jee de e commerce basé sur spring (m.youssfi)
Développement d'un site web jee de e commerce basé sur spring (m.youssfi)Développement d'un site web jee de e commerce basé sur spring (m.youssfi)
Développement d'un site web jee de e commerce basé sur spring (m.youssfi)
 
Cours design pattern m youssfi partie 5 adapter
Cours design pattern m youssfi partie 5 adapterCours design pattern m youssfi partie 5 adapter
Cours design pattern m youssfi partie 5 adapter
 
Cours complet Base de donne Bac
Cours complet Base de donne Bac Cours complet Base de donne Bac
Cours complet Base de donne Bac
 
Site JEE de ECommerce Basé sur Spring IOC MVC Security JPA Hibernate
Site JEE de ECommerce  Basé sur Spring IOC MVC Security JPA HibernateSite JEE de ECommerce  Basé sur Spring IOC MVC Security JPA Hibernate
Site JEE de ECommerce Basé sur Spring IOC MVC Security JPA Hibernate
 
Ch 01 poo
Ch 01 pooCh 01 poo
Ch 01 poo
 
Support de cours angular
Support de cours angularSupport de cours angular
Support de cours angular
 
Support programmation orientée objet c# .net version f8
Support programmation orientée objet c#  .net version f8Support programmation orientée objet c#  .net version f8
Support programmation orientée objet c# .net version f8
 
POO
POOPOO
POO
 
Cours JavaScript
Cours JavaScriptCours JavaScript
Cours JavaScript
 
Chp3 - ESB
Chp3 - ESBChp3 - ESB
Chp3 - ESB
 
Architecture réparties et les services web
Architecture réparties et les services webArchitecture réparties et les services web
Architecture réparties et les services web
 
Polymorphisme, interface et classe abstraite
Polymorphisme, interface et classe abstraitePolymorphisme, interface et classe abstraite
Polymorphisme, interface et classe abstraite
 

Destaque

11800462 scenario presentation_fcpr
11800462 scenario presentation_fcpr11800462 scenario presentation_fcpr
11800462 scenario presentation_fcpr
bmethcapital
 
Laviehumaine
LaviehumaineLaviehumaine
Laviehumaine
lyago
 
ELEMENTOS PROYECTO INVESTIGACION
ELEMENTOS PROYECTO INVESTIGACIONELEMENTOS PROYECTO INVESTIGACION
ELEMENTOS PROYECTO INVESTIGACION
Euler
 
Le Bonus Viral
Le Bonus ViralLe Bonus Viral
Le Bonus Viral
KRDS
 
9 Tablas Y Graficos III
9 Tablas Y Graficos III9 Tablas Y Graficos III
9 Tablas Y Graficos III
Juan Timana
 
Note suivi-lte-vp LFE
Note suivi-lte-vp LFENote suivi-lte-vp LFE
Note suivi-lte-vp LFE
lafabriqueecolo
 
Ondas luz y sondio enet - bell ville
Ondas luz y sondio   enet - bell villeOndas luz y sondio   enet - bell ville
Ondas luz y sondio enet - bell ville
mariajosemacchiavelli
 

Destaque (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
 
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
 
Note suivi-lte-vp LFE
Note suivi-lte-vp LFENote suivi-lte-vp LFE
Note suivi-lte-vp LFE
 
Ondas luz y sondio enet - bell ville
Ondas luz y sondio   enet - bell villeOndas luz y sondio   enet - bell ville
Ondas luz y sondio enet - bell ville
 

Semelhante a Polymorphisme : un concept polymorphe !

CPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
SiratiSoufiane
 
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
frwebhelp
 
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
 

Semelhante a 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 !?!