SlideShare une entreprise Scribd logo
1  sur  16
Polymorphisme
                          Dynamique et Statique




Réaliser Par :
 HERAGUEMI KAMEL EDDINE
                                                  1
Définition du polymorphisme
     Le nom de polymorphisme vient du grec et signifie qui peut prendre
plusieurs formes. Cette caractéristique est un des concepts essentiels de la
programmation orientée objet. Alors que l'héritage concerne les classes
(et leur hiérarchie), le polymorphisme est relatif aux méthodes des objets.


On distingue généralement trois types de polymorphisme :

• Le polymorphisme ad hoc (également surcharge ou en anglais
  overloading) ,
• Le polymorphisme paramétrique (également généricité ou en anglais
  template) ,
• Le polymorphisme d'héritage (également redéfinition, spécialisation ou
  en anglais overriding) .


                                                                               2
Le polymorphisme ad hoc
• Permet d'avoir des fonctions de même nom, avec des fonctionnalités
similaires, dans des classes sans aucun rapport entre elles . Par exemple, la
classe complexe, la classe image et la classe lien peuvent avoir chacune
une fonction "afficher". Cela permettra de ne pas avoir à se soucier du
type de l'objet que l'on a si on souhaite l'afficher à l'écran.




                                                                            3
Le polymorphisme ad hoc
•    Permet ainsi des conversions implicites, ou coercions, présente
dans pas mal de langages, au moins pour des types de base, certains
permettant même à l’utilisateur de définir des conversions qui seront
appliquées implicitement. Il est donc possible par exemple de
surcharger l'opérateur (+) et de lui faire réaliser des actions différentes
selon qu'il s'agit d'une opération entre deux Réels ou entre deux Entiers

                                   { ….
                                      int x=2 ,y=5;
                                      float x1 =2.122 ;
                                     Test t1 = new Test () ;
                                       t1.Add(x,y);
                                       t1.Add(x1,y);
                                   ……
                                   }


                                                                              4
Le polymorphisme paramétrique
 Appelé généricité, représente la possibilité de définir plusieurs
  fonctions de même nom mais possédant des paramètres différents (en
  nombre et/ou en type).
 Rend ainsi possible le choix automatique de la bonne méthode à
  adopter en fonction du type de donnée passée en paramètre.
EXEMPLE :
On peut par exemple définir plusieurs méthodes homonymes addition()
effectuant une somme de valeurs.
  • La méthode int addition(int a, int b) pourra retourner la somme de
     deux entiers
  • La méthode float addition(float a, float b) pourra retourner la somme
     de deux flottants
  • La méthode string addition(char a, char b) pourra la concaténation de
     deux caractères .

Alors , C'est la signature d'une méthode qui détermine laquelle sera
appelée.
                                                                        5
Le polymorphisme d'héritage
• La possibilité de redéfinir une méthode dans des classes héritant d'une
classe de base s'appelle la spécialisation. Il est alors possible d'appeler la
méthode d'un objet sans se soucier de son type intrinsèque : il s'agit du
polymorphisme d'héritage. Ceci permet de faire abstraction des détails des
classes spécialisées d'une famille d'objet, en les masquant par une
interface commune (qui est la classe de base).




                                                                                 6
Polymorphisme Dynamique et statique


Polymorphisme statique - présentés par les fonctions surchargées au
moment de compilation .

Polymorphisme dynamique - présentés en utilisant une liaison dynamique
crier en runtime.




                                                                         7
Polymorphisme statique
• polymorphisme statique fait référence à une entité existante sous
différentes formes physiques simultanément.
• polymorphisme statique implique la liaison des fonctions basées sur
le nombre, le type et la séquence des arguments.
• Les différents types de paramètres sont spécifiés dans la déclaration
de fonction, et donc la fonction peut être lié à des appels à la
compilation.
• Cette forme d'association est appelé une liaison anticipée.
• Le terme liaison anticipée découle du fait que lorsque le programme
est exécuté, les appels sont déjà liés à des fonctions appropriées.




                                                                          8
