Polymorphisme de l'Objective-C

elaumelaum Membre
07:22 modifié dans API AppKit #1
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)

Réponses

  • 07:22 modifié #2
    Polymorphisme: le fait qu'une méthode peut avoir un meme nom, même si les différentes classes qui l'implémentent n'ont pas grad chose à  voir entre elles (exemple: intValue, implémentée aussi bien par NSCell que NSString - et d'autres encore).

    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.
  • elaumelaum Membre
    07:22 modifié #3
    Merci beaucoup.  :(renaud):
  • AliGatorAliGator Membre, Modérateur
    07:22 modifié #4
    En résumé pour voir si j'ai bien compris moi aussi de mon côté (je pense savoir mais c'est pour être au clair) :

    - 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 ?
  • 07:22 modifié #5
    Yep.
Connectez-vous ou Inscrivez-vous pour répondre.