Je ne sais pas si j'ai bien compris ton pb concret. Mais en général la délegation n'implique pas de dupliquer le bout de code à tout bout de champ comme tu le prétends
Soit A une interface avec un méthode m.
On crée une classe B qui implémente l'interface A avec un comportement par defaut et uniquement cette interface
Lorsqu'on on a besoin d'implementer l'interface A dans une classe C qui hérite d'une autre classe et qui impléménte peut-être d'autres interfaces. On se contente d'encapsuler une instance b de B et dans l'implementation de m dans la classe C on se contente d'appeler b.m().
Ce qui manque dans la sémantique des langages est justement la délégation. Je ne sais plus où j'avais lu ca mais il suffirait
de dire. pour la méthode m de C:
void m() delegates to c
Les avantages de cette technique, outre la factorisation sont que tu peux simplement changer d'implémentation par défaut en créant une nouvelle classe D d'implémentation par défaut, en ne changeant que la classe de l'instance c encapsulée dans la classe C.
L'autre avantage par rapport au mutil-héritage cette fois, c'est que le couplage est faible et dynamique. Ainsi si Renault se fait racheter par un autre boîte tu peux changer l'instance de constructeur que la voiture agrège, si tu veux changer de classe mère, il te faudra un langage qui supporte ce comportement ou supprimer et recréer une instance de la voiture et remplacer toutes les references à cette voiture. Une autre paire de manche.
[^] # Re: Mes deux centimes ...
Posté par golum . En réponse au journal Repenser les langages et le développement logiciel. Évalué à 3.
Soit A une interface avec un méthode m.
On crée une classe B qui implémente l'interface A avec un comportement par defaut et uniquement cette interface
Lorsqu'on on a besoin d'implementer l'interface A dans une classe C qui hérite d'une autre classe et qui impléménte peut-être d'autres interfaces. On se contente d'encapsuler une instance b de B et dans l'implementation de m dans la classe C on se contente d'appeler b.m().
Ce qui manque dans la sémantique des langages est justement la délégation. Je ne sais plus où j'avais lu ca mais il suffirait
de dire. pour la méthode m de C:
void m() delegates to c
Les avantages de cette technique, outre la factorisation sont que tu peux simplement changer d'implémentation par défaut en créant une nouvelle classe D d'implémentation par défaut, en ne changeant que la classe de l'instance c encapsulée dans la classe C.
L'autre avantage par rapport au mutil-héritage cette fois, c'est que le couplage est faible et dynamique. Ainsi si Renault se fait racheter par un autre boîte tu peux changer l'instance de constructeur que la voiture agrège, si tu veux changer de classe mère, il te faudra un langage qui supporte ce comportement ou supprimer et recréer une instance de la voiture et remplacer toutes les references à cette voiture. Une autre paire de manche.