Citation :Conan sait maintenant gérer les Femmes.
Tu continues à confondre ce que la méthode accepte, et ce qu'elle en fait. Conan accepte n'importe quel objet, c'est la signature de la méthode qui le dit. Donc Hero gère n'importe quel objet, Femmes incluses, et si Conan décide de donner son or aux Femmes, c'est sa décision propre, interne.
L'algorithme de Conan ne discriminait pas les Femme avant, dans la nouvelle version oui. C'est la doc de Conan qui te le dit. L'objet Conan, pour le monde extérieur, n'a pas changé: il accepte toujours les mêmes messages puisque les signatures sont identiques. C'est sa façon de réagir qui a changé (comme ta TV incassable: elle acceptait encore le message "casse-toi", mais elle l'ignorait), et ça, c'est la doc qui te le définit (la doc de Conan).
Dans tout code, la sémantique est importante: si c'est copié/collé, c'est deux choses indépendantes qui agissent indépendamment. CalamityJane et Conan partagent la même interface: leurs méthodes acceptent la même chose. Ils ne partagent pas la même implémentation: leur façon de traiter le message diffère. Si Conan gère les Femme, tant mieux pour lui, mais en aucun cas cela ne concerne CalamityJane: seule son interface l'intéresse.
Pour bien le voir, voici l'espace publique de la lib et du projet:
Code :
interface Hero
public function askGold(mixed);
interface Beggar
public function meetHero(Hero);
public function giveGold(mixed);
interface Kid
public function giveGold(mixed);
class Conan implements Hero
class FrancoisdAssise implements Beggar
class CalamityJane implements Hero
C'est cela qui compte. C'est ce "contre" quoi tu codes. La discrimination éventuelle faite dans chaque classe, on s'en fiche. Que Conan décide de "gérer les Femme", c'est à dire de leur envoyer de l'or, c'est la décision interne de la classe. Elle apparait dans la doc, pas dans la signature de la méthode (c'est la liberté de la méthode de faire telle ou telle action dans telle ou telle situation).
Donc, non le "problème" soulevé n'en est pas un car la méthode de Hero gère n'importe quel objet, mais chaque classe implémente cette gestion comme elle l'entend. C'est le fondement d'une interface.
Note: cet espace publique est très peu pollué; dans la 2nde méthode, l'espace publique, aka la liste des messages acceptés par chaque interface donc par chaque classe, explose vite.
Note2 : l'algo de Conan est étrange: si un objet est Beggar&Kid&Femme, il lui file 3x son or...