“doc” (Col. : Science Sup 17x24) — 2007/7/19 — 18:18 — page 173 — #183
i
i
i
i
i
i
i
i
3.8 La programmation à petite échelle
173
declare [MyList]={Module.link [´MyList.ozf´]}
La fonction Module.link est définie dans le module système Module. Cette fonction prend une liste de foncteurs, les charge, édite leurs liens (les évalue ensemble,
pour que chaque module voie ses modules importés) et renvoie une liste correspondante de modules. Le module Module permet de faire beaucoup d’autres opérations
sur les foncteurs et les modules.
➤ L’importation des modules
Les composants logiciels peuvent dépendre d’autres composants logiciels. Pour être
précis, l’instanciation d’un composant logiciel crée un module. Cette instanciation
peut avoir besoin d’autres modules. Dans la syntaxe de functor, nous déclarons
cette dépendance avec la clause import. Pour importer un module système il suffit
de donner le nom de son foncteur. Par contre, pour importer un module défini par
l’utilisateur il faut donner le nom du fichier ou l’URL où le foncteur est stocké. C’est
raisonnable parce que Mozart sait où les modules de bibliothèque sont stockés mais
ne sait pas où vous avez stocké vos propres foncteurs. Considérez le foncteur suivant :
functor
import
Browser
FO at ´file :///home/mydir/FileOps.ozf´
define
{Browser.browse {FO.countLines ´/etc/passwd´}}
end
La clause import importe le module système Browser et le module FO défini par
l’utilisateur et spécifié par le foncteur dans le fichier /home/mydir/FileOps.ozf.
Quand les liens de ce foncteur sont édités, l’instruction entre define ... end
est exécutée. La fonction FO.countLines est exécutée et ensuite la procédure
Browser.browse est appelée pour afficher le résultat. Ce foncteur est comme un
foncteur principal : il est défini pour son effet et non pour le module qu’il crée. Il
n’exporte donc aucune interface.
3.8.4 Un exemple d’implémentation de programme
Nous implémentons le compteur de fréquence des mots comme une application autonome. La figure 3.16 montre une capture d’écran de son exécution. Le programme
contient deux composants, Dict et WordApp, des foncteurs dont le code source
est dans les fichiers Dict.oz et WordApp.oz. Ces composants implémentent un dictionnaire déclaratif et le foncteur principal de l’application. Le composant WordApp
importe aussi les modules File et QTk. Il utilise ces modules pour lire le texte et
pour afficher les résultats.
© Dunod – La photocopie non autorisée est un délit
i
i
i
i
i
i
i
i
3.8 La programmation à petite échelle
173
declare [MyList]={Module.link [´MyList.ozf´]}
La fonction Module.link est définie dans le module système Module. Cette fonction prend une liste de foncteurs, les charge, édite leurs liens (les évalue ensemble,
pour que chaque module voie ses modules importés) et renvoie une liste correspondante de modules. Le module Module permet de faire beaucoup d’autres opérations
sur les foncteurs et les modules.
➤ L’importation des modules
Les composants logiciels peuvent dépendre d’autres composants logiciels. Pour être
précis, l’instanciation d’un composant logiciel crée un module. Cette instanciation
peut avoir besoin d’autres modules. Dans la syntaxe de functor, nous déclarons
cette dépendance avec la clause import. Pour importer un module système il suffit
de donner le nom de son foncteur. Par contre, pour importer un module défini par
l’utilisateur il faut donner le nom du fichier ou l’URL où le foncteur est stocké. C’est
raisonnable parce que Mozart sait où les modules de bibliothèque sont stockés mais
ne sait pas où vous avez stocké vos propres foncteurs. Considérez le foncteur suivant :
functor
import
Browser
FO at ´file :///home/mydir/FileOps.ozf´
define
{Browser.browse {FO.countLines ´/etc/passwd´}}
end
La clause import importe le module système Browser et le module FO défini par
l’utilisateur et spécifié par le foncteur dans le fichier /home/mydir/FileOps.ozf.
Quand les liens de ce foncteur sont édités, l’instruction entre define ... end
est exécutée. La fonction FO.countLines est exécutée et ensuite la procédure
Browser.browse est appelée pour afficher le résultat. Ce foncteur est comme un
foncteur principal : il est défini pour son effet et non pour le module qu’il crée. Il
n’exporte donc aucune interface.
3.8.4 Un exemple d’implémentation de programme
Nous implémentons le compteur de fréquence des mots comme une application autonome. La figure 3.16 montre une capture d’écran de son exécution. Le programme
contient deux composants, Dict et WordApp, des foncteurs dont le code source
est dans les fichiers Dict.oz et WordApp.oz. Ces composants implémentent un dictionnaire déclaratif et le foncteur principal de l’application. Le composant WordApp
importe aussi les modules File et QTk. Il utilise ces modules pour lire le texte et
pour afficher les résultats.
© Dunod – La photocopie non autorisée est un délit
