IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[POO] Polymorphisme


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2009
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 52
    Points : 18
    Points
    18
    Par défaut [POO] Polymorphisme
    j'ai entendu parlé du polymorphisme quelqu'un peut m'expliquer c'est quoi et est ce que on peut le faire en php? et vous pensez quoi de ça???merci d'avance

  2. #2
    Membre habitué

    Homme Profil pro
    Developpeur web
    Inscrit en
    Septembre 2006
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Developpeur web
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 225
    Points : 180
    Points
    180
    Par défaut
    Si je ne me trompe pas le polymorphisme en php n'est utilisé que pour les fonctions et méthode, c'est à dire que si tu as une fonction qui prend pour argument un objet de la classe a et que b descends de a alors tu peux donner comme argument à la fonction un objet de classe b car b ne fait qu'ajouter des attributs méthode par rapport à un objet a (ce qui ne saurait gêner la fonction)

  3. #3
    mon_nom_est_personne
    Invité(e)
    Par défaut
    un exemple plutot qu'un long discours:

    disons que tu as une application qui a besoin de produire plusieurs format de sortie on va dire txt ou xml. On vois bien que l'implementation est differente mais les fonctionalites sont les memes :
    - formater
    - afficher

    donc on a deux classes, qui ont les memes fonctions et font partie de la meme super-classe. Ce qui sera traduit en langage machine par le fait qu'on aura 1 classe abstraite parent de deux sous classe texte et html.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    <?php
    abstract class affichage
    {
         protect $contenue = "";
         abstract public function formater($chaine);
        public function afficher(){
          echo $this->contenue;
       }
    }
     
    class texte extends affichage
    {
       public function formater($chaine){
         $this->contenue .= $chaine."\n";
       }
     
    }
     
    class html extends affichage
    {
       public function formater($chaine){
         $this->contenue .= $chaine."<br>";
       }
     
    }
    ?>
    Donc maintenant comment faire pour utiliser l'un ou l'autre de maniere transparente ?
    N'oublions qu'elles sont des sous-classe de affichage ... Et c'est la que la malice s'opere

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    <?php
    abstract class affichage
    {
         protect $contenue = "";
         abstract public function formater($chaine);
        public function afficher(){
          echo $this->contenue;
       }
     
       static function set_affichage($type)
       {
           return new $type;
        }
    }
    ?>
    En gros nous allons utiliser cette methode statique qui va nous retourner un objet du type que l'on veux.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <?php
    $element = affichage::set_affichage('texte');
    $element->formater(' la version texte');
    $element->formater(' elle marche bien');
    $element->afficher();
     
    $element2 = affichage::set_affichage('html');
    $element2->formater(' la version html');
    $element2->formater(' elle marche bien aussi');
    $element2->afficher();
    ?>
    une procedure, une variable, une infinite de possibilites. C'est ce qu'on appelle le polymorphisme. Demain tu a besoin de sortir le contenue en xml tu n'as plus qu'a ecrire une class xml et c'est fini.

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    167
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 167
    Points : 186
    Points
    186
    Par défaut
    C'est un sujet qui m'intéresse également. Mais pourrais tu revenir un peux sur ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    <?php
    abstract class affichage
    {
         protect $contenue = "";
         abstract public function formater($chaine);
        public function afficher(){
          echo $this->contenue;
       }
    }
     
    class texte extends affichage
    {
       public function formater($chaine){
         $this->contenue .= $chaine."\n";
       }
     
    }
     
    class html extends affichage
    {
       public function formater($chaine){
         $this->contenue .= $chaine."<br>";
       }
     
    }
    ?>
    Je dois avouer que je ne comprend pas très bien le fonctionnement.

  5. #5
    Membre à l'essai
    Inscrit en
    Avril 2009
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 52
    Points : 18
    Points
    18
    Par défaut
    par exemple si j'ai une classe mére télécharger et 3 autres classe filles télécharger sql et télécharger trans téléchar reqest ce que je peux appliqué le polymorph

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    167
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 167
    Points : 186
    Points
    186
    Par défaut
    Citation Envoyé par lina22 Voir le message
    par exemple si j'ai une classe mére télécharger et 3 autres classe filles télécharger sql et télécharger trans téléchar reqest ce que je peux appliqué le polymorph
    C'est un langage de programmation ce que tu viens de dire ?

  7. #7
    mon_nom_est_personne
    Invité(e)
    Par défaut
    Citation Envoyé par Doki95 Voir le message
    C'est un sujet qui m'intéresse également. Mais pourrais tu revenir un peux sur ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    <?php
    abstract class affichage
    {
         protect $contenue = "";
         abstract public function formater($chaine);
        public function afficher(){
          echo $this->contenue;
       }
    }
     
    class texte extends affichage
    {
       public function formater($chaine){
         $this->contenue .= $chaine."\n";
       }
     
    }
     
    class html extends affichage
    {
       public function formater($chaine){
         $this->contenue .= $chaine."<br>";
       }
     
    }
    ?>
    Je dois avouer que je ne comprend pas très bien le fonctionnement.
    L'idee c'est d'avoir plusieurs implementation d'une classe dans la meme interface (dans sa definition objet). c'est a dire avec plusieurs classe, structurer a l'identique qui font des choses differentes.
    L'interet etant qu'a partir d'une meme procedure (l'appel de classe + appel de methode) on puisse executer plusieurs tache.
    on utilise alors une classe abstraite car sa nous permet de forcer la struture des classes (comme une interface) et en meme temps d'implementer les methodes communes (dans ce cas la methode "afficher") et d'abstraire l'appel a ma classe utiliser (la statique "set_affichage"). Le principe derriere c'est le DRY (Don't Repeat Yourself).

Discussions similaires

  1. [Etats & Requêtes] POO polymorphisme et Etat
    Par Atsibat dans le forum WinDev
    Réponses: 2
    Dernier message: 21/08/2012, 12h26
  2. [POO] polymorphisme avec PHP5
    Par novices dans le forum Langage
    Réponses: 6
    Dernier message: 23/07/2011, 15h48
  3. [POO] Surcharge et polymorphisme
    Par swampsnake dans le forum Langage
    Réponses: 12
    Dernier message: 06/08/2009, 11h34
  4. POO : difference entre heritage et polymorphisme
    Par Melvine dans le forum Langages de programmation
    Réponses: 13
    Dernier message: 13/07/2009, 19h14
  5. [POO] MVC Half-Edge et polymorphisme
    Par TanEk dans le forum C++
    Réponses: 8
    Dernier message: 14/12/2008, 17h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo