“doc” (Col. : Science Sup 17x24) — 2007/7/19 — 18:18 — page 171 — #181
i
i
i
i
i
i
i
i
3.8 La programmation à petite échelle
171
pour trois opérations sur les listes, la concaténation, le tri et le test d’appartenance. On
peut l’écrire ainsi :
declare MyList in
local
proc {Append ... } ... end
proc {MergeSort ...} ... end
proc {Sort ... } ... {MergeSort ...} ... end
proc {Member ...} ... end
in
MyList=´export´(append:Append
sort:Sort
member:Member)
end
La procédure MergeSort est inaccessible à l’extérieur de l’instruction local.
On ne peut pas accéder aux autres procédures directement, mais seulement par les
champs du module MyList qui est un enregistrement. Par exemple, Append est
accessible comme MyList.append. La plupart des modules de bibliothèque de
Mozart, comme les modules Base et System, respectent cette structure.
➤ Un composant logiciel
Avec l’abstraction procédurale, nous pouvons convertir ce module en composant
logiciel. Le composant logiciel est une fonction qui renvoie un module :
fun {MyListFunctor}
proc {Append ... } ... end
proc {MergeSort ...} ... end
proc {Sort ... } ... {MergeSort ...} ... end
proc {Member ...} ... end
in
´export´(append:Append
sort:Sort
member:Member)
end
Chaque fois que la fonction MyListFunctor est appelée, elle crée un autre module
MyList. Dans le cas général, MyListFunctor aurait comme arguments les autres
modules utilisés pour la création de MyList.
Cette définition montre clairement que les foncteurs sont des valeurs dans le langage.
Ils partagent les propriétés suivantes avec les valeurs procédurales :
– Une définition de foncteur peut être évaluée à l’exécution, ce qui donne une
valeur de foncteur.
© Dunod – La photocopie non autorisée est un délit
i
i
i
i
i
i
i
i
3.8 La programmation à petite échelle
171
pour trois opérations sur les listes, la concaténation, le tri et le test d’appartenance. On
peut l’écrire ainsi :
declare MyList in
local
proc {Append ... } ... end
proc {MergeSort ...} ... end
proc {Sort ... } ... {MergeSort ...} ... end
proc {Member ...} ... end
in
MyList=´export´(append:Append
sort:Sort
member:Member)
end
La procédure MergeSort est inaccessible à l’extérieur de l’instruction local.
On ne peut pas accéder aux autres procédures directement, mais seulement par les
champs du module MyList qui est un enregistrement. Par exemple, Append est
accessible comme MyList.append. La plupart des modules de bibliothèque de
Mozart, comme les modules Base et System, respectent cette structure.
➤ Un composant logiciel
Avec l’abstraction procédurale, nous pouvons convertir ce module en composant
logiciel. Le composant logiciel est une fonction qui renvoie un module :
fun {MyListFunctor}
proc {Append ... } ... end
proc {MergeSort ...} ... end
proc {Sort ... } ... {MergeSort ...} ... end
proc {Member ...} ... end
in
´export´(append:Append
sort:Sort
member:Member)
end
Chaque fois que la fonction MyListFunctor est appelée, elle crée un autre module
MyList. Dans le cas général, MyListFunctor aurait comme arguments les autres
modules utilisés pour la création de MyList.
Cette définition montre clairement que les foncteurs sont des valeurs dans le langage.
Ils partagent les propriétés suivantes avec les valeurs procédurales :
– Une définition de foncteur peut être évaluée à l’exécution, ce qui donne une
valeur de foncteur.
© Dunod – La photocopie non autorisée est un délit
