Laurent Deniau
2005-09-14 13:39:53 UTC
Je cherche a savoir si il existe des langages qui sont capables de faire
de la delagation de type. Mon contexte est le langage C, mais ca n'a en
principe pas d'importance.
Objective-C avec sa methode forward: ou son objet NSInvocation est
capable de faire de la delegation de *comportement*. Le premier cas est
tres restrictif quand a la propagation des arguments et le type de
retour (sans parler de non-portabilite) et le second est tres lourd et
tres lent. D'une maniere generale on peut se demander si la delegation
de comportement peut etre a la fois simple, efficace et sure
(verification des types). D'autres langages qu'Objective-C supportent
aussi plus ou moins bien la delegation de comportement.
Au lieu de propager un comportement, la delagation de type (beaucoup
plus simple) consiste a demander en dernier recours a l'objet lui-meme
un objet de substitution qui correspond au type demande et qui supporte
directement le comportement plutot que de le deleguer. Concretement dans
mon systeme, cela se traduit par un operateur de cast dynamique (disons
un equivalent de dynmique_cast a la C++) qui si la conversion echoue,
appelle une fonction virtuelle cast(type) heritee par toutes les
classes. Par defaut cette methode renvoie 0 (ou NULL ou nil suivant
affinite). Mais une classe est libre de redefinir cette methode et de
retourner autre chose. Par exemple un objet contenu dans l'instance, un
singleton, un objet cree a la volee, etc... L'avantage de la delegation
de type est que la delegation de comportement, l'heritage multiple ou
l'heritage dynamique peuvent etre simules simplement et efficacement.
Cela ouvre aussi la voie a de nouveau 'design pattern' tres flexibles
(pour un langage dynamiquement type). Cependant, l'instance retournee
pouvant ne plus etre l'objet original, il ne doit donc pas etre detruit
mais cela s'avere une contrainte mineure et simple. Un cast vers l'objet
original est normalement impossible (mais peut le devenir si
necessaire), mais la aussi, c'est un besoin rare (que je n'ai pas encore
rencontre).
Je ne connais pas de langage OO general (type C++, Java, Eiffel) qui
offre ce genre de facilite (ou je n'en ai pas reconnu le principe).
Auriez-vous des exemples, reference ou papiers?
a+, ld.
de la delagation de type. Mon contexte est le langage C, mais ca n'a en
principe pas d'importance.
Objective-C avec sa methode forward: ou son objet NSInvocation est
capable de faire de la delegation de *comportement*. Le premier cas est
tres restrictif quand a la propagation des arguments et le type de
retour (sans parler de non-portabilite) et le second est tres lourd et
tres lent. D'une maniere generale on peut se demander si la delegation
de comportement peut etre a la fois simple, efficace et sure
(verification des types). D'autres langages qu'Objective-C supportent
aussi plus ou moins bien la delegation de comportement.
Au lieu de propager un comportement, la delagation de type (beaucoup
plus simple) consiste a demander en dernier recours a l'objet lui-meme
un objet de substitution qui correspond au type demande et qui supporte
directement le comportement plutot que de le deleguer. Concretement dans
mon systeme, cela se traduit par un operateur de cast dynamique (disons
un equivalent de dynmique_cast a la C++) qui si la conversion echoue,
appelle une fonction virtuelle cast(type) heritee par toutes les
classes. Par defaut cette methode renvoie 0 (ou NULL ou nil suivant
affinite). Mais une classe est libre de redefinir cette methode et de
retourner autre chose. Par exemple un objet contenu dans l'instance, un
singleton, un objet cree a la volee, etc... L'avantage de la delegation
de type est que la delegation de comportement, l'heritage multiple ou
l'heritage dynamique peuvent etre simules simplement et efficacement.
Cela ouvre aussi la voie a de nouveau 'design pattern' tres flexibles
(pour un langage dynamiquement type). Cependant, l'instance retournee
pouvant ne plus etre l'objet original, il ne doit donc pas etre detruit
mais cela s'avere une contrainte mineure et simple. Un cast vers l'objet
original est normalement impossible (mais peut le devenir si
necessaire), mais la aussi, c'est un besoin rare (que je n'ai pas encore
rencontre).
Je ne connais pas de langage OO general (type C++, Java, Eiffel) qui
offre ce genre de facilite (ou je n'en ai pas reconnu le principe).
Auriez-vous des exemples, reference ou papiers?
a+, ld.