“doc” (Col. : Science Sup 17x24) — 2007/7/19 — 18:18 — page 275 — #285
i
i
i
i
i
i
i
i
6.2 Les classes comme abstractions complètes
275
{C inc(X)}
bloque à l’intérieur de la méthode inc. Voyez-vous l’endroit exact du blocage ?
Essayez maintenant la variation suivante :
declare S in
local X in thread {C inc(X)} S=unit end X=5 end
{Wait S} {C browse}
Les choses fonctionnent comme prévu. L’exécution dataflow garde son comportement
habituel avec les objets.
6.2.2 La sémantique de l’exemple
Avant d’expliquer les autres possibilités des classes, nous donnons la sémantique de
l’exemple Counter. Cette définition utilise la programmation d’ordre supérieur avec
l’état explicite. La sémantique que nous donnons ici est légèrement simplifiée ; elle
omet les possibilités de class qui ne sont pas utilisées dans l’exemple (comme
l’héritage et self). La sémantique complète est donnée dans [97].
local
proc {Init M S}
init(Value)=M in (S.val):=Value
end
proc {Browse2 M S}
{Browse @(S.val)}
end
proc {Inc M S}
inc(Value)=M in (S.val):=@(S.val)+Value
end
in
Counter=c(attrs:[val]
methods:m(init:Init browse:Browse2 inc:Inc))
end
Figure 6.2 La définition de la classe Counter (sans soutien syntaxique).
La figure 6.2 donne la même définition que la figure 6.1 sans utiliser la syntaxe
class. Une classe est simplement un enregistrement qui contient un ensemble de
noms d’attributs (représenté comme une liste) et un ensemble de méthodes (représenté comme un enregistrement). Le nom d’un attribut est un littéral (« literal »),
© Dunod – La photocopie non autorisée est un délit
i
i
i
i
i
i
i
i
6.2 Les classes comme abstractions complètes
275
{C inc(X)}
bloque à l’intérieur de la méthode inc. Voyez-vous l’endroit exact du blocage ?
Essayez maintenant la variation suivante :
declare S in
local X in thread {C inc(X)} S=unit end X=5 end
{Wait S} {C browse}
Les choses fonctionnent comme prévu. L’exécution dataflow garde son comportement
habituel avec les objets.
6.2.2 La sémantique de l’exemple
Avant d’expliquer les autres possibilités des classes, nous donnons la sémantique de
l’exemple Counter. Cette définition utilise la programmation d’ordre supérieur avec
l’état explicite. La sémantique que nous donnons ici est légèrement simplifiée ; elle
omet les possibilités de class qui ne sont pas utilisées dans l’exemple (comme
l’héritage et self). La sémantique complète est donnée dans [97].
local
proc {Init M S}
init(Value)=M in (S.val):=Value
end
proc {Browse2 M S}
{Browse @(S.val)}
end
proc {Inc M S}
inc(Value)=M in (S.val):=@(S.val)+Value
end
in
Counter=c(attrs:[val]
methods:m(init:Init browse:Browse2 inc:Inc))
end
Figure 6.2 La définition de la classe Counter (sans soutien syntaxique).
La figure 6.2 donne la même définition que la figure 6.1 sans utiliser la syntaxe
class. Une classe est simplement un enregistrement qui contient un ensemble de
noms d’attributs (représenté comme une liste) et un ensemble de méthodes (représenté comme un enregistrement). Le nom d’un attribut est un littéral (« literal »),
© Dunod – La photocopie non autorisée est un délit
