“doc” (Col. : Science Sup 17x24) — 2007/7/19 — 18:18 — page 18 — #28
i
i
i
i
i
i
i
i
18
1
• Introduction aux concepts de programmation
declare
local C in
C={NewCell 0}
fun {Bump} C:=@C+1 @C end
fun {Read} @C end
end
L’instruction local déclare une nouvelle variable C qui est visible seulement jusqu’au
end correspondant. Il y a quelque chose d’extraordinaire dans cet exemple : comme
la cellule est référencée par une variable locale, elle est complètement invisible de
l’extérieur. Cette technique s’appelle l’encapsulation. Si on utilise l’encapsulation,
les utilisateurs du compteur ne pourront pas modifier l’intérieur du compteur. Nous
pouvons donc garantir qu’il fonctionnera toujours correctement. Ce n’était pas vrai
pour FastPascal2 parce que sa cellule est globale : n’importe qui peut la modifier.
Il s’ensuit qu’aussi longtemps que l’interface de l’objet compteur ne change pas,
son utilisateur ne peut pas savoir si l’implémentation a changé. La séparation de
l’interface et de l’implémentation est l’essence même de l’abstraction de données. Elle
peut largement simplifier le programme de l’utilisateur. Un programme qui utilise
un compteur fonctionnera pour toute implémentation aussi longtemps que l’interface
restera la même. Cette propriété s’appelle le polymorphisme. L’abstraction de données
avec l’encapsulation et le polymorphisme est traitée dans le chapitre 5.
Nous pouvons incrémenter le compteur :
{Browse {Bump}}
{Browse {Bump}}
Qu’est-ce qui est affiché ? Bump peut être appelé partout dans un programme pour
compter le nombre de fois que quelque chose se produit. Par exemple, FastPascal2
peut utiliser Bump :
declare
fun {FastPascal2 N}
{Browse {Bump}}
{FastPascal Add N}
end
1.13 LES CLASSES
Dans la dernière section nous avons défini un objet compteur. Que faire si on a besoin
de plusieurs compteurs ? Il serait bien d’avoir une « usine » pour fabriquer autant de
compteurs que nécessaire. Une telle usine s’appelle une classe. Voici une manière de
la définir :
Précédent

- 33/370

Suivant