Polymorphisme statique
Exemple 1:
     Void affi( int val ) {printf (‘ %d’,val);};
     Void affi(float val){printf (‘%f’,val);};

     //…..
     Class test{
       int i ;
       void affiche (){printf (‘%d’,i)}
     }

     //……

     Void affi(test& val ) {val.affiche ()};

     //……..
     Void main (){
     int Mon_indice = 20; affi(mon_indice);
     test t1 ; affi (t1);
     }
                                                   9
Polymorphisme dynamique
• polymorphisme dynamique réfère à une entité change de forme selon
les circonstances.

• Une fonction est dite présenter polymorphisme dynamique quand il
existe dans plus d'une forme, et demande à ses diverses formes sont
résolus de façon dynamique lorsque le programme est exécuté.

• Le terme liaison dynamique se réfère à la résolution des fonctions au
moment de l'exécution au lieu de la compilation.

• Cette caractéristique augmente la flexibilité du programme en
permettant la méthode appropriée à être invoqués, selon le contexte.

• La combinaison de l'héritage, de la virtualité et la possibilité de
  surcharger des méthodes permettent ce polymorphisme dynamique.


                                                                          10
Polymorphisme dynamique
figure *f;
// ...
switch(...) {
     case ... :
       f = new rectangle; break;
     case ... :
       f = new carre; break;
     case ... :
       f = new hexagone; break;
}
f->afficher();
// On voudrait appeler la bonne version
// de afficher selon la valeur de f
// Actuellement : appel de
//            figure::afficher() !!!
// .... transformer afficher
// en fonction virtuelle
                                          11
Méthode virtuelle (1)
• La mise en place du polymorphisme dynamique se réalise par
l'intermédiaire des méthodes virtuelles.
• Une méthode est marquée virtuelle par l'ajout du mot clé virtual au
niveau de la déclaration uniquement.

                 class figure { ...
                 public:
                    virtual void afficher(void) const;
                 };
                 class rectangle : public figure { ...
                 public:
                    virtual void afficher(void) const;
                 };
                 rectangle r;
                 figure *ptf;
                 ptf->afficher() ; // figure::afficher()
                 figure& rf=r;
                 rf.afficher(); //rectangle::afficher()
                                                                        12
Méthode virtuelle (2)
• La détermination de la méthode à appeler est effectuée dynamiquement
selon le type effectif de l'objet pointé ou référé (on parle de liaison
dynamique).

• Une méthode virtuelle reste virtuelle dans tout l'arbre de
dérivation, même si elle n'est pas redéclarée virtuelle dans les classes
dérivées.

• Pour redéfinir une méthode virtuelle héritée, nécessité d'adéquation
parfaite : signature et type de retour (sinon, la fonction virtuelle est
masquée).

•   Les fonctions membres statiques ne peuvent pas être virtuelles.




                                                                           13
