“doc” (Col. : Science Sup 17x24) — 2007/7/19 — 18:18 — page 287 — #297
i
i
i
i
i
i
i
i
6.3 Les classes comme abstractions incrémentales
287
La construction d’autres portées
Les techniques pour écrire des programmes qui contrôlent l’encapsulation sont basées
essentiellement sur deux concepts : la portée lexicale et les valeurs de nom. Les portées privées et publiques définies auparavant, tout comme beaucoup d’autres portées,
peuvent être implémentées avec ces deux concepts. Par exemple, il est possible d’exprimer les portées privée et protégée de C++ et Java, et d’écrire des programmes qui
ont des politiques de sécurité bien plus élaborées. On utilise un nom au lieu d’un
atome comme étiquette pour les méthodes. Un nom est une constante infalsifiable ; la
seule manière de connaître un nom est que quelqu’un vous donne une référence (voir
la documentation de Mozart [23]). Ainsi, un programme peut passer cette référence
de façon contrôlée, aux parties du programme qui ont le droit de la connaître.
Dans les exemples précédents, nous avons utilisé des atomes comme étiquettes des
méthodes. Mais les atomes ne sont pas sécurisés : si un tiers trouve la représentation
imprimée de l’atome (en la devinant ou par un autre moyen), alors il pourra appeler la
méthode. Les noms sont une manière simple de supprimer ce genre de fuite de sécurité.
C’est important pour un projet de développement de logiciel avec des interfaces bien
définies entre différents composants. C’est encore plus important pour les programmes
répartis ouverts, qui contiennent du code écrit par différents groupes.
Les méthodes privées (dans le sens de C++ et Java)
Quand une étiquette de méthode est un nom, sa portée est limitée aux instances de
la classe, mais pas aux sous-classes ou leurs instances. C’est exactement une portée
privée dans le sens de C++ et Java. À cause de son utilité, le système à objets de
ce chapitre donne un soutien syntaxique à cette technique. Il y a deux manières de
l’écrire, avec un nom défini dans la classe ou à l’extérieur :
– Avec un identificateur comme étiquette de méthode. Cela crée implicitement un
nom quand la classe est définie et lie le nom à l’identificateur. Par exemple :
class C
meth A(X)
% Corps de la m´ ethode
end
end
L’étiquette A est liée à un nom. L’identificateur A est visible seulement dans la
définition de la classe. Une instance de C peut appeler la méthode A dans toute
autre instance de C. La méthode A est invisible pour les sous-classes. C’est une
sorte de visibilité horizontale. Elle correspond au concept de méthode privée
comme il existe dans C++ et Java (mais pas dans Smalltalk). Comme la figure 6.7
le montre, « private » dans C++ et Java est très différente de « private » dans
Smalltalk et Oz. Dans Smalltalk et Oz, « private » est relative à un objet et ses
© Dunod – La photocopie non autorisée est un délit
Précédent

- 302/370

Suivant