Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1583 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  polymorphisme

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

polymorphisme

n°1165911
jokari34
Posté le 31-07-2005 à 10:34:39  profilanswer
 

j'ai lu des articles a propos du polymorphisme (dont classe abstraire + interface) en POO, mais j'ai du mal a comprendre.
 
quelqu'un pourrait m'expliquer quel est l'interet et comment ca marche (si possible en PHP) ?
 
pour ma part j'ai fait un code pour essayer de piger :
est ce que le code suivant est un cas de polymorphisme :
 

Code :
  1. <?php
  2. class animal {
  3.    
  4.   private $cri;
  5.  
  6.      function __construct() {
  7.      }
  8.    
  9.     function crier() {
  10.        
  11.         return $this->cri;
  12.     }
  13.    
  14.    
  15. }
  16. $new_animal = new animal();
  17. echo $new_animal->crier();
  18. ?>


 

Code :
  1. <?php
  2. require_once("animal.php" );
  3. class renard extends animal {
  4.    
  5.     function __construct() {
  6.    
  7.         $this->cri = "glapir";
  8.  
  9.     }
  10.    
  11.     function crier(){
  12.    
  13.      return $this->cri;
  14.     } 
  15. }
  16. $new_renard = new renard();
  17. echo $new_renard->crier();
  18. ?>


 

Code :
  1. <?php
  2. require_once("animal.php" );
  3. class loup extends animal {
  4.    
  5.    
  6.     function __construct() {
  7.    
  8.         $this->cri = "aboyer"; 
  9.     }
  10.    
  11.    function crier(){
  12.    
  13.      return $this->cri;
  14.     } 
  15. }
  16. $new_loup  = new loup();
  17. echo $new_loup->crier();
  18. ?>



Message édité par jokari34 le 31-07-2005 à 10:52:46
mood
Publicité
Posté le 31-07-2005 à 10:34:39  profilanswer
 

n°1165918
jokari34
Posté le 31-07-2005 à 10:56:57  profilanswer
 

je pense que tel que presenté c plutot de la redondance, car chaque redéfinition de la methode crier() a le meme contenu.
que faudrait il faire pour entre dans le cadre d'un polymorphisme ?
que chaque re définiton de crier() affecte au membre $cri une valeur différente, au lieu de donner cette tache au constructeur de la classe ?

n°1165920
zapan666
Tout est relatif
Posté le 31-07-2005 à 11:00:57  profilanswer
 

l'interet, c'est dans l'utilisation
 
 

Code :
  1. function mettre_en_cage ( ma_bestiolle ) {
  2. echo ma_bestiolle->crier();
  3. }


 
et essaye avec ça comme exemple :  

Code :
  1. mettre_en_cage($new_loup);
  2. mettre_en_cage($renard);


 
tu fais une seule fonction mettre_en_cage, pour tous les types d'animaux
 
(alors que normalement, tu aurais du faire : mettre_en_cage_loup, mettre_en_cage_renard, etc)


Message édité par zapan666 le 31-07-2005 à 11:02:06

---------------
my flick r - Just Tab it !
n°1165926
sircam
I Like Trains
Posté le 31-07-2005 à 11:20:07  profilanswer
 

jokari34 a écrit :

je pense que tel que presenté c plutot de la redondance, car chaque redéfinition de la methode crier() a le meme contenu.
que faudrait il faire pour entre dans le cadre d'un polymorphisme ?


Tu ne dois pas ré-écrire la méthode crier de Animal dans chaque descendant Renard, Loup, ... Ces derniers héritent de la méthode de leur parent Animal.


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°1165930
jokari34
Posté le 31-07-2005 à 11:23:42  profilanswer
 

la seule fonction mettre_en_cage  je la crée ou  ?

n°1165931
jokari34
Posté le 31-07-2005 à 11:24:25  profilanswer
 

apparemment dapres Sircam je dois la créer dans la classe animal

n°1165932
zapan666
Tout est relatif
Posté le 31-07-2005 à 11:27:49  profilanswer
 

jokari34 a écrit :

la seule fonction mettre_en_cage  je la crée ou  ?


 
C'est juste un exemple...Tu peux la mettre dans un objet Cage  [:petrus75]
Sircam n'a pas dit que tu devais la mettre dans Animal : il a dit, ça sert a rien de redéfinir les fonctions crier dans Renard et Loup, car c'est la même dans Animal.
 
Tu dois redéfinir la fonction que si elle est différente. (mais un renard, ça crie comme un loup, non ?  [:aztechxx] )  