Exemple
   class A {
   public :
      virtual void f () { cout << "A"; } ;
   };

   class B : public A {
   public:
   // foo reste virtuelle
      void f () { cout << "B"; } ;
   };
   class C : public B {
   public:
   // foo reste virtuelle
      void f() {cout << "C"; };
   };

   int main() {
     A * a = new C;
     B * b = new C;
     a->f(); // foo virtuelle --> C::f()
                                             14
     b->f(); // foo virtuelle --> C::f()
Merci pour Votre Attention




                             15
16

Contenu connexe

Tendances

Tp1 - WS avec JAXWS
Tp1 - WS avec JAXWSTp1 - WS avec JAXWS
Tp1 - WS avec JAXWSLilia Sfaxi
 
softCours design pattern m youssfi partie 9 creation des objets abstract fact...
softCours design pattern m youssfi partie 9 creation des objets abstract fact...softCours design pattern m youssfi partie 9 creation des objets abstract fact...
softCours design pattern m youssfi partie 9 creation des objets abstract fact...ENSET, Université Hassan II Casablanca
 
Chp2 - Diagramme des Cas d'Utilisation
Chp2 - Diagramme des Cas d'UtilisationChp2 - Diagramme des Cas d'Utilisation
Chp2 - Diagramme des Cas d'UtilisationLilia Sfaxi
 
Etude d'une application de gestion d'une bibliothèque numérique
Etude d'une application de gestion d'une bibliothèque numérique Etude d'une application de gestion d'une bibliothèque numérique
Etude d'une application de gestion d'une bibliothèque numérique Georges Amichia
 
Rapport projet conception et la réalisation d'une application web gestion des...
Rapport projet conception et la réalisation d'une application web gestion des...Rapport projet conception et la réalisation d'une application web gestion des...
Rapport projet conception et la réalisation d'une application web gestion des...SAAD SARHANI
 
Chp1 - Introduction aux méthodologies de Conception
Chp1 - Introduction aux méthodologies de ConceptionChp1 - Introduction aux méthodologies de Conception
Chp1 - Introduction aux méthodologies de ConceptionLilia Sfaxi
 
Chapitre 4 heritage et polymorphisme
Chapitre 4 heritage et polymorphismeChapitre 4 heritage et polymorphisme
Chapitre 4 heritage et polymorphismeAmir Souissi
 
Expose linux gestion des processus
Expose linux  gestion des processusExpose linux  gestion des processus
Expose linux gestion des processusFatima Zahra Fagroud
 
Cours design pattern m youssfi partie 1 introduction et pattern strategy
Cours design pattern m youssfi partie 1 introduction et pattern strategyCours design pattern m youssfi partie 1 introduction et pattern strategy
Cours design pattern m youssfi partie 1 introduction et pattern strategyENSET, Université Hassan II Casablanca
 
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 webHouda TOUKABRI
 
Chap 6 : classes et interfaces
Chap 6 : classes et interfacesChap 6 : classes et interfaces
Chap 6 : classes et interfacesAziz Darouichi
 

Tendances (20)

Tp1 - WS avec JAXWS
Tp1 - WS avec JAXWSTp1 - WS avec JAXWS
Tp1 - WS avec JAXWS
 
Support NodeJS avec TypeScript Express MongoDB
Support NodeJS avec TypeScript Express MongoDBSupport NodeJS avec TypeScript Express MongoDB
Support NodeJS avec TypeScript Express MongoDB
 
DART.pptx
DART.pptxDART.pptx
DART.pptx
 
softCours design pattern m youssfi partie 9 creation des objets abstract fact...
softCours design pattern m youssfi partie 9 creation des objets abstract fact...softCours design pattern m youssfi partie 9 creation des objets abstract fact...
softCours design pattern m youssfi partie 9 creation des objets abstract fact...
 
Chp2 - Diagramme des Cas d'Utilisation
Chp2 - Diagramme des Cas d'UtilisationChp2 - Diagramme des Cas d'Utilisation
Chp2 - Diagramme des Cas d'Utilisation
 
Support POO Java Deuxième Partie
Support POO Java Deuxième PartieSupport POO Java Deuxième Partie
Support POO Java Deuxième Partie
 
Qc mcorrige
Qc mcorrigeQc mcorrige
Qc mcorrige
 
Etude d'une application de gestion d'une bibliothèque numérique
Etude d'une application de gestion d'une bibliothèque numérique Etude d'une application de gestion d'une bibliothèque numérique
Etude d'une application de gestion d'une bibliothèque numérique
 
Rapport projet conception et la réalisation d'une application web gestion des...
Rapport projet conception et la réalisation d'une application web gestion des...Rapport projet conception et la réalisation d'une application web gestion des...
Rapport projet conception et la réalisation d'une application web gestion des...
 
Chp1 - Introduction aux méthodologies de Conception
Chp1 - Introduction aux méthodologies de ConceptionChp1 - Introduction aux méthodologies de Conception
Chp1 - Introduction aux méthodologies de Conception
 
Support cours angular
Support cours angularSupport cours angular
Support cours angular
 
Support de Cours JSF2 Première partie Intégration avec Spring
Support de Cours JSF2 Première partie Intégration avec SpringSupport de Cours JSF2 Première partie Intégration avec Spring
Support de Cours JSF2 Première partie Intégration avec Spring
 
Support de cours Spring M.youssfi
Support de cours Spring  M.youssfiSupport de cours Spring  M.youssfi
Support de cours Spring M.youssfi
 
Chapitre 4 heritage et polymorphisme
Chapitre 4 heritage et polymorphismeChapitre 4 heritage et polymorphisme
Chapitre 4 heritage et polymorphisme
 
Expose linux gestion des processus
Expose linux  gestion des processusExpose linux  gestion des processus
Expose linux gestion des processus
 
Support de cours angular
Support de cours angularSupport de cours angular
Support de cours angular
 
Cours design pattern m youssfi partie 1 introduction et pattern strategy
Cours design pattern m youssfi partie 1 introduction et pattern strategyCours design pattern m youssfi partie 1 introduction et pattern strategy
Cours design pattern m youssfi partie 1 introduction et pattern strategy
 
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
 
Cours JavaScript
Cours JavaScriptCours JavaScript
Cours JavaScript
 
Chap 6 : classes et interfaces
Chap 6 : classes et interfacesChap 6 : classes et interfaces
Chap 6 : classes et interfaces
 

En vedette

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
 
JAVA-UIK-CHAP6-POO HERITAGE JAVA
JAVA-UIK-CHAP6-POO HERITAGE JAVAJAVA-UIK-CHAP6-POO HERITAGE JAVA
JAVA-UIK-CHAP6-POO HERITAGE JAVAAymen Bedwivski
 
Introduction au microsoft .net framework 4.0
Introduction au microsoft .net framework 4.0Introduction au microsoft .net framework 4.0
Introduction au microsoft .net framework 4.0Mahfoud EL HOUDAIGUI
 
Du Polymorphisme dynamique au polymorphisme statique : Abstraction sans perte...
Du Polymorphisme dynamique au polymorphisme statique : Abstraction sans perte...Du Polymorphisme dynamique au polymorphisme statique : Abstraction sans perte...
Du Polymorphisme dynamique au polymorphisme statique : Abstraction sans perte...cppfrug
 
C# - Mappages de types de données SQL Server
C# - Mappages de types de données SQL ServerC# - Mappages de types de données SQL Server
C# - Mappages de types de données SQL ServerMahfoud EL HOUDAIGUI
 
SQL Server preparation, installation et configuration
SQL Server   preparation, installation et configurationSQL Server   preparation, installation et configuration
SQL Server preparation, installation et configurationMahfoud EL HOUDAIGUI
 
c# programmation orientée objet (Classe & Objet)
c# programmation orientée objet (Classe & Objet)c# programmation orientée objet (Classe & Objet)
c# programmation orientée objet (Classe & Objet)Mahfoud 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
 
Ludovic Rondini - La nutrigénomique, une autre vision sur les nutriments
Ludovic Rondini - La nutrigénomique, une autre vision sur les nutrimentsLudovic Rondini - La nutrigénomique, une autre vision sur les nutriments
Ludovic Rondini - La nutrigénomique, une autre vision sur les nutrimentsAcadémies de Naturopathie
 
Polymorphisme : un concept polymorphe !
Polymorphisme : un concept polymorphe !Polymorphisme : un concept polymorphe !
Polymorphisme : un concept polymorphe !Aurélien Regat-Barrel
 
L'informatique nomade et polymorphe
L'informatique nomade et polymorpheL'informatique nomade et polymorphe
L'informatique nomade et polymorpheFrederic CAVAZZA
 
Fondamentaux java
Fondamentaux javaFondamentaux java
Fondamentaux javaInes Ouaz
 

En vedette (15)

Programmation orientée objet avancée
Programmation orientée objet avancéeProgrammation orientée objet avancée
Programmation orientée objet avancée
 
JAVA-UIK-CHAP6-POO HERITAGE JAVA
JAVA-UIK-CHAP6-POO HERITAGE JAVAJAVA-UIK-CHAP6-POO HERITAGE JAVA
JAVA-UIK-CHAP6-POO HERITAGE JAVA
 
Introduction au microsoft .net framework 4.0
Introduction au microsoft .net framework 4.0Introduction au microsoft .net framework 4.0
Introduction au microsoft .net framework 4.0
 
Du Polymorphisme dynamique au polymorphisme statique : Abstraction sans perte...
Du Polymorphisme dynamique au polymorphisme statique : Abstraction sans perte...Du Polymorphisme dynamique au polymorphisme statique : Abstraction sans perte...
Du Polymorphisme dynamique au polymorphisme statique : Abstraction sans perte...
 
C# - Mappages de types de données SQL Server
C# - Mappages de types de données SQL ServerC# - Mappages de types de données SQL Server
C# - Mappages de types de données SQL Server
 
SQL Server preparation, installation et configuration
SQL Server   preparation, installation et configurationSQL Server   preparation, installation et configuration
SQL Server preparation, installation et configuration
 
POO
POOPOO
POO
 
c# programmation orientée objet (Classe & Objet)
c# programmation orientée objet (Classe & Objet)c# programmation orientée objet (Classe & Objet)
c# programmation orientée objet (Classe & Objet)
 
C# langage & syntaxe
C#   langage & syntaxeC#   langage & syntaxe
C# langage & syntaxe
 
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
 
Ludovic Rondini - La nutrigénomique, une autre vision sur les nutriments
Ludovic Rondini - La nutrigénomique, une autre vision sur les nutrimentsLudovic Rondini - La nutrigénomique, une autre vision sur les nutriments
Ludovic Rondini - La nutrigénomique, une autre vision sur les nutriments
 
ADN et génotypage
ADN et génotypageADN et génotypage
ADN et génotypage
 
Polymorphisme : un concept polymorphe !
Polymorphisme : un concept polymorphe !Polymorphisme : un concept polymorphe !
Polymorphisme : un concept polymorphe !
 
L'informatique nomade et polymorphe
L'informatique nomade et polymorpheL'informatique nomade et polymorphe
L'informatique nomade et polymorphe
 
Fondamentaux java
Fondamentaux javaFondamentaux java
Fondamentaux java
 

Similaire à Polymorphisme

Javascript ne se limite pas à jquery
Javascript ne se limite pas à jqueryJavascript ne se limite pas à jquery
Javascript ne se limite pas à jqueryneuros
 
Chapitre 5 classes abstraites et interfaces
Chapitre 5  classes abstraites et interfacesChapitre 5  classes abstraites et interfaces
Chapitre 5 classes abstraites et interfacesAmir Souissi
 
chapitre5-Classesabstraitesetinterfaces.pdf
chapitre5-Classesabstraitesetinterfaces.pdfchapitre5-Classesabstraitesetinterfaces.pdf
chapitre5-Classesabstraitesetinterfaces.pdfMoez Moezm
 
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
 
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
 
Interface collectionsinter
Interface collectionsinterInterface collectionsinter
Interface collectionsinterRYMAA
 
chapitre4-HeritageetPolymorphisme.pdf
chapitre4-HeritageetPolymorphisme.pdfchapitre4-HeritageetPolymorphisme.pdf
chapitre4-HeritageetPolymorphisme.pdfMoez Moezm
 
Qualité logicielle
Qualité logicielleQualité logicielle
Qualité logiciellecyrilgandon
 
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
 
Chap3 programmation modulaire en python
Chap3 programmation modulaire en pythonChap3 programmation modulaire en python
Chap3 programmation modulaire en pythonMariem ZAOUALI
 

Similaire à Polymorphisme (20)

Polymorphisme
PolymorphismePolymorphisme
Polymorphisme
 
Javascript ne se limite pas à jquery
Javascript ne se limite pas à jqueryJavascript ne se limite pas à jquery
Javascript ne se limite pas à jquery
 
Chapitre 5 classes abstraites et interfaces
Chapitre 5  classes abstraites et interfacesChapitre 5  classes abstraites et interfaces
Chapitre 5 classes abstraites et interfaces
 
Php4 Mysql
Php4 MysqlPhp4 Mysql
Php4 Mysql
 
chapitre5-Classesabstraitesetinterfaces.pdf
chapitre5-Classesabstraitesetinterfaces.pdfchapitre5-Classesabstraitesetinterfaces.pdf
chapitre5-Classesabstraitesetinterfaces.pdf
 
cours1.ppt
cours1.pptcours1.ppt
cours1.ppt
 
cours1.ppt
cours1.pptcours1.ppt
cours1.ppt
 
cours2.ppt
cours2.pptcours2.ppt
cours2.ppt
 
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++
 
POO-JAVA-partie-1.pdf
POO-JAVA-partie-1.pdfPOO-JAVA-partie-1.pdf
POO-JAVA-partie-1.pdf
 
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
 
Playing With PHP 5.3
Playing With PHP 5.3Playing With PHP 5.3
Playing With PHP 5.3
 
Poss0502 slides
Poss0502 slidesPoss0502 slides
Poss0502 slides
 
Interface collectionsinter
Interface collectionsinterInterface collectionsinter
Interface collectionsinter
 
chapitre4-HeritageetPolymorphisme.pdf
chapitre4-HeritageetPolymorphisme.pdfchapitre4-HeritageetPolymorphisme.pdf
chapitre4-HeritageetPolymorphisme.pdf
 
Chapitre 04 : les fonctions
Chapitre 04 : les fonctionsChapitre 04 : les fonctions
Chapitre 04 : les fonctions
 
Qualité logicielle
Qualité logicielleQualité logicielle
Qualité logicielle
 
Langage C#
Langage C#Langage C#
Langage C#
 
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
 
Chap3 programmation modulaire en python
Chap3 programmation modulaire en pythonChap3 programmation modulaire en python
Chap3 programmation modulaire en python
 

Plus de Kamel Eddine Heragmi

Plus de Kamel Eddine Heragmi (6)

Objecteering
ObjecteeringObjecteering
Objecteering
 
Abstract factory+adapter
Abstract factory+adapterAbstract factory+adapter
Abstract factory+adapter
 
diagramme de cas d'utilisation
diagramme de cas d'utilisationdiagramme de cas d'utilisation
diagramme de cas d'utilisation
 
Timing diagram
Timing diagramTiming diagram
Timing diagram
 
7 diagramme de cas d'utilisation
7 diagramme de cas d'utilisation7 diagramme de cas d'utilisation
7 diagramme de cas d'utilisation
 
Generateur de code java (GenJAVA)
Generateur de code java (GenJAVA)Generateur de code java (GenJAVA)
Generateur de code java (GenJAVA)
 

Polymorphisme

  • 1. Polymorphisme Dynamique et Statique Réaliser Par : HERAGUEMI KAMEL EDDINE 1
  • 2. Définition du polymorphisme Le nom de polymorphisme vient du grec et signifie qui peut prendre plusieurs formes. Cette caractéristique est un des concepts essentiels de la programmation orientée objet. Alors que l'héritage concerne les classes (et leur hiérarchie), le polymorphisme est relatif aux méthodes des objets. On distingue généralement trois types de polymorphisme : • Le polymorphisme ad hoc (également surcharge ou en anglais overloading) , • Le polymorphisme paramétrique (également généricité ou en anglais template) , • Le polymorphisme d'héritage (également redéfinition, spécialisation ou en anglais overriding) . 2
  • 3. Le polymorphisme ad hoc • Permet d'avoir des fonctions de même nom, avec des fonctionnalités similaires, dans des classes sans aucun rapport entre elles . Par exemple, la classe complexe, la classe image et la classe lien peuvent avoir chacune une fonction "afficher". Cela permettra de ne pas avoir à se soucier du type de l'objet que l'on a si on souhaite l'afficher à l'écran. 3
  • 4. Le polymorphisme ad hoc • Permet ainsi des conversions implicites, ou coercions, présente dans pas mal de langages, au moins pour des types de base, certains permettant même à l’utilisateur de définir des conversions qui seront appliquées implicitement. Il est donc possible par exemple de surcharger l'opérateur (+) et de lui faire réaliser des actions différentes selon qu'il s'agit d'une opération entre deux Réels ou entre deux Entiers { …. int x=2 ,y=5; float x1 =2.122 ; Test t1 = new Test () ; t1.Add(x,y); t1.Add(x1,y); …… } 4
  • 5. Le polymorphisme paramétrique  Appelé généricité, représente la possibilité de définir plusieurs fonctions de même nom mais possédant des paramètres différents (en nombre et/ou en type).  Rend ainsi possible le choix automatique de la bonne méthode à adopter en fonction du type de donnée passée en paramètre. EXEMPLE : On peut par exemple définir plusieurs méthodes homonymes addition() effectuant une somme de valeurs. • La méthode int addition(int a, int b) pourra retourner la somme de deux entiers • La méthode float addition(float a, float b) pourra retourner la somme de deux flottants • La méthode string addition(char a, char b) pourra la concaténation de deux caractères . Alors , C'est la signature d'une méthode qui détermine laquelle sera appelée. 5
  • 6. Le polymorphisme d'héritage • La possibilité de redéfinir une méthode dans des classes héritant d'une classe de base s'appelle la spécialisation. Il est alors possible d'appeler la méthode d'un objet sans se soucier de son type intrinsèque : il s'agit du polymorphisme d'héritage. Ceci permet de faire abstraction des détails des classes spécialisées d'une famille d'objet, en les masquant par une interface commune (qui est la classe de base). 6
  • 7. Polymorphisme Dynamique et statique Polymorphisme statique - présentés par les fonctions surchargées au moment de compilation . Polymorphisme dynamique - présentés en utilisant une liaison dynamique crier en runtime. 7
  • 8. Polymorphisme statique • polymorphisme statique fait référence à une entité existante sous différentes formes physiques simultanément. • polymorphisme statique implique la liaison des fonctions basées sur le nombre, le type et la séquence des arguments. • Les différents types de paramètres sont spécifiés dans la déclaration de fonction, et donc la fonction peut être lié à des appels à la compilation. • Cette forme d'association est appelé une liaison anticipée. • Le terme liaison anticipée découle du fait que lorsque le programme est exécuté, les appels sont déjà liés à des fonctions appropriées. 8
  • 9. Polymorphisme statique Exemple 1: Void affi( int val ) {printf (‘ %d’,val);}; Void affi(float val){printf (‘%f’,val);}; //….. Class test{ int i ; void affiche (){printf (‘%d’,i)} } //…… Void affi(test& val ) {val.affiche ()}; //…….. Void main (){ int Mon_indice = 20; affi(mon_indice); test t1 ; affi (t1); } 9
  • 10. Polymorphisme dynamique • polymorphisme dynamique réfère à une entité change de forme selon les circonstances. • Une fonction est dite présenter polymorphisme dynamique quand il existe dans plus d'une forme, et demande à ses diverses formes sont résolus de façon dynamique lorsque le programme est exécuté. • Le terme liaison dynamique se réfère à la résolution des fonctions au moment de l'exécution au lieu de la compilation. • Cette caractéristique augmente la flexibilité du programme en permettant la méthode appropriée à être invoqués, selon le contexte. • La combinaison de l'héritage, de la virtualité et la possibilité de surcharger des méthodes permettent ce polymorphisme dynamique. 10
  • 11. Polymorphisme dynamique figure *f; // ... switch(...) { case ... : f = new rectangle; break; case ... : f = new carre; break; case ... : f = new hexagone; break; } f->afficher(); // On voudrait appeler la bonne version // de afficher selon la valeur de f // Actuellement : appel de // figure::afficher() !!! // .... transformer afficher // en fonction virtuelle 11
  • 12. Méthode virtuelle (1) • La mise en place du polymorphisme dynamique se réalise par l'intermédiaire des méthodes virtuelles. • Une méthode est marquée virtuelle par l'ajout du mot clé virtual au niveau de la déclaration uniquement. class figure { ... public: virtual void afficher(void) const; }; class rectangle : public figure { ... public: virtual void afficher(void) const; }; rectangle r; figure *ptf; ptf->afficher() ; // figure::afficher() figure& rf=r; rf.afficher(); //rectangle::afficher() 12
  • 13. Méthode virtuelle (2) • La détermination de la méthode à appeler est effectuée dynamiquement selon le type effectif de l'objet pointé ou référé (on parle de liaison dynamique). • Une méthode virtuelle reste virtuelle dans tout l'arbre de dérivation, même si elle n'est pas redéclarée virtuelle dans les classes dérivées. • Pour redéfinir une méthode virtuelle héritée, nécessité d'adéquation parfaite : signature et type de retour (sinon, la fonction virtuelle est masquée). • Les fonctions membres statiques ne peuvent pas être virtuelles. 13
  • 14. Exemple class A { public : virtual void f () { cout << "A"; } ; }; class B : public A { public: // foo reste virtuelle void f () { cout << "B"; } ; }; class C : public B { public: // foo reste virtuelle void f() {cout << "C"; }; }; int main() { A * a = new C; B * b = new C; a->f(); // foo virtuelle --> C::f() 14 b->f(); // foo virtuelle --> C::f()
  • 15. Merci pour Votre Attention 15
  • 16. 16