polymorphisme - PHP - Programmation
Marsh Posté le 31-07-2005 à 10:56:57
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 ?
Marsh Posté le 31-07-2005 à 11:00:57
l'interet, c'est dans l'utilisation
Code :
|
et essaye avec ça comme exemple :
Code :
|
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)
Marsh Posté le 31-07-2005 à 11:20:07
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. |
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.
Marsh Posté le 31-07-2005 à 11:24:25
apparemment dapres Sircam je dois la créer dans la classe animal
Marsh Posté le 31-07-2005 à 11:27:49
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
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 ? )
Marsh Posté le 31-07-2005 à 11:30:07
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.
Marsh Posté le 31-07-2005 à 11:35:19
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 ?
Marsh Posté le 31-07-2005 à 11:57:10
Tu fais un mettre_en_cage($a){
$super->mettre_en_cache($a);
// Ce que tu veux rajouter
}
Edit: J'étais resté en mode Java...
Marsh Posté le 31-07-2005 à 11:57:53
tu la redéfini en appelant la fonction parente
Code :
|
(grosso modo, ça doit être ça en php5, tu devrais trouver ça ici :
http://doc.domainepublic.net/php/d [...] .oop5.html
Marsh Posté le 31-07-2005 à 11:59:36
ok tu inclus la methode de base dans une nouvelle methode.
Marsh Posté le 01-08-2005 à 08:55:46
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 )
exemple :
Classe parente
Code :
|
Classe fille :
Code :
|
Marsh Posté le 01-08-2005 à 10:32:33
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
Marsh Posté le 01-08-2005 à 10:40:05
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 |
faut dire aussi qu'il n'y a pas de type en php, alors la surcharge, c'est chaud
Code :
|
C'est chaud de faire la différence entre les deux constructeurs
(par contre, il est vrai que la surcharge sur le nombre d'argument, ça sera un petit plus déjà )
Marsh Posté le 31-07-2005 à 10:34:39
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 :
Message édité par jokari34 le 31-07-2005 à 10:52:46