---------------
my flick r - Just Tab it !
n°1165934
jokari34
Posté le 31-07-2005 à 11:30:07  profilanswer
 

ok
- mettre_en_cage prend comme argument ma_bestiole.
- ma_bestiole correspond a une nouvelle instance de la classe renard.
et comme la sous classe renard herite de la methode crier() de la classe animal, mettre_en_cage demande l'affichage du cri de l'objet animal indiqué.
 
je vois donc pas vraiment où est la différence entre polymorphisme et héritage, sachant que tout simplement, la methode mettre_en_cage() définie dans la classe mère animal est héritée dans les 2 sous classes renard et loup.

n°1165937
jokari34
Posté le 31-07-2005 à 11:35:19  profilanswer
 

le principe consisterait donc a utiliser une seule methode qui servira a toutes les sous classes heritant d'une classe mere commune , mais dont le traitement exploitera des données différentes (données provenant d'un objet passé en parametre)
 
par contre, si une sous classe a besoin de la methode mettre_en_cage() avec son contenu d'origine  mais a besoin d'y ajouter quelques trucs en plus, comment je fais ?

n°1165948
esox_ch
Posté le 31-07-2005 à 11:57:10  profilanswer
 

Tu fais un mettre_en_cage($a){
$super->mettre_en_cache($a);
// Ce que tu veux rajouter  
}
 
Edit: J'étais resté en mode Java...


Message édité par esox_ch le 31-07-2005 à 11:57:35

---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
mood
Publicité
Posté le 31-07-2005 à 11:57:10  profilanswer
 

n°1165949
zapan666
Tout est relatif
Posté le 31-07-2005 à 11:57:53  profilanswer
 

tu la redéfini en appelant la fonction parente
 

Code :
  1. function mettre_en_cage() {
  2. parent::mettre_en_cage()
  3. echo "lkjlkj";
  4. }


 
(grosso modo, ça doit être ça en php5, tu devrais trouver ça ici :  
http://doc.domainepublic.net/php/d [...] .oop5.html


---------------
my flick r - Just Tab it !
n°1165951
jokari34
Posté le 31-07-2005 à 11:59:36  profilanswer
 

ok tu inclus la methode de base dans une nouvelle methode.

n°1166344
zapan666
Tout est relatif
Posté le 01-08-2005 à 08:55:46  profilanswer
 

p'tite question : si je rajoute un argument spécifique dans une fonction hérité, ça pose un problème ou pas ? (J'ai pas essayé..j'ai eux l'idée dans le train ce matin [:petrus75] )
 
exemple :
 
Classe parente  

Code :
  1. class bidule {
  2. function machin (arg1) {
  3. }
  4. }


 
Classe fille :  

Code :
  1. class truc {
  2. function machin (arg1, arg2 = null) {
  3. }
  4. }


---------------
my flick r - Just Tab it !
n°1166430
esox_ch
Posté le 01-08-2005 à 10:32:33  profilanswer
 

Si je me trompe pas, il y a pas de problemes ... Le constructeur de la classe fille sera celui defini dans celle-ci et celui de la classe parente ne sera pas pris en compte ... Salopperie de PHP qui connais pas la surcharge de methodes/constructeur :D


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°1166447
zapan666
Tout est relatif
Posté le 01-08-2005 à 10:40:05  profilanswer
 

esox_ch a écrit :

Si je me trompe pas, il y a pas de problemes ... Le constructeur de la classe fille sera celui defini dans celle-ci et celui de la classe parente ne sera pas pris en compte ... Salopperie de PHP qui connais pas la surcharge de methodes/constructeur :D


faut dire aussi qu'il n'y a pas de type en php, alors la surcharge, c'est chaud [:petrus75]
 

Code :
  1. function __construct( un_entier ) {
  2. }
  3. function __construct ( un_string) {
  4. }


 
C'est chaud de faire la différence entre les deux constructeurs [:petrus75]
(par contre, il est vrai que la surcharge sur le nombre d'argument, ça sera un petit plus déjà )
 
 


---------------
my flick r - Just Tab it !

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  polymorphisme

 

Sujets relatifs
Pourquoi c'est tellement lent ?[java] Classe abstraite, polymorphisme et tableau
Principes d'héritage et de polymorphisme... à l'aide ![Java] Polymorphisme : besoin d'explications
[K.D.KOL] runtime class d'un Object et polymorphismePolymorphisme : kezako ?
polymorphisme et templatepolymorphisme
[C++] Héritage et PolymorphismeC++ & Polymorphisme... besoin de trucs - conseils - tuto
Plus de sujets relatifs à : polymorphisme


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR