next up previous contents index
Next: Un Interface-Builder typé? Up: Panoramique et comparaison de Previous: Extension ``verticale'' du code

Le paradigme Target/Action

Un des slogans'' de l'orient&#233;-objet est celui de la construction d'applications &#224; l'aide de composantes r&#233;utilisables dont on n'a pas forc&#233;ment le code. Cela d&#233;g&#233;n&#232;re des fois aussi en une sorte de promesse que tout ira bien m&#234;me si vous codez avant et r&#233;fl&#233;chissez apr&#232;s, et non le contraire, mais bon.<BR> <P> Un des meilleurs exemples de r&#233;alisation de ce slogan est l'<I>Inteface Builder<A NAME="358">&#160;</A></I> qui fait partie de l'environnement de d&#233;veloppement de <I>NEXTSTEP<A NAME="360">&#160;</A></I>/<I>OPENSTEP<A NAME="362">&#160;</A></I>, du &#224; Jean-Marie Hullot. On peut voir &#224; quoi cela ressemble concr&#233;tement sur la figure&nbsp;<A HREF="node21.html#fIB">1.1</A>.<BR> <P> <P><A NAME="243">&#160;</A> <IMG ALIGN=BOTTOM ALT="figure203" SRC="img5.gif" > <BR> <STRONG>Figure 1.1:</STRONG> Interface Builder et le Target/Action paradigm.<A NAME="fIB">&#160;</A><BR> <P> <P> Cet outil exploite au maximum un paradigme bien pr&#233;cis, celui de target/action, qui pr&#233;voit que tout objet ayant une interaction avec l'utilisateur dispose de deux variables d'instance, <I>target<A NAME="364">&#160;</A></I> et <I>action<A NAME="366">&#160;</A></I>, configurables &#224; travers des m&#233;thodes de l'objet, qui d&#233;finissent &#224; quelle objet (le target) envoyer quel message (l'action) en r&#233;ponse &#224; une intervention de l'utilisateur.<BR> <P> Si on vit dans le monde C-like, ou les fonctions sans nom et les variables locales n'existent qu'&#224; un seul niveau, une telle m&#233;canique oblige &#224; demander que le langage fournisse: <P> <UL><LI> le typage dynamique: on ne sait pas a priori qui sera le target, donc on ne peut assumer rien de mieux que le fait qu'il est un objet, dont le type moins sp&#233;cifique est <I>id<A NAME="368">&#160;</A></I>, le type de d&#233;faut de tout objet non autrement qualifi&#233; <PRE>- target; - setTarget:anObject;</PRE><LI> les m&#233;thodes comme valeurs de premi&#232;re classe (passable en param&#232;tre et calculables), dont le type est <I>SEL<A NAME="370">&#160;</A></I> <PRE>- (SEL)action; - setAction:(SEL)aSelector;</PRE> </UL> <P> On verra tout de suite qu'on peut conturner cela dans un langage fonctionnel typ&#233;, tant qu'on n'a pas b&#233;soin de passer en param&#233;tre &#224; l'objet target l'objet qui declenche l'action. Mais si on veut que le target puisse int&#233;ragir avec ceux qui lui envoient l'action, on doit consid&#233;rer uneaction'' comme une méthode avec en paramètre le id de l'objet qui déclenche l'action: cela est nécessaire pour que les mécanismes de Interface-Builder restent simples. Or, on ne peut pas savoir à l'avance de qui ce message viendra, et alors la déclaration de l'action ne pourra être que

- faitqquechose: sender;
dans tout objet pouvant recevoir un message qui est une action, où le type de sender , l'objet envoyant l'action, est bien, par défaut, id.
Cela se fait aussi en Delphi de Borland, où on retrouve des tests dynamiques de type tel isa.


next up previous contents index
Next: Un Interface-Builder typé? Up: Panoramique et comparaison de Previous: Extension ``verticale'' du code

Roberto DiCosmo
Mon Jun 3 18:29:31 MET DST 1996