“doc” (Col. : Science Sup 17x24) — 2007/7/19 — 18:18 — page 169 — #179
i
i
i
i
i
i
i
i
3.8 La programmation à petite échelle
169
Ainsi un programme est simplement un graphe orienté d’unités logiques, où une
arête entre deux unités veut dire que la première a besoin de la deuxième pour son
implémentation. Dans l’usage populaire, ces unités logiques sont appelées « modules »
ou « composants ». Cette section introduit les concepts de base avec une définition
précise et montre comment ils peuvent être utilisés pour aider dans la conception de
petits programmes déclaratifs. La section 5.6 explique l’utilité de ces idées dans la
conception de grands programmes.
Les modules et les foncteurs
Un module regroupe des opérations apparentées dans une entité avec une interface et
une implémentation. Nos modules ont une représentation simple :
– L’interface du module est un enregistrement qui regroupe des entités du langage
(typiquement des procédures, mais tout est permis y compris des classes, des
objets, etc.).
– L’implémentation du module est un ensemble d’entités qui sont accessibles
uniquement par les opérations de l’interface. L’implémentation est cachée avec
la portée lexicale.
Nous considérons les spécifications de modules séparément des modules eux-mêmes.
Une spécification de module est une sorte de gabarit qui crée un module chaque
fois qu’elle est instanciée. La spécification est parfois appelée un composant logiciel. Malheureusement, le terme « composant logiciel » est utilisé avec beaucoup de
significations différentes [93]. Pour minimiser la confusion, nous appellerons les spécifications de modules des foncteurs. Un foncteur est une fonction dont les arguments
sont des modules et dont le résultat est un nouveau module. (Pour être précis, le foncteur prend les interfaces des modules comme arguments, crée un nouveau module,
et renvoie l’interface de ce module !) À cause de l’importance du foncteur dans la
structuration des programmes, il est fourni comme une abstraction linguistique. Un
foncteur a trois parties : une clause import, qui spécifie les autres modules dont
il a besoin, une clause export, qui spécifie l’interface du module, et une clause
define, qui donne l’implémentation du module y compris le code d’initialisation. La
syntaxe des foncteurs permet leur utilisation comme instructions ou expressions, tout
comme les procédures. Le tableau 3.6 donne la syntaxe des déclarations de foncteurs
comme instructions. Une déclaration de foncteur peut être une expression si le premier
identificateur variable est remplacé par une balise d’insertion « $ ».
Dans la terminologie du génie logiciel, un composant logiciel est une unité de
déploiement indépendant, une unité de développement par tiers et n’a pas d’état persistant (d’après la définition donnée par [93]). Les foncteurs satisfont cette définition.
Un foncteur est donc une sorte de composant logiciel. Dans cette terminologie, un
module est une instance de composant ; il est le résultat de l’édition des liens d’un
© Dunod – La photocopie non autorisée est un délit
Précédent

- 184/370

Suivant