Polymorphisme de l'Objective-C
elaum
Membre
Bonjour.
Je suis en trains d'essayer d'un peu mieux comprendre les concepts de la POO car j'en ai marre de bidouiller un langage en regardant la doc.
J'ai à peu près tout compris sauf le polymorphisme.
J'ai pas vraiment compris la différence entre le polymorphisme ad hoc/overloading et le polymorphisme de spécialisation/héritage/overridding et c'est pas faute d'avoir parcourus pleins de sites web.
Ce que j'ai compris sur l'overridding, c'est que l'on peu déclarer une classe forme.
Puis dans chaque sous classe, on déclare une méthode aire:.
On peu ensuite appeler aire: sur un objet d'une sous-classe de forme sans savoir de quelle sous classe il vient.
Le problème est que j'ai compris la même chose pour l'overloading à la différence qu'on se soucie pas de la classe.
Si quelqu'un qui a compris pouvais m'éclairer voire me donner un exemple 8)
Je suis en trains d'essayer d'un peu mieux comprendre les concepts de la POO car j'en ai marre de bidouiller un langage en regardant la doc.
J'ai à peu près tout compris sauf le polymorphisme.
J'ai pas vraiment compris la différence entre le polymorphisme ad hoc/overloading et le polymorphisme de spécialisation/héritage/overridding et c'est pas faute d'avoir parcourus pleins de sites web.
Ce que j'ai compris sur l'overridding, c'est que l'on peu déclarer une classe forme.
Puis dans chaque sous classe, on déclare une méthode aire:.
On peu ensuite appeler aire: sur un objet d'une sous-classe de forme sans savoir de quelle sous classe il vient.
Le problème est que j'ai compris la même chose pour l'overloading à la différence qu'on se soucie pas de la classe.
Si quelqu'un qui a compris pouvais m'éclairer voire me donner un exemple 8)
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Overridding (traduit par surcharge): réimplémentation d'une méthode appartenant à la classe parent. Donc dans ton exemple, la classe Forme déclare une méthode [tt]aire[/tt] (et non les sous-classes!) mais qui génère une erreur - pour etre sur que les sous-classes implémentent bien la dite méthode, et les sous-classes surchargent cette méthode pour renvoyer l'aire en utilisant une formule appropriée.
Overloading: n'existe pas à ma connaissance en Objective-C. Il s'agit de redéfinir par exemple le comportement d'opérateur suivant le type d'objets utilisés. Pour donner un exemple, on aurait pu overloader "+" pour que lorsqu'on l'utilise avec des NSNumber cela fasse une addition directement (sans avoir à passer par des floatValue par exemple). Il y a aussi l'overloading d'argument, présent en C++, où une fonction peut avoir le meme nom, etre implémentée différement suivant qu'on ait affaire à un argument d'un type ou d'un autre. Donc par exemple, tu aurais une fonction qui prend un int comme arguement, et tu l'overloades pour qu'elle puisse prendre un float comme argument.
- overridding (surcharge) = tu sous-classes une classe parent A, et tu réécris une méthode dans cette sous-classe (méthode qui existait dans A), avec les mêmes paramètres.
C'est ce qu'on fait assez souvent en ObjC, avec les méthodes renvoyant un booléen (should..., can...) ou même les dealloc, awakeFromNib, etc.
- overloading : on écrit une même méthode plusieurs fois mais en changeant les types d'arguments, ce qui se fait souvent en C++ pour les opérateurs par exemple (en fonction de si on fait une addition avec un nombre, une chaine, etc)
J'ai bon ?