Pourquoi le cacao utilise-t-il les délégués plutôt que l'héritage?Pourquoi le cacao utilise-t-il les délégués plutôt que l'héritage?
Répondre
Avec les délégués, vous pouvez avoir un objet comme délégué de nombreux autres objets. Par exemple, vous pouvez faire en sorte que votre instance de MyController soit le délégué d'une NSTableView, d'une NSTextField, d'une NSWindow et de tout autre objet qui compose votre interface. Cela donne un endroit compact pour mettre tout votre code d'interface utilisateur lié à une section de votre interface utilisateur.
Si vous l'aviez fait avec le sous-classement, vous auriez à créer une sous-classe de tous les objets à partir desquels vous vouliez effectuer des rappels.
En outre, c'est un classique inheritance vs composition question
En général, la création d'une sous-classe peut prendre beaucoup de temps, nécessitant beaucoup de travail de base et remplaçant diverses méthodes de gabarit. Pendant ce temps, l'utilisation d'un délégué vous permet de créer un objet simple qui répond à quelques questions spécifiques ou réagit de diverses manières. Maintenant, lorsque vous combinez cela avec le dynamisme que vous pouvez réaliser en échangeant des délégués à la volée, vous pouvez créer un système robuste très flexible qui favorise la réutilisation du code.
Il y a quelques discussions générales concernant ces choses here et here. Vous pouvez également trouver quelques anciennes questions SO here et here.
Comment un template prend moins de peine à créer qu'une sous-classe? D'un autre côté, la capacité d'échange à la volée pourrait être utile dans certaines circonstances, mais je ne vois pas pourquoi c'est nécessaire pour Cocoa. – Casebash
Je ne suis même pas sûr que ce soit moins de travail, mais moins de niveaux d'héritage mènent à une conception généralement plus simple. La simplicité est une bonne chose (tm). –
Quant à la nécessité. Rien n'est absolument nécessaire, c'était l'avis des concepteurs du framework qui, étant donné les contraintes du langage, que la composition par délégation était le meilleur choix de design qu'ils pouvaient faire. Après y avoir travaillé pendant environ un an, je suis enclin à convenir que le choix était bon. Mais c'était un peu étrange pour moi quand je suis venu à Cocoa d'autres langues. –
ont longuement discuté ici: http://www.cocoadev.com/index.pl?ExtendsIsEvil
Et Java gars savent aussi: http://www.javaworld.com/javaworld/jw-08-2003/jw-0801-toolbox.html
Pourrait aussi bien mettre un commentaire si vous n'allez pas élaborer. Que se passe-t-il si ces liens deviennent morts, comme le premier? – pqsk
Les délégués simplifient la personnalisation du comportement de l'objet tout en minimisant le couplage entre les classes. L'héritage est défini au moment de la compilation, la délégation n'est pas restreinte comme cela et peut être effectuée au moment de l'exécution. – bbaassssiiee
Je ne sais pas assez sur obj-/cacao pour répondre à cette question dans la dette (sûrement de grandes réponses suivront) mais iirc l'argument principal est que l'utilisation des délégués permet un couplage plus «lâche» puis l'utilisation de l'héritage (multiple) (impossible dans obj-c). – ChristopheD
Qu'est ce que l'iirc? Je n'en ai pas entendu parler. – Casebash
iirc = si je me souviens bien – ChristopheD