Quand utiliser la délégation de l'héritage?
Quelqu'un pourrait-il expliquer quand je veux utiliser la délégation de l'héritage?
- Bonne discussion ici: stackoverflow.com/questions/49002/...
- Je ne vais pas développer sur les réponses données, cependant un livre que j'ai trouvé vraiment utile avec ces sortes de problèmes de conception OO est Arthur Riel excellent livre Conception Orientée Objet Heuristique. davegardner.moi.royaume-uni/lecture/oo-design-heuristiques amazon.co.royaume-uni/orientée-Objet-Design-Heuristiques-Arthur-Riel/dp/...
Vous devez vous connecter pour publier un commentaire.
Quand vous voulez "copier"/Exposer la classe de base de l'API, vous utiliser l'héritage.
Quand vous voulez seulement de la "copie" de la fonctionnalité, l'utilisation de la délégation.
Un exemple de ceci:
Vous souhaitez créer une Pile à partir d'une Liste. Pile a seulement pop, push et peek. Vous ne devriez pas utiliser l'héritage étant donné que vous ne voulez pas push_back, push_front, removeAt, et al.-type de fonctionnalité dans une Pile.
Ils n'ont rien à voir les uns avec les autres. Délégation est un comportement. L'héritage est un modèle de technique.
L'héritage est pour la modélisation de type "est-un". Un ordinateur de type "est-un" système électronique.
Délégation est de savoir comment les méthodes fournissent des résultats. Parfois, un objet de déléguer le travail à un autre objet. La délégation peut être par le biais de toute relation -- vous pouvez déléguer à une super-classe, à un membre d'un composite ou un agrégat, ou de toute relation.
Vous pouvez utiliser la délégation de multiples interne des instances de classe pour simplifier leur fonctionnalité dans le cadre d'un groupement. Si votre langue n'est pas de mettre en œuvre l'héritage multiple, par exemple, vous pouvez hériter de l'une des bases et enveloppez-les de l'autre, la délégation de la fonctionnalité que vous souhaitez exposer à l'implémentation sous-jacente. L'héritage aussi les liens de votre classe dans la hiérarchie des classes qui héritent d'où qu'avec la délégation vous pouvez conserver votre place dans votre propre hiérarchie et de déléguer les appels vers un autre.
Supposons que votre classe est appelée B et dérivés/délégué de classe est appelée alors
Voici quelques exemples lors de l'héritage ou de la délégation sont utilisés:
Si
À mon avis, la délégation peut être appelé quand il est temps de l'utiliser et de l'héritage est incorporé jamais.
Prendre le in_threads gem par exemple, les utiliser InThreads délégataire pour mettre en œuvre les threads pour toute Ruby Énumérable module. Avec cette, seulement appel in_threads méthodes sur un tableau, il sera exécuté dans les threads.
Je suis d'accord avec @Anzurio. Juste pour expliquer en termes simples: