“doc” (Col. : Science Sup 17x24) — 2007/7/19 — 18:18 — page 254 — #264
i
i
i
i
i
i
i
i
254
5
• La programmation avec état explicite
peut-être faut-il plusieurs instances d’un composant ? Par exemple, un composant
peut implémenter une interface avec une base de données. S’il y a plusieurs
bases de données externes, il faudra éditer les liens de plusieurs instances du
composant. Cela est décidé à l’exécution, chaque fois qu’une base de données
est ajoutée.
La figure 5.5 montre la structure de l’application, avec des composants dont les liens
sont édités statiquement et d’autres dont les liens sont édités dynamiquement.
Instance de composant
Structure statique de l’application
Structure dynamique
(appel à Module.apply)
Dépendance
Frontière de partage
Structure dynamique
Figure 5.5 La structure statique et dynamique du système.
➤ La structure statique
Pour soutenir la structure statique, il est utile pour les composants d’être des unités
de compilation qui sont stockées dans les fichiers. Nous appelons ces composants des
foncteurs et leurs instances des modules. Un foncteur est une unité de compilation
parce qu’il peut être compilé indépendamment d’autres foncteurs. Les dépendances
du foncteur sont données comme des noms de fichier. Pour qu’il soit accessible par
d’autres foncteurs, il faut stocker le foncteur dans un fichier. Cela permet aux autres
foncteurs de spécifier qu’ils en ont besoin en donnant le nom du fichier.
Un foncteur a deux représentations : un code source, qui est simplement un texte,
et un code compilé, qui est une valeur dans le langage. Si le code source est dans un
fichier foo.oz alors il pourra être compilé pour donner un autre fichier foo.ozf qui
contient le code compilé. Voici le contenu du fichier foo.oz :
i
i
i
i
i
i
i
i
254
5
• La programmation avec état explicite
peut-être faut-il plusieurs instances d’un composant ? Par exemple, un composant
peut implémenter une interface avec une base de données. S’il y a plusieurs
bases de données externes, il faudra éditer les liens de plusieurs instances du
composant. Cela est décidé à l’exécution, chaque fois qu’une base de données
est ajoutée.
La figure 5.5 montre la structure de l’application, avec des composants dont les liens
sont édités statiquement et d’autres dont les liens sont édités dynamiquement.
Instance de composant
Structure statique de l’application
Structure dynamique
(appel à Module.apply)
Dépendance
Frontière de partage
Structure dynamique
Figure 5.5 La structure statique et dynamique du système.
➤ La structure statique
Pour soutenir la structure statique, il est utile pour les composants d’être des unités
de compilation qui sont stockées dans les fichiers. Nous appelons ces composants des
foncteurs et leurs instances des modules. Un foncteur est une unité de compilation
parce qu’il peut être compilé indépendamment d’autres foncteurs. Les dépendances
du foncteur sont données comme des noms de fichier. Pour qu’il soit accessible par
d’autres foncteurs, il faut stocker le foncteur dans un fichier. Cela permet aux autres
foncteurs de spécifier qu’ils en ont besoin en donnant le nom du fichier.
Un foncteur a deux représentations : un code source, qui est simplement un texte,
et un code compilé, qui est une valeur dans le langage. Si le code source est dans un
fichier foo.oz alors il pourra être compilé pour donner un autre fichier foo.ozf qui
contient le code compilé. Voici le contenu du fichier foo.oz :
