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

Chapitre8: Collections et Enumerations En Java
Chapitre8: Collections et Enumerations En JavaChapitre8: Collections et Enumerations En Java
Chapitre8: Collections et Enumerations En JavaAziz Darouichi
 
Transformation M2M avec ATL
Transformation M2M avec ATL Transformation M2M avec ATL
Transformation M2M avec ATL Halima Bouabdelli
 
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
 
Chap 6 : classes et interfaces
Chap 6 : classes et interfacesChap 6 : classes et interfaces
Chap 6 : classes et interfacesAziz Darouichi
 
Correction Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdfCorrection Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdfslimyaich3
 
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
 
POO Java Chapitre 2 Encapsulation
POO Java Chapitre 2 EncapsulationPOO Java Chapitre 2 Encapsulation
POO Java Chapitre 2 EncapsulationMouna Torjmen
 
POO Java Chapitre 4 Heritage et Polymorphisme
POO Java Chapitre 4 Heritage et PolymorphismePOO Java Chapitre 4 Heritage et Polymorphisme
POO Java Chapitre 4 Heritage et PolymorphismeMouna Torjmen
 
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
 
La gestion des exceptions avec Java
La gestion des exceptions avec JavaLa gestion des exceptions avec Java
La gestion des exceptions avec JavaPapa Cheikh Cisse
 

Tendances (20)

Support de cours Spring M.youssfi
Support de cours Spring  M.youssfiSupport de cours Spring  M.youssfi
Support de cours Spring M.youssfi
 
Chapitre8: Collections et Enumerations En Java
Chapitre8: Collections et Enumerations En JavaChapitre8: Collections et Enumerations En Java
Chapitre8: Collections et Enumerations En Java
 
Transformation M2M avec ATL
Transformation M2M avec ATL Transformation M2M avec ATL
Transformation M2M avec ATL
 
Support developpement applications mobiles avec ionic v3 et v4
Support developpement applications mobiles avec ionic v3 et v4Support developpement applications mobiles avec ionic v3 et v4
Support developpement applications mobiles avec ionic v3 et v4
 
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
 
Cours design pattern m youssfi partie 3 decorateur
Cours design pattern m youssfi partie 3 decorateurCours design pattern m youssfi partie 3 decorateur
Cours design pattern m youssfi partie 3 decorateur
 
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
 
Tp java ee.pptx
Tp java ee.pptxTp java ee.pptx
Tp java ee.pptx
 
Chap 6 : classes et interfaces
Chap 6 : classes et interfacesChap 6 : classes et interfaces
Chap 6 : classes et interfaces
 
Correction Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdfCorrection Examen 2016-2017 POO .pdf
Correction Examen 2016-2017 POO .pdf
 
Support Java Avancé Troisième Partie
Support Java Avancé Troisième PartieSupport Java Avancé Troisième Partie
Support Java Avancé Troisième Partie
 
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...
 
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
 
POO Java Chapitre 2 Encapsulation
POO Java Chapitre 2 EncapsulationPOO Java Chapitre 2 Encapsulation
POO Java Chapitre 2 Encapsulation
 
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 JEE Spring Inversion de Controle IOC et Spring MVC
Support JEE Spring Inversion de Controle IOC et Spring MVCSupport JEE Spring Inversion de Controle IOC et Spring MVC
Support JEE Spring Inversion de Controle IOC et Spring MVC
 
Cours design pattern m youssfi partie 2 observer
Cours design pattern m youssfi partie 2 observerCours design pattern m youssfi partie 2 observer
Cours design pattern m youssfi partie 2 observer
 
POO Java Chapitre 4 Heritage et Polymorphisme
POO Java Chapitre 4 Heritage et PolymorphismePOO Java Chapitre 4 Heritage et Polymorphisme
POO Java Chapitre 4 Heritage et Polymorphisme
 
Programmation orientée objet avancée
Programmation orientée objet avancéeProgrammation orientée objet avancée
Programmation orientée objet avancée
 
La gestion des exceptions avec Java
La gestion des exceptions avec JavaLa gestion des exceptions avec Java
La gestion des exceptions avec Java
 

En vedette

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 (14)

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
 
Chapitre 4 heritage et polymorphisme
Chapitre 4 heritage et polymorphismeChapitre 4 heritage et polymorphisme
Chapitre 4 heritage et polymorphismeAmir Souissi
 
chapitre4-HeritageetPolymorphisme.pdf
chapitre4-HeritageetPolymorphisme.pdfchapitre4-HeritageetPolymorphisme.pdf
chapitre4-HeritageetPolymorphisme.pdfMoez Moezm
 
Qualité logicielle
Qualité logicielleQualité logicielle
Qualité logiciellecyrilgandon
 

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
 
Polymorphisme, interface et classe abstraite
Polymorphisme, interface et classe abstraitePolymorphisme, interface et classe abstraite
Polymorphisme, interface et classe abstraite
 
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
 
Chapitre 4 heritage et polymorphisme
Chapitre 4 heritage et polymorphismeChapitre 4 heritage et polymorphisme
Chapitre 4 heritage et polymorphisme
 
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#
 